Qualcosa si è già visto:
Manca la sistematizzazione di queste cose
Il problema è NP-completo
Codifichiamo 3SAT come problema di programmazione a vincoli
Tutte le variabili hanno dominio {0,1}
Per ogni clausola, si mette un vincolo che è soddisfatto se e solo se lo è la clausola
Per esempio, x ∨ ¬ y diventa questo vincolo:
x | y |
---|---|
0 | 0 |
1 | 0 |
1 | 1 |
Manca solo x=0,y=1, che è l'unica valutazione parziale che non soddisfa la clausola
Questa dimostrazione è abbastanza ovvia
Si tratta di dimostrare che per certi tipi di problemi la complessità scende a polinomiale
Alcuni casi li abbiamo già visti
Esempio: classe dei problemi binari aciclici
Caratteristica comune: per decidere se un problema sta in questa classe, i domini e le relazioni non servono
Sono classi definite solo in base agli scope dei vincoli
Sono classi di problemi CSP definite in base soltanto agli scope dei vincoli
Quindi, per vedere se un problema sta in una classe, non servono domini e relazioni
Restrizione strutturale trattabile=una restrizione strutturale per la quale esiste un algoritmo polinomiale che risolve tutti i problemi della restrizione
Sono restrizioni sui possibili domini e relazioni
Esempio (ovvio): restrizioni in cui tutte le relazioni contengono una sola tupla
Questa è una restruzione relazionale trattabile
Sono classi di problemi definite solo guardando le relazioni e i domini
Quindi, si deve poter capire se un problema sta in una certa restrizione senza guardare gli scope dei vincoli
Esistono delle restrizioni relazionali trattabili
Una restrizione relazionale trattabile è:
È solo una riformulazione di 2SAT, che è polinomiale
Notare che la relazione sulla relazione in effetti impone ai vincoli di avere due variabili l'una
Non è una restrizione strutturale perchè gli altri vincoli in cui le variabili appaiono non hanno importanza
In alcuni casi, è possibile dare delle condizioni su delle restrizioni, in modo tale che:
Valgono per restrizioni di tipi particolari
Ora vediamo esempi
Riguarda restrizioni relazionali su domini binari
In altre parole si considerano solo problemi i cui domini hanno solo due elementi
Si può assumere che i due elementi siano 0 e 1
Non si guardano gli scope dei vincoli, quindi sono restrizioni relazionali
Il teorema dice che una restrizione relazionale (un insieme di relazioni, dato che il dominio è fissato) di questo tipo è polinomiale se:
Si considerano solo problemi di soddisfazione di vincoli in cui i domini hanno due elementi
Si consiera un insieme fissato di relazioni (che può anche essere infinito)
Se l'insieme di queste relazioni soddisfa una qualsiasi delle sei condizioni di prima:
esiste un algoritmo polinomiale che risolve i problemi che usano solo queste relazioni
Se invece l'insieme di queste relazioni non soddisfa:
l'insieme dei problemi che usano queste relazioni è NP-completo
È un problema che proviene dalle basi di dati
Si tratta di verificare se certe relazioni si possono mappare in altre
Esiste una corrispondenza diretta con il problema della programmazione a vincoli
Le strutture relazionale sono definite a partire da un vocabolario
Questo è un insieme di simboli di relazione, oguno con una arità
Si assume che il vocabolario sia fissato
Dato un vocabolario R1,...,Rn, una struttura relazionale A è composta di:
Si scrive di solito A=(VA,RA1,...,RAn)
Nelle basi di dati si può interpretare in questo modo:
Si assume (implicitamente) che tutti i dati abbiano lo stesso tipo
Una query si può anche formulare come una struttura relazionale
In particolare, questo vale per le query congiuntive
Una query congiuntiva è un insieme di letterali del tipo R(var,...,var)
Questo letterale si può vedere come una tabella con una sola riga
È quindi una relazione di una struttura relazionale,
Dato che la relazione contiene variabili, il dominio è l'insieme delle variabili
Si considera un vocabolario fissato
Ci sono due strutture sullo stesso vocabolario
Il problema è quello di vedere se è possibile "vedere" la prima struttura come un "sottoinsieme" della seconda
Sono date due strutture relazionali sullo stesso vocabolario
Un omomorfismo è una funzione h:VA → VB (una funzione che ha un valore di VA come argomento e un valore di VB come risultato), tale che:
Si tratta di vedere se esiste una corrispondenza fra i domini in modo tale che la prima struttura diventa "una parte" della seconda
In particolare, con questa corrispondenza ogni relazione della prima struttura deve diventare un sottoinsieme della relazione corrispondente nella seconda struttura
Non è richiesto che la prima relazione diventi uguale alla seconda: basta che non abbia righe che nella seconda non ci sono
Un problema di CSP si può esprimere come il problema dell'omomorfismo:
Il vocabolario è lo stesso ("nomi" di vincoli)
Nella prima struttura, il dominio sono le variabili; le relazioni sono gli scope dei vincoli
Il problema dell'omomorfismo diventa quello di dare valore alle variabili in modo tale che questi valori siano nella relazione di ogni vincolo
Quindi è il problema di soddisfare i vincoli
Dato un problema di omomorfismo, trovare un problema di soddisfazione di vincoli che sia equivalente
La difficoltà è soltanto che le relazioni della prima struttura possono contenere più tuple
Soluzione: si crea un vincolo per ognuna delle tuple di ogni relazione della prima struttura
Infatti, il problema è sempre quello di trovare valori per le variabili (valori della seconda struttura per i valori della prima) in modo tale che ogni riga della prima struttura (vincolo) diventi una riga nella seconda (sia soddisfatto, ossia la tupla sia nella relazione del vincolo)
È una dicotomia
Si basa sempre sull'omomorfismo, però in questo caso si considerano solo grafi
Un grafo è una struttura relazionale in cui esiste un unico simbolo di relazione, che è binario
Questa relazione rappresenta la presenza degli archi
Una struttura relazionale è composta da un dominio (i nodi) e da una relazione (gli archi)
Il teorema dice che stabilire l'esistenza di un omomorfismo fra grafi è polinomiale se e solo se il secondo grafo è 2-colorabilie (ossia, è bipartito), e NP-completo altrimenti
In termini di CSP, questa condizione riguarda problemi in cui tutte i vincoli sono binari e hanno la stessa relazione, e questa relazione rappresenta un grafo 2-colorabile
Una restrizione non-uniforme consiste nel considerare una singola seconda struttura relazionale nel problema dell'omomorfismo
Questo equivale a considerare un insieme fissato e finito di relazioni
È come una restrizione relazionale, ma il numero di relazioni ammesse è finito
Differenza: l'or fra un numero illimitato di variabili si realizza con una relazione per ogni numero di variabili
Quindi, non è ammesso in una restrizione non-uniforme
Non è il contrario delle restrizioni uniformi
Si considera l'unione di un insieme di restrizioni non-uniformi
In altre parole, ogni restrizione non-uniforme è un insieme di problemi; l'unione di restrizioni non-uniformi è una restrizione uniforme
Una restrizione uniforme può anche essere composta da un insieme infinito di restrizioni non-uniformi
In questo caso, la restruzione uniforme può essere intrattabile anche se ognuna delle restruzioni non-uniformi è trattabile
Una query datalog booleana definisce una funzione da insiemi di letterali del tipo L(a1,...,an) a {true,false}
Considerando gli insiemi per i quali il risultato è true, una query definisce un insieme di insiemi di letterali
Un insieme di letterali è in questo insieme se la query produce true come risultato
Anche una restrizione non-uniforme si può vedere in questo modo:
Quindi, anche una restrizione non-uniforme si può vedere come un insieme di letterali
Non tutti gli insiemi di letterali sono rappresentati da un programma Datalog
Vale però questa corrispondenza: