RISOLUZIONE DI ALCUNI ESERCIZI SUI PROBLEMI NP-COMPLETI Corso di Algoritmi e strutture dati II – parte A (prof.ssa M. Anselmo) Sviluppo : Di Florio Aniello – matr 56/101021 (Testo: Introduzione agli algoritmi – T.H. Cormen, C. E. Leiserson, R.L. Rivest ) 36.1-1 Si definisca il problema di ottimizzazione LUNGHEZZA- CAMMINO-MASSIMO come la relazione che associa ciascuna istanza di un grafo non orientato e 2 vertici alla lunghezza del cammino semplice più lungo tra i due vertici. Si definisca il problema di decisione CAMMINOMASSIMO ={ <G,u,v,k> : G=(V,E) è un grafo non orientato , u,v Є V, k ≥ 0 è un intero, ed esiste un cammino semplice da u a v in G la cui lunghezza è almeno k}. Si mostri che il problema di ottimizzazione LUNGHEZZACAMMINO-MASSIMO può essere risolto in tempo polinomiale se e solo se CAMMINO-MASSIMO є P. DIM: dobbiamo dimostrare che se LUNGHEZZA-CAMMINO-MASSIMO può essere risolto in tempo polinomiale allora CAMMINO-MASSIMO є P () e, viceversa, se CAMMINO-MASSIMO є P allora LUNGHEZZACAMMINO-MASSIMO può essere risolto in tempo polinomiale (). Se il problema di ottimizazione LUNGHEZZA-CAMMINO-MASSIMO può essere risolto in tempo polinomiale, allora possiamo costruire un algoritmo che risolve il problema di decisione CAMMINO-MASSIMO nel modo seguente: per ogni istanza <G,u,v,k> del problema, verifichiamo se il valore k è minore del valore del cammino semplice più lungo tra u e v nel grafo G, che possiamo calcolare in tempo polinomiale per ipotesi. Avremo che <G,u,v,k> є CAMMINO-MASSIMO k valore massimo ottenuto dall’algoritmo che risolve il problema di ottimizzazione. Quest’ultimo funziona in tempo polinomiale e ciò significa che CAMMINO-MASSIMO є P. Se CAMMINO-MASSIMO є P, certamente esiste un algoritmo A che risolve in tempo polinomiale il problema di decisione. Osserviamo che la massima lunghezza di un cammino semplice in G è x, dove G=(V,E) ed x = |E|: data una istanza <G,u,v,x> come input ad A, se l’algoritmo dà risposta SI allora avremo che il problema di ottimizzazione LUNGHEZZA-CAMMINOMASSIMO avrà come soluzione il valore x. Se invece la risposta è NO per il problema di decisione con istanza <G,u,v,x> decrementiamo x di una unità alla volta, fino a che non troveremo un valore k, se esiste, tale che per l’istanza <G,u,v,k>, A darà risposta SI; il valore k facente parte dell’istanza del problema di decisione CAMMINO-MASSIMO sarà anche soluzione del problema di ottimizzazione LUNGHEZZA-CAMMINO-MASSIMO. Inoltre abbiamo trovato questo valore eseguendo A al più |E| volte. Poichè A ha complessità polinomiale, LUNGHEZZA-CAMMINO-MASSIMO può essere risolto in tempo polinomiale. 36.1-2 Si fornisca una definizione formale del problema di trovare il ciclo semplice più lungo in un grafo non orientato determinando il corrispondente problema di decisione ed il linguaggio corrispondente al problema di decisione. Problema di decisione MAX-CYCLE: dato un grafo non orientato G=(V,E) ed un intero k non negativo, esiste un ciclo semplice la cui lunghezza è almeno k? Linguaggio associato={<G,k> : G=(V,E) è un grafo non orientato, k ≥0 ed esiste un ciclo semplice in G la cui lunghezza è almeno k} . Si mostri che, se CICLO-HAMILTONIANO є P, allora il problema 36.2-3 di elencare in ordine i vertici di un ciclo hamiltoniano è risolvibile in tempo polinomiale. Sfruttando l’ipotesi che CICLO-HAMILTONIANO є P, costruiamo un algoritmo che ci dia in output un elenco ordinato dei vertici del ciclo. Poichè il problema è decidibile in tempo polinomiale, significa che esiste un algoritmo A che, dato in input un grafo G, dia risposta sì/no sull’esistenza in G di un ciclo hamiltoniano. Tramite A decidiamo se G ha un ciclo hamiloniano. Se sì, diamo in input all’algoritmo il grafo G privato di un suo generico arco (x,y); se l’algoritmo mi dà risposta no, allora significa che quell’arco è fondamentale per il ciclo e quindi lo reinseriamo, se invece mi dà risposta sì allora significa che l’arco non è indispensabile per l’esistenza in G del ciclo hamiltoniano e quindi d’ora in poi considereremo solo il grafo G privato di (x,y). Ripetendo il procedimento per tutti gli altri archi, alla fine otterremo un grafo G’ che conterrà esclusivamente gli archi costituenti il ciclo hamiltoniano presente in G. I passi svolti richiedono l’applicazione per al più |E| volte, con |E|=numero di archi in G, dell’algoritmo che risolve il problema di decisione CICLOHAMILTONIANO, che ha complessità polinomiale per ipotesi, quindi la complessità totale di questi passi è anch’essa polinomiale. ESEMPIO L’algoritmo A verifica se PASSO 1) G ha un ciclo hamiltoniano GRAFO G U V A X Y SI PASSO 2) GRAFO G1 = G privato dell’arco (u,x) U V A NO A SI A NO A NO Y X PASSO 3) GRAFO G2 = grafo G privato dell’arco (u,y) U V Y X PASSO 4) GRAFO G3 = grafo G2 privato dell’arco (u,v) U V Y X PASSO 5) GRAFO G4 = grafo G2 privato dell’arco (x,y) U Y X V PASSO 6) GRAFO G5 = grafo G2 privato dell’arco (v,y) U V A NO Y X Il grafo che conterrà solo archi del ciclo al termine dell’esecuzione dell’algortmo sarà G2 A questo punto, partendo da un generico vertice di G e seguendo il percorso in G’, otterrò un elenco ordinato dei vertici del ciclo ( capirò di aver visitato l’ultimo vertice quando incontrerò nel percorso di nuovo il vertice da cui ero partito). Questo procedimento richiede tempo lineare nel numero dei vertici di G, da sommarsi alla complessità dei passi svolti in precedenza. Abbiamo quindi esposto un algoritmo che risolve il problema di elencare ordinatamente i vertici del ciclo hamiltoniano in tempo polinomiale. 36.2-8 Sia φ una formula booleana con le variabili booleane di input x 1, x2,....., xk, la negazione (), AND (^), OR (v) e parentesi. Questa formula è una TAUTOLOGIA se vale 1 per ogni assegnamento di 1 e 0 alle variabili di input. Si definisca TAUTOLOGIA come il linguaggio delle formule booleane che sono tautologie . Si mostri che TAUTOLOGIA є CO-NP. DIM : per dimostrare che TAUTOLOGIA є CO-NP dobbiamo far vedere che il suo complemento appartiene alla classe NP, cioè che sia verificabile in tempo polinomiale. Consideriamo l’insieme *: il complemento di TAUTLOGIA è costituito dall’insieme L = * – { φ tale che φ è una tautologia}. Si ha che: L={ φ’ tale che esiste un assegnamento di verità per il quale φ’ assume valore 0}. Il linguaggio ottenuto è analogo al linguaggio associato al problema di decisione sulla soddisfattibilità di formule (SAT); ovviamente, dato come certificato un assegnamento di valori є {0,1} alle k variabili costituenti la formula, possiamo verificare in tempo polinomiale che φ’ assuma valore 0 assegnando a ciascuna delle sue variabili il valore specificato nel certificato. Il linguaggio L, quindi, appartiene alla classe di complessità NP e da ciò concludiamo che TAUTOLOGIA є CO-NP. 36.3-2 Si dimostri che L ≤p ~L ( complemento di L ) se e solo se ~L ≤p L. Dimostriamo che se L ≤p ~L allora ~L ≤p L ( ). Il fatto che L ≤p ~L implica che esiste una fnzione f: {0,1}* –> {0,1}* calcolata in tempo polinomiale tale che per ogni x є {0,1}* x є L se e solo se f(x) є ~L La funzione f quindi mette in relazione biunivoca gli elementi di L con quelli del suo complemento. Adesso dobbiamo dimostrare che esiste una funzione f1 calcolata in tempo polinomiale tale che per ogni x є {0,1}* x є ~L se e solo se f1(x) є L. Questa funzione esiste ed è proprio uguale alla funzione f, che, sappiamo per ipotesi, è calcolata in tempo polinomiale; da ciò possiamo concludere che ~L ≤p L. La dimostrazione di () è analoga a quella appena mostrata. 36.5-1 Il problema del sottografo isomorfo, dati due grafi G1 e G2, richiede se G1 è isomorfo a un sottografo di G2. Si mostri che il problema del sottografo isomorfo è NP-completo. DIM: il linguaggio associato al problema del sottografo isomorfo è ISOMORPH-GRAPHS = {<G1,G2,k> tale che G1 e G2 sono grafi ed esiste un isomorfismo tra G1 e un sottografo di G2 con k vertici}. Esso appartiene alla classe NP, poichè è verificabile in tempo polinomiale: difatti, dati un grafo G1, un grafo G2 ed un’etichettatura LAB di alcuni vertici di G2, possiamo verificare in tempo polinomiale che il sottografo di G2 formato dai vertici rietichettati in LAB sia isomorfo a G1. Scegliamo adesso un linguaggio NPcompleto e dimostriamo che esso è riducibile polinomialmente al linguaggio ISOMORPH-GRAPHS; essendo più precisi, vogliamo dimostrare che : CRICCA ≤p ISOMORPH-GRAPHS. Sia <G,k> un’istanza di CRICCA e costruiamo l’istanza <G1,G2,k> di ISOMORPH-GRAPHS nel seguente modo: poniamo G2 = G e costruiamo un grafo completo G1 il cui insieme di vertici V1 ha cardinalità k ( possiamo costruire questo grafo banalmente in tempo polinomiale nel numero dei vertici). Abbiamo quindi costruito in tempo polinomiale una funzione f: <G,k> –> <G1,G2,k> Adesso, se G ha una cricca di dimensione k, ciò significa che esiste in G2 un sottografo completo X di dimensione k ( cioè con k vertici ), che sarà certamente isomorfo a G1, poichè X e G1 hanno entrambi k vertici e sono completi. ESEMPIO GRAFICO : ISTANZA DI CRICCA = < G, 3 > ISTANZA DI ISOMORPH-GRAPHS = < G1, G2, 3 > GRAFO G GRAFO G2 = G GRAFO G1 Viceversa, se G1 è isomorfo a un sottografo di G2, ciò significa che G2 avrà un sottografo completo con k vertici, in altre parole esiste in G una cricca di dimensione k, C.V.D.