Algoritmi e Complessita’ computazionale materiale di riferimento per lo studio appendice App_Complessita’.pdf
Problemi decidibili :-\ Non tutti i problemi formulati matematicamente in modo rigoroso sono decidibili Halting problem: dato un programma e un input decidere se termina o va in loop Siamo interessati ai soli problemi decidibili, tali per cui esiste almeno un algoritmo che ne risolva ogni istanza.
Complessita’ di un algoritmo A f(n) = Numero di operazioni elementari necessarie all’esecuzione di A in funzione della dimensione dell’input Complessita’ in tempo e non in memoria Modello di calcolo: macchina di turing Per quali istanze? –Caso medio (difficile da valutare) –Caso pessimo (garantisce la prestazione)
Valutazione asintotica Non siamo interessati alla valutazione esatta della funzione f(n) ma al suo andamento asintotico, al crescere della dimensione (n) delle istanze. Il tipo di andamento si puo’ descrivere attraverso una funzione g(n) che limita superiormente e inferiormente f(n)
f(n) si dice (g(n)) Omicron di g c,d 0 : f(n) c + d g(n) n>n’ (g(n)) Omega di g a,b 0 : a + b g(n) f(n) n>n’ (g(n)) Teta di g a,b,c,d 0 : a + b g(n) f(n) c + d g(n) n>n’ induce delle classi di equivalenza tasso di crescita (stesso tasso di crescita)
esempi Ricerca binaria per individuare un elemento e in una lista ordinata di n elementi: (si confronta e con l’elemento l situato alla meta’ della sottolista corrente, –se l< e si itera rispetto alla meta’ superiore della sottolista corrrente, –se l> e si itera rispetto alla meta’ inferiore, –se l= e stop) –complessita’ (lg n) Enumerazione di tutte le permutazioni di n nodi per trovare il ciclo di costo minimo che passa per tutti gli n nodi una e una sola volta (ciclo hamiltoniano): –complessita’ (n!)
funzioni polinomiali vs esponenziali f(n)Valori approssimati per n= n logn n n n n logn n!
Pseudopolinomiale: quando A e’ polinomiale anche in funzione di un dato numerico dell’istanza e non solo nella sua dimensione. Ad esempio, sia A un algoritmo su grafi pesati, e la complessita’ di A dipenda anche dal valore del costo dell’arco di costo massimo del grafo nella specifica istanza di input. Polinomiale ≡ pratico mentre esponenziale ≡ inapplicabile? NON sempre! (paradosso del simplesso) Uno degli algoritmi + utilizzati in OR (simplesso) esponenzialepessimo e’ esponenziale nel caso pessimo efficientemedio ma molto efficiente nel caso medio…. La programmazione lineare PL (il problema risolto dal simplesso) e’ un problema polinomiale. Il fatto e’ dimostrabile grazie al metodo dell’elissoide, un algoritmo polinomiale, dalle prestazioni medie attualmente inferiori a quelle del simplesso!
Classi di Complessita’ dei problemi Problema di ottimizzazione p = (F,c,min) La terna e’ costituita da F la regione ammissibile, c(x) la funzione obiettivo da minimizzare su F. Versione decisionale dp = (F,c,min,k) { x F : c(x) k?} FATTI: p e’ non meno difficile di dp p dp se valutare c(x) e’ polinomiale Problema di certificato pc = (x F?) e’ il test di ammissibilita’ di una potenziale soluzione
Classi P e NP Un problema p=(F,c,min) si dice nella classe NP se esiste un algoritmo polinomiale che risolve il problema di certificato associato pc=(x F ?) Un problema p=(F,c,min) si dice nella classe P se esiste un algoritmo polinomiale che ne risolve in modo esatto la versione decisionale Requisito Minimale dei problemi allo studio: p e’ DECIDIBILE & p NP
P = NP ? Th: P NP Congettura: P NP NP P ??
I problemi “difficili” Un problema dp = (F,c,min,k) si dice NP-Completo (e la versione di ottimizzazione p = (F,c,min) si dice NP-Hard) SE p NP un algoritmo polinomiale che riduce a dp tutti gli altri problemi NP (algoritmo di riduzione) Un problema dp NP-Completo e’ almeno tanto difficile quanto ogni altro problema in NP.
Per nessun problema NP-Completo e’ noto un algoritmo (esatto) polinomiale Se esistesse un algoritmo polinomiale per un problema dp NP-Completo allora ne esisterebbe uno anche per tutti gli altri problemi in NP, e di conseguenza varrebbe che P=NP.
Le principali classi di complessita’ P NP-Completi NP
Quali sono i problemi difficili? Il principale: SAT isfiability Problem da cui la comnplessita’ della PLI TH Cook: SAT e’ NP-Completo La piu’ parte dei problemi di Ottimizzazione Combinatoria sono NP-Completi: es. –Vertex cover (minimo insieme di vertici per cui ogni arco del grafo ha almeno un vertice selezionato) –Independent Set (massimo insieme di vertici non adiacente) e complementare del Vertex cover –Max Clique (individuare il sottografo completo col maggior numero di vertici) –Knapsack (dato un insieme di oggetti ciascuno di peso w i e valore p i selezionare il sottoinsieme di valore massimo con peso totale Q) –ILP (da SAT)
The SATISFIABILITY problem x i {F,T} variabile booleana (letterale) OperatoriOperatori: And , Or , Not !, ¬ ClausolaClausola: Or di variabili boleane (negate): es. C=(x i x j !x h ) FormulaFormula in F orma N ormale C ongiuntiva : And di Clausole: F=C 1 C 2 AssegnazioneAssegnazione di verita’ v : X → {F,T} Una formula F si dice soddisfattibile se assume valore T per almeno un assegnamento delle sue variabili (quindi tutte le sue clausole devono essere T poiche’ la formula F e’ un And di clausole). SAT: v tale che F sia soddisfattibile ?
esempio F = (x 1 x 2 !x 3 ) (x 1 !x 2 x 4 ) (!x 1 x 3 !x 4 ) (!x 1 x 4 ) F e’ vera per x 1 =1 x 2 =0 x 3 =1 x 4 =1 e per x 1 =0 x 2 =0 x 3 =0 x 4 =0 mentre l’assegnamento di verita’ x 1 =1 x 2 =0/1 x 3 =0/1 x 4 =0 rende la formula F falsa. Interpretando gli operatori come prodotto, come somma, ! come 1-x, i simboli F come 0, T come 1, risolvere SAT (soddisfare F) equivale a cercare una soluzione ammissibile al sistema di PLI {C j 1, j} x 1 + x 2 + (1-x 3 ) 1 (1-x 1 ) + x 3 + (1-x 4 ) 1 x 1 + (1-x 2 ) + x 4 1 (1-x 1 ) + x 4 1 x i {0,1} i
2-SAT e’ un problema SAT con al + 2 letterali x i per ciascuna clausola Ogni altra forma di SAT si puo’ riscrivere in modo equivalente in modo che ogni clausola abbia esattamente 3 letterali (3-SAT) Quindi parlare della complessita’ di SAT si riduce a parlare della complessita’ di 2-SAT e di 3-SAT. Si puo’ dimostrare che 2-SAT e’ polinomiale 3-SAT e’ NP-Hard
2-SAT Costruiamo un grafo diretto G=(N,A) dove N = {x i, !x i letterale nella formula F} L’insieme dei nodi e’ costituito da tutti i letterali che compaiono nella formula e la loro negazione A = {(x i,x h ) clausola C=(!x i x h )} L’insieme degli archi e’ costituito da tutte le implicazioni che sono presenti nella formula F, due per ogni clausola G contiene un arco orientato (i,h) se e solo se esiste in F una clausola C=(!x i x h ) e ha il significato di “i implica j” (i j). l’implicazione i j e’ equivalente alla contronominale ! j ! i
Equivalenza logica Le formule ¬a b, a→b, ¬b→ ¬a, sono logicamente equivalenti, i.e., hanno lo stesso valore di verita’ in funzione di a, b. Ricordando che a→b non e’ verificata (vale 0) solo per a=1 e b=0 (ipotesi verificate ma tesi non verificata), costruisco la tabella di verita’: ab¬a¬a¬b¬b ¬ab¬ab a→b¬b→¬a¬b→¬a contronominale
Di conseguenza, sul grafo G=(N,A) associato alla formula F, la singola clausola C =(!x i x h ) genera 2 archi nel grafo: l’arco (i,h) ma anche l’arco (!h,!i) data l'equivalenza di x h e !!x h e quindi l'equivalenza della clausola (!x i x h ) con la clausola (!x i !!x h ) il grafo G possiede una simmetria: se (i,h) è un arco di G, allora in F c’e’ la clausola (!x i x h ) che e’ equivalente alla clausola (!x i !!x h ) (!!x h !x i ) che genera l’arco (!h, !i) allora anche (!h,!i) è un arco di G Infatti, dati due letterali a, b, affermare “a oppure b” equivale ad affermare sia che “se non a allora b”, che “se non b allora a” (proprieta’ contronominale)
Ogni arco (i,j) in G rappresenta un’ implicazione logica x i →x j in base all’equivalenza logica tra (!x i x j ) e (x i →x j ) Osservazione: l’implicazione e’ transitiva: (a→b) e (b →c) e (c→d) implica (a→d) Un cammino orientato su G e’ una sequenza di implicazioni tale che la tesi di una implicazione coincide con l’ipotesi della successiva. TH:F e’ insoddisfattibile un indice i tale per cui sul grafo G posso andare da x i a !x i e anche da !x i a x i Dim: se un cammino orientato da x i a !x i e uno da !x i a x i F induce entrambe le implicazioni (x i → !x i ) e (!x i → x i ) per la transitivita’ dell’implicazione. Se v(x i )=T (x i → !x i ) genera la contraddizione (T → F) Se v(x i )=F (!x i → x i ) genera la contraddizione (T → F). Nessun assegnamento di valori di verita’ v(x i ) puo’ soddisfare F. Posso usare queste considerazioni operativamente per costruire un algoritmo che dica se F e’ soddisfattibile?
Ricordiamo che (a b) induce gli archi !a→b e !b→a (!a b) induce gli archi a→b e !b→!a (!a !b) induce gli archi a→!b e b→!a esercizio: applichiamolo alla formula F = ( x 1 x 2 ) (x 1 !x 3 ) (!x 1 x 2 ) (x 2 x 3 ) ESEMPIO
v(x 2 )=T PropagoNell’unico modo che evita T → F non Esiste (almeno) un cammino da !x 2 a x 2 ma non viceversa. Il cammino da !x 2 a x 2 rende falsa l’assegnazione di verita’ F a x 2 poiche’ genera la contraddizione T → F. Devo necessariamente assegnare v(x 2 )=T Propago il valore x 2 =T sul grafo: come? Nell’unico modo che evita T → F Secondo la regola:se un nodo e’ F il predecessore deve essere F. se un nodo e’ T il successore deve essere T. In questo caso la propagazione non ha effetti poiche’ il nodo x 2 non ha archi uscenti, ne’ !x 2 ha archi entranti. F = ( x1 x2 ) (x1 !x3) (!x1 x2 ) (x2 x3) Consideriamo la variabile x 1 : non ci sono cammini orientati ne da x 1 a !x 1, ne viceversa, quindi provo ad assegnare un valore di verita’ (T) ad x 1. v(x 1 )=T Propago in avanti v(x 1 )=T, in coerenza con l’attuale valore di x 2. cosi’ come la propagazione all’indietro di v(!x 1 )=F lo e’ con l’attuale valore di !x 2. x 3 Qualsiasi assegnazione a x 3 soddisfa F poiche’ non si crea mai T → F T F T F
Esercizio F = (¬a b) (¬b c) (a ¬c) (c b) F e’ soddisfattibile ? Costruisco il grafo, seleziono una variabile, le assegno valore di verita’ e propago a !b b !a c !c
F = (¬a b) (¬b c) (a ¬c) (c b) Costruisco il grafo a !b b !a c !c
F = (¬a b) (¬b c) (a ¬c) (c b) Propago v(a)=T a !b b !a c !c T T T Il suo successore b deve essere T Anche c, successore di b, deve essere T Assegno valore alle negazioni dei letterali gia assegnati Non ci sono contraddizioni, perche’ non si sono create implicazioni del tipo T→F Infatti da nessun nodo T posso raggiungere, tramite un cammino orientato, un nodo F: Ad esempio, da !a raggiungo a, mentre da a non raggiungo !a F F F Ho trovato una assegnazione dei valori di verita’ che soddisfa F
F = (¬a b) (¬b c) (a ¬c) (c b) Ora propago v(a)= F a !b b !a c !c F T T F T F Il suo predecessore c deve essere F Anche !b, predecessore di c, deve essere F Assegno valore alle negazioni Individuo una contraddizione associata all’arco b → c. QUINDI La formula F NON E’ soddisfattibile per v(a)=F ma LO E’ per v(a)=T
Come opera l’algoritmo? In sintesi, Attraverso una visita del grafo per archi uscenti, a partire da un nodo, certifico la soddisfattibilita’ o meno di F per un dato assegnamento di verita’ al letterale corrispondente al nodo. In caso affermativo, propagando i valori di verita’ possibili, ottengo una assegnazione di verita’ che soddisfa F. L’algoritmo ha complessita’ polinomiale vediamo in maggior dettaglio a cosa corrispondono questi passi sulla formula F… Dagli esempi al metodo
L’algoritmo implementa tramite operazioni di visita su grafo la seguente procedura sulla formula F: Seleziona una variabile x i e ponila a T Modifica la formula F basandosi su x i =T (propagazione) secondo queste regole rimuovi ogni clausola resa vera da x i =T (ogni clausola che contenga x i ) assegna valore agli altri letterali della clausola non assegnati, secondo queste regole, che impediscono di avere la contraddizione (T implica F): –per ogni clausola della forma ( x i x k ) con x i =T allora x k deve essere T. Ricorsivamente modifica la fomula basandosi su x k =T. –per ogni clausola della forma (x i x k ) con x i =F allora x k deve essere F. Ricorsivamente modifica la fomula basandoti su x k =F.
Si possono avere 3 casi al termine della procedura di propagazione 1) Tutte le variabili hanno un valore la formula F e’ soddisfattibile perche’ la propagazione e’ fatta in modo da non ceare contraddizioni. 2) Molte clausole, ma non tutte, sono state rimosse, lasciando un problema di dimensioni ridotte Seleziona un’altra variabile e ripeti. La scelta x i =T ha portato a una contraddizione. –Allora riprendi dalla partenza propagando x i =F. –Se anche questa scelta porta a una contraddizione la formula e’ insoddisfattibile, altrimenti vai al caso 1 o 2
Individuare la classe di un problema p P NP-Hard NP ??? p
Trasformazioni e riduzioni Trasformazione Trasformazione polinomiale E’ un algoritmo R che, data un’istanza I di un problema decisionale p, produce in tempo polinomiale un’istanza I’ di un problema decisionale p’ in modo tale che, se la risposta è “SI” per I, allora la risposta è “SI” anche per I’ Riduzione Riduzione polinomiale (simbolo p ) ( q p p q si riduce a p) E’ un algoritmo R q che, per risolvere un’istanza I q di un problema decisionale q, usa al suo interno una subroutine che risolve un’istanza I p di un problema decisionale p, in modo tale che l’algoritmo R q sarebbe polinomiale SE - la subroutine fosse di ordine O(1), (cioe’ se fosse eseguita in un tempo costante indipendente dalla dimensione di I p ), - i parametri da passare alla subroutine fossero calcolabili in tempo polinomiale
Individuare la classe di un problema q P, p p q (il nostro problema si riduce ad uno polinomiale) p P q NP-Completi, q p p (un problema Np-Completo si riduce al nostro problema ) p NP-Completi P NP-Hard NP pp p pp q q
Come attribuire una classe di complessita’ a un problema TEST: p P? SI se riduco p a un problema q in P con una riduzione polinomiale (procedimento contruttivo poiche’ fornisco un algoritmo polinomiale per p) p NP-Completi? SI se riduco un problema q NP-Completo a p con una riduzione polinomiale.
Esempio di riduzione a un problema in P 2-SAT si riduce a un problema di connessione su un grafo, risolvibile con un numero polinomiale (2n) di chiamate a una procedura di visita per stelle uscenti, che e’ a sua volta polinomiale nella dimensione del grafo. INFATTI Per ogni letterale i la visita verifica se esiste un cammino orientato che connette il nodo associato ad x i al nodo associato a !x i e se esiste anche un cammino orientato che connette !x i a x i. In tal caso nessuna assegnazione di verita’ rende la formula soddisfattibile.
Dimostrazione di NP-completezza di un problema p Per RESTRIZIONE: si dimostra che un caso particolare di p e’ NP-completo (nb non vale l’inverso, i.e. p caso particolare di un problema NP-completo) Per RIDUZIONE: si determina una riduzione polinomiale di un problema q in p, essendo noto che q e’ NP-completo. Infatti se p fosse polinomiale avrei trovato un algoritmo polinomiale anche per q → assurdo.
Alcuni problemi NP-Completi (in forma decisionale) 3SAT : Data una formula di n letterali F(x 1, …,x n ) in 3-NCF, i.e. F = C 1 … C m, dove Ci = (x i1 x i2 x i3 ), F e’ soddisfattibile ? Clique : dato un grafo G, e un numero k>0 ∊ N, G contiene un sottografo completo di k nodi? Vertex Cover : dato G=(V,E), e un intero i, esiste un sottoinsieme di nodi U V s.t. |U|= i e arco e=(u,v) ∊ E, almeno un suo estremo u o v sta in U ? Independent Set: dato G=(V,E), e un intero k>0, esiste un sottoinsieme U di V s.t. |U|= k e coppia di nodi in U non esiste l’arco e=(u,v)? Subset Sum: dati n elementi {w 1, …,w n } e un valore B, esiste un sottoinsieme di elementi la cui somma vale ex B ? (Noto il caso di B=Σ i w i /2)
Alcuni esempi di riduzione 3-SAT si riduce a Clique (3-SAT p C) Clique si riduce a Vertex Cover (C p VC)
3-SAT si riduce a Clique ( Clique e’ NP-Hard) Costruisco un grafo G=(V,E) con –V = { coppie | a e’ un letterale della clausola C i } –E = { (, ) | i j and a !b } i.e. non ci sono archi tra due nodi del tipo (stesso letterale negato e affermato) ne ci sono archi tra due nodi del tipo (letterali della stessa clausola) Su G cerco una clique di dimensione k = m, numero di clausole Hint: i nodi della clique sono i letterali a cui devo dare valore vero per soddisfare la formula
3-SAT p Clique (esempio) F = (x 1 x 2 !x 3 ) (x 2 !x 1 x 3 ) Nel grafo esiste (almeno) clique una clique di 2 nodi, fatta da x 1,1 e x 2,2. Infatti dando valore True ai due letterali, verifico entrambe le clausole C 1 e C 2, e dunque la formula F
3-SAT p Clique (proposta di esercizio) F = (!a b !c) (!b c) (a !c) !a,1 b,1 !c,1 !b,2 c,2 a,3 !c,3 Sono cliques di dimensione 3 le seguenti; {!a1, !b2, !c3} con assegnamento di verita’ a=b=c=F {!c1, !b2, a3} e assegnamento di verita’ pari a a=T, b=c=F Entrambi gli assegnamenti soddisfano la formula Perche’ la cliques di dimensione massima non puo’ avere dimensione > m (numero delle clausole)?
Supponiamo che F = C 1 … C m, sia soddisfattibile. Allora in ogni clausola C almeno un letterale a ha valore T, e non possono essere contemporaneamente veri a nella clausola C i e la sua negazione !a nella clausola C k. Questi nodi formano una Clique di dimensione m=k perche’ esiste un arco tra ciascuna coppia di siffatti nodi. Al contrario, se una Clique di dimensione m, allora deve contenere un nodo per ogni indice i, poiche’ i letterali della stessa clausola (con lo stesso i) non sono adiacenti. Inoltre non possono essere nella stessa Clique sia a che !a, per lo stesso motivo. Ponendo a T i letterali corrispondenti ai nodi della clique si soddisfa la formula F. 3-SAT p Clique (dim.)
Clique si riduce a Vertex Cover (I) ( Vertex Cover e’ NP-Hard) Costruisci il grafo complementare G C = (V,E C ), dove E C = {(u,v) | (u, v) E } sono gli archi non presenti in G=(V,E). Sia l = |V |-k = n-k. Grafo G Grafo complementare G C
Clique si riduce a Vertex Cover (II) Se nel grafo G esiste una clique K V di dimensione k, allora in G C nessuna coppia di vertici della clique K e’ adiacente, per definizione di G C. Allora i nodi in V-K sono un vertex cover per G C di dimensioni l=n-k, poiche’ ogni arco di G C ha almeno un vertice non in K.. Viceversa, se G C ha un vertex cover U di dimensione n-k, allora nessuna coppia di vertici s, t in V-U e’ adiacente, altrimenti il loro arco (s,t) non sarebbe coperto dai soli nodi in U mentre per hp U e’ un vertex cover. Allora i nodi di V-U nel grafo G formano una clique di dimensione k.
Problemi complementari: la classe co-NP coNP e’ la classe di complessita’ i cui membri sono problemi complementari di quelli in NP. Cosi’ come NP e’ definita come la classe dei problemi il cui certificato e’ polinomiale (rispondere alla domanda “x appartiene da F”?), coNP puo’ essere considerata come la classe di problemi per cui esiste un certificato polinomiale del tipo “x NON appartiene ad F”?
GGCGGC K7K7 Grafo G Grafo complementare G C K 7 e’ il grafo completo di ordine 7, dato dall’unione degli archi in G e in G C
GGCGGC i nodi in verde sono una clique in G, i nodi fuxia sono un vertex cover in G C
Polinomiale o Esponenziale? Cambiare un piccolo dettaglio della definizione di un problema puo’ mutarne l’appartenenza da una classe all’altra P Shortest Path Eulerian Circuit Edge Cover MST NP-complete Longest ElementaryPath Hamiltonian Circuit Vertex Cover Steiner Tree Consiglio: consultare il Garey&Johnson (biblioteca, emule) e il compendium
conclusioni Dato un nuovo problema e’ utile determinare se questo e’ in P o e’ NP-Difficile, allo scopo di determinare l’approccio risolutivo + adatto. Nel primo caso la dimostrazione ci da un algoritmo di soluzione. Nel secondo, sappiamo che per ottenere una soluzione ottima pagheremo nel caso pessimo un tempo esponenziale. Se l’applicazione reale non lo consente opteremo per un approccio di tipo euristico. L’analisi puo’ mettere in luce dei sottoproblemi facili del nsotro problema (prese alcune decisioni il problema restante e’ in P) che possono suggerire degli approcci risolutivi che sfruttano questa proprieta’.