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.