Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Complessita astratta
1. Assiomi di Blum
Lo studio della complessità tratta dell’ammontare delle risorse che sono necessarie per computare una funzione. Esse
possono essere lo spazio fisico utilizzato, il tempo o qualche misura pesata sul tempo che il processore impiega, o
addirittura il denaro che bisogna spendere. Gli assiomi di Blum sono validi per qualunque misura si scelga, a patto
che sia rigorosa e ben definita.
Nel corso della trattazione, ove non esplicitamente specificato, quando diremo che una funzione è “ricorsiva”,
intenderemo che è “totale e computabile” e, quando diremo che un predicato è “ricorsivo”, intenderemo che è
“totale e decidibile”.
C x, i y è ricorsivo* (AB2).
Per semplicità, scriveremo Ci x C x, i e penseremo a tale simbolo come la complessità della
computazione di una certa macchina quando al programma di codice i viene assegnato x come
input.
Lemma
Sia Ci x il numero di passi che un programma di codice i impiega sull’input x .
C è una MC.
AB1) Banale, per definizione.
AB2) Si ricava dalla computabilità del numero di passi di un programma (cfr. Computabilità).
Lemma
Sia M i x il più grande valore assunto da qualunque variabile in un programma di codice
i sull’input x se esso si arresta, altrimenti.
M è una MC.
AB1) Banale, per definizione
AB2) Per dimostrare la ricorsività di M x, i y , si analizza la computabilità del seguente
algoritmo:
1. Se si raggiunge una configurazione tale che una qualche variabile (le variabili sono in numero
finito) assume un valore maggiore di y , il predicato è falso;
2. altrimenti, se il programma si arresta con tutte le variabili aventi valori minori o uguali a y , il
predicato è vero;
3. altrimenti, se la stessa configurazione (con tutti i valori delle variabili minori o uguali a y ) si
ripete due volte, il predicato è falso.
Lemma
Le seguenti asserzioni sono equivalenti:
a) AB2
b) C x, i y è ricorsivo (AB2a)
c) C x, i y è ricorsivo (AB2b)
a b) Si vede subito che Ci x y Ci x y Ci x y 1 y 0 .
b c) Osserviamo che Ci x y z y Ci x z .
Teorema
(isomorfismo delle MC)
D è una MC.
AB1) È ovvio, dato che r è ricorsiva e C è una MC.
AB2) Per verificare la ricorsività di D x y ,
i basta trovare il numero t tale che
r 0 r 1 r t y r t 1 e osservare che Ci x t Di x y . Infatti,
Ci x t Di x r Ci x r t y ed anche t 1 Ci x y r t 1 r Ci x Di x .
Questo teorema indica che tutte le misure di complessità sono legate tra loro alla stregua di Ci e Di .
Teorema
(della connessione ricorsiva)
(ricavando hi x, y per y Di x ) max Ci x , Di x Ci x , per cui Ci x r x, Di x
vale x i e quindi è QS.
Il teorema precedente ci dà l’autorizzazione, in certi casi, ad affermare che se una proprietà è vera per una certa
misura di complessità, lo sarà per tutte.
2. Gap e Speed-Up
Teorema
(del gap)
Supponiamo che g sia una funzione che cresce molto velocemente. Il teorema ci assicura che, se scegliamo t in
maniera opportuna, a partire da un certo valore dell’input assegnato ad un programma, la sua complessità data
rimane “confinata” al di sotto di tale funzione, mentre noi ci aspetteremmo che crescesse come g . Questo è il “gap”
di cui si parla.
Se abbiamo due computer, uno molto più veloce dell’altro, che eseguono lo stesso programma
di codice i con tempo di esecuzione rispettivamente Ci e Di (sono chiaramente MC), e
definiamo g x, y r x, y y 1 , dove r è data dal teorema di connessione ricorsiva, se x i
avremo Ci x r x, Di x g x, Di x QS. Per cui, se il secondo computer esegue il programma
in tempo di esecuzione Di x t x , avremo g x, Di x g x, t x Ci x g x, t x , che
verifica le ipotesi del teorema del gap, da cui Ci x t x QS. Quindi, per input sufficientemente
grande, i due computer effettueranno comunque la computazione nello stesso tempo t x !
Teorema
(dello speed-up)
Il teorema dello speed-up ci dice che per quanto alta sia la complessità con cui una funzione viene computata da un
certo programma, ne esisterà certamente un altro che la computa con complessità minore.
Essendo una qualunque stringa si1 , si2 ,, sim codificabile in maniera univoca mediante il numero
naturale 2i0 3i1 5i2 pmim1 , dove pi è l’ i -esimo numero primo, possiamo dire che A* è isomorfo
a , e scriveremo A* .
Teorema
(sulla compressione dei nastri)
1
) Preso r r 1 , sia A b , s1 , , sm il nostro alfabeto.
c
Sia M la TM dell’ipotesi. Consideriamo una porzione di nastro larga r caselle e codifichiamo i
simboli contenuti in uno solo, incorporando nella codifica anche la presenza ed eventuale
posizione della testina. Così avremo una nuova TM M , con m (r 1)(m 1)r simboli e un
nuovo alfabeto A s1 , s2 ,, sm . Gli spostamenti della testina e i cambi di simbolo su M
corrisponderanno a cambi di simbolo su M , solo che adesso verranno occupate al massimo
S n
cS n caselle. Quindi avremo DSPACE S n DSPACE cS n .
r
) È banale perché, per la scelta di c , abbiamo cS n S n , e quindi un linguaggio accettato
con l’utilizzo di meno caselle sarà sicuramente accettato con l’utilizzo di più caselle (fittizie).
Per cui, DSPACE cS n DSPACE S n .
Corollario
Sia L un linguaggio accettato da una NTM con k nastri in spazio S n .
Teorema
(sulla riduzione dei nastri per la complessità spaziale)
Teorema
(del linear speed-up)
Codifichiamo l’alfabeto per la nuova macchina M raggruppando m simboli del vecchio in uno
solo e scegliendo m | cm 16 .
Il passo base è quello di leggere dal nastro di input di M e codificarlo su uno di quelli di
output. Quindi la nuova macchina M userà tali nastri di M scambiati di ruolo. Avremo che
n
occorrono n passi per leggere e per scrivere.
m
In seguito, bisogna considerare il controllo finito, per cui a m transizioni su M ne
corrisponderanno al massimo 8 su M (???). Quindi il tempo preso dalle transizioni sarà al
T n
massimo 8 e, di conseguenza, il tempo totale T n impiegato da M sarà
m
n T n n T n n T n
n 8 n
1 8 1 n 8 2 (possiamo supporre senza
m m m m m m
n T n 1 T n
perdita di generalità n 1 ) 2n 8 2 n 8 .
m m m m
T n T n T n
Per ipotesi, inf d 0 nd | n nd d , per cui n.
n n n d
1 T n T n 2 1 8
Avremo allora, T n 2 8 T n .
m d m d md m
16 1 c m 1 4 1
Per ipotesi cm 16 m , In conclusione, se scegliamo d , per
c m 16 4 8 c 8
n max nd ,1 , avremo T n cT n .
Corollario
T n
Sia inf .
n n
DTIME T n DTIME cT n c .
Teorema
(sulla riduzione ad un nastro per la complessità temporale)
Corollario
Data una NTM M con k nastri, sia L un linguaggio accettato da M in tempo T n .
Teorema
(sulla riduzione a due nastri per la complessità temporale)
Corollario
Data una NTM M con k nastri, sia L un linguaggio accettato da M in tempo T n .
1. Gerarchie di complessità
Teorema
(di incompletezza gerarchica)
L , linguaggio ricorsivo, tale che vale almeno una delle seguenti asserzioni:
1) L DSPACE f n
2) L NSPACE f n
3) L DTIME f n
4) L NTIME f n
Per la TdC, M , TM, che decide se w L . Sia w il suo codice e, per assurdo, sia
L DSPACE f n . Possiamo dire se w L ?
Premettiamo che, dato che L è accettato in spazio f w , la computazione non utilizza più di
f w caselle, per cui la condizione 2 è falsa. Inoltre:
2) 3) 4) La dimostrazione è analoga.
Il teorema ci dice che esistono delle gerarchie delle classi di complessità perché, se un certo
linguaggio è accettato in tempo o spazio f n , esiste sicuramente una funzione g n per cui
tale linguaggio non è accettato.
Una funzione S n è detta space-constructible (SC) se esiste una TM di
complessità spaziale S n , che su qualche input di lunghezza n utilizzi
esattamente S n caselle.
k
Le funzioni log n , n , 2n e n! sono SC.
Lemma
Data una TM M di complessità spaziale S n log 2 n n , sia L un linguaggio
accettato da M .
M , TM di complessità spaziale S n che accetta L e si arresta su tutti gli
input.
Duplichiamo M su M . Siano s gli stati di M e t i suoi simboli. Quando L viene accettato,
vengono effettuate al massimo s(n 2) S n t S n transizioni, altrimenti si avrebbe una
ripetizione, e la computazione non si arresterebbe. Aggiungiamo una traccia (insieme di
S n
caselle) che conta le transizioni: se M si arresta, lo farà prima di 4st s(n 2) S n t S n
transizioni. Infatti, M imposta un contatore di lunghezza log 2 n in base 4st , e lo incrementa
ogni volta che viene esaminata una nuova casella al di qua della traccia contatore. Così, se M
va in loop avendo utilizzato solo m caselle, allora il contatore lo segnalerà quando avrà
max m,log 2 n
raggiunto il valore 4st s (n 2) S n t S n . Di conseguenza, M si arresterà su tutti gli
input.
Teorema
(sulla distinzione tra gerarchie spaziali)
S1 n
Siano date le funzioni S1 n , S 2 n log 2 n , con S 2 n FSC , tali che inf 0.
n S n
2
L DSPACE S 2 n | L DSPACE S1 n .
(???)
Corollario
S1 n
Siano date le funzioni S1 n , S 2 n log 2 n , con S 2 n soltanto SC , tali che inf 0.
n S n
2
L DSPACE S 2 n | L DSPACE S1 n .
Una funzione T n è detta time-constructible (TMC) se esiste una TM di
complessità temporale T n , che su qualche input di lunghezza n impieghi
esattamente tempo T n .
Una funzione T n è detta fully time-constructible (FTMC) se esiste una
TM di complessità temporale T n , che su tutti gli input di lunghezza n
impieghi esattamente tempo T n .
Una funzione FTMC è ovviamente anche TMC.
Teorema
(sulla distinzione tra gerarchie temporali)
T1 n log T1 n
Siano date le funzioni T1 n , T2 n , con T2 n FTMC , tali che inf 0.
n T2 n
(???)
2. Relazioni tra gerarchie di complessità
Teorema
(sulle gerarchie di complessità)
b) L DSPACE f n f n log 2
n n c | L DTIME c f n
c) L NTIME f n c | L DTIME c f n
a) Se L DTIME f n , la TM che accetta L compirà al massimo f n transizioni, quindi non
esaminerà più di f n 1 caselle per ogni nastro. Se compiamo un’opportuna codifica, in
modo che la TM contenga due simboli per casella, le celle utilizzate per ogni nastro saranno al
f n 1
massimo f n . Di conseguenza L DSPACE f n
2
Se costruiamo una nuova TM M con un nastro che conta c f n ed un altro che simuli M ,
potremo utilizzare un terzo nastro che opera come segue:
f n
1. Se la simulazione di M non si arresta prima che il contatore raggiunga c , allora L non è
accettato (stiamo ripetendo una configurazione precedente loop);
2. se la simulazione di M si arresta prima, anche la M si arresta e restituisce lo stesso
risultato.
simboli, avremo che il tempo è al massimo c f n per qualche costante c . Ne consegue che
L DTIME c f n .
Teorema
(di Savitch)
L DSPACE S 2 n .
Sia M una NTM di complessità spaziale S n . Per cui, c | c S n è il numero massimo di
configurazioni su un input di lunghezza n . Perciò, se il numero di transizioni supera tale valore,
M non si arresta mai, perché la configurazione verrà ripetuta.
(i )
Con I1 I 2 intenderemo che, partendo dalla configurazione I1 , arriviamo alla configurazione
(i )
I2 in al più 2i transizioni. Per i 0 , possiamo verificare I1 I 2 controllando se
( i 1) ( i 1) (i )
I | I1 I I I 2 . Così lo spazio necessario per vedere se I1 I 2 è uguale a quello
necessario per registrare la configurazione corrente I più quello per testare se si può arrivare
da una all’altra in al più 2i1 transizioni. Osserviamo che lo spazio richiesto per quest’ultimo
controllo può essere riutilizzato ogni volta.
Se prendiamo una TM M , con un nastro utilizzato come stack per le chiamate della procedura
di test, possiamo simulare M e verificare se accetta L mediante il seguente algoritmo ( I 0 è la
configurazione iniziale, I f quelle finali):
1. Sia m log 2 c ;
a. se TEST( I 0 , I f , mS n ), ACCETTA;
3. HALT.
4. TEST ( I1 , I 2 , i )
(0)
a. Se i 0 I1 I 2 I1 I 2 , ritorna TRUE;
b. se i 0 , per ogni configurazione I di lunghezza al più S n :
Dato che I1 , I 2 e I sono configurazioni con non più di S n caselle, possiamo rappresentarle
in spazio S n . La simulazione della posizione della testina in binario usa log 2 n S n caselle.
Inoltre il nastro di input è fisso e non abbiamo bisogno di ricopiarlo ad ogni configurazione. Il
parametro i può essere codificato in binario utilizzando non più di mS n caselle. Così ogni
stack occupa uno spazio S n e, dato che i decresce, il numero totale di stack utilizzati
sarà S n . Quindi in totale lo spazio utilizzato sarà S 2 n . Per il teorema sulla
compressione dei nastri, possiamo riprogettare M in modo che lo spazio utilizzato sia
esattamente S 2 n . Di conseguenza, L DSPACE S 2 n .
D. Intrattabilita
1. Classi P e NP
Partendo dalle classi di complessità fondamentali, indichiamo con PSPACE DSPACE n k e
k 1
NPSPACE NSPACE n k le classi dei linguaggi riconosciuti in spazio polinomiale da una TM e
k 1
da una NTM rispettivamente; indichiamo con P DTIME n k e NP NTIME n k le classi dei
k 1 k 1
linguaggi riconosciuti in tempo polinomiale da una TM e da una NTM rispettivamente.
È ovvio che P NP .
Da ora in poi, ci occuperemo principalmente solo dello studio della complessità temporale.
2. L’input di del problema conosciuto deve poter essere convertito in quello dell’altro in tempo e
spazio polinomiali. Per quanto riguarda il tempo, il motivo è lo stesso di cui sopra; per lo spazio,
la ragione è che potremmo ottenere lo stesso un tempo non polinomiale rispetto al primo input
perché il secondo lo è diventato pure, e quindi non sapere l’origine dell’inefficienza.
Lemma
Sia F una formula qualsiasi del calcolo proposizionale.
F si può ridurre in tempo polinomiale ad una formula CNF F equivalente alla
prima.
Teorema
(di Cook)
SAT è NPC.
Su un alfabeto di n variabili booleane, basta che una NTM prenda le 2n interpretazioni
[N] )
possibili e verifichi il valore di verità della formula. Dato che tale verifica può essere compiuta
in tempo polinomiale, si ha SAT NP .
[H] ) Prendiamo un linguaggio L NP . Esisterà una NTM M , che, in tempo polinomiale p n ,
accetta un input x x1 , xn L . Sia s0 , s1,..., sk l’alfabeto di M e siano q1 ,..., qm gli stati
interni.
Intanto, osserviamo che, partendo da una casella base, la testina potrà fare al massimo p n
spostamenti a destra o altrettanti a sinistra. Quindi lo spazio utilizzato da M è al massimo
2 p n 1 . Inoltre, dato che M non può cambiare più di p n stati diversi e scrivere più di
p n simboli diversi, abbiamo che m p n e (considerando il simbolo presente sulla casella
di partenza) k p n . Quindi se prendiamo le quadruple q j , sl , , q j , dato che può anche
essere uno dei due simboli speciali di spostamento, troviamo che possono essere al massimo
m(k 1)(k 3)m O m 2 k 2 O p 4 n (ancora polinomiale).
Per ricavare una formula CNF che sarà ridotta a M , consideriamo le seguenti variabili:
- Q i, j , i 0 p n , j 1 m : vera se, all’istante i , M è nello stato q j
Scriviamo le sub-formule che descrivono M (ove non diversamente specificato, gli indici
i, j , c, l variano come sopra):
- G1 Q i,1,, Q i, m ,Q i, j , Q i, j , con j j : indica che, ad ogni istante, M si trova in
un unico stato
- G2 H i, p n , , H i, p n ,H i, c , H i, c con c c : indica che, ad ogni istante, la
testina è su una sola casella
- G3 S i, c,0 ,, S i, c, k , S i, c, l , S i, c, l , con l l : indica che, ad ogni istante, nella
casella c è presente un unico simbolo
- G4 S 0, p n ,0 ,,S 0, 1,0 ,S 0,0, x1 ,,S 0, n 1, xn , S 0, n,0 ,, S 0, p n ,0 ,
Q 0,1 ,H 0,0 : specifica lo stato iniziale
- G5 Q p n ,1 : specifica lo stato finale di accettazione
Q i, j , H i, c, S i, c, l , S i 1, j, l , con 0 se sl , altrimenti 1, l l (il segno
dipende dallo spostamento a destra o a sinistra)
Si vede facilmente che la complessità di ciascuna sub-formula è polinomiale (anche se con
esponenti diversi), per cui tale anche sarà quella della formula finale G G1, , G6 .
È evidente che x L c’è una computazione accettante per M su x in tempo polinomiale
c’è un’assegnazione dei valori di verità alle variabili Q , H e S che soddisfa G . Di
conseguenza SATCNF è NPH. Ma dato che, per il lemma precedente, possiamo passare da una
formula qualsiasi ad una CNF in tempo polinomiale, anche SAT è NPH.
D’ora in avanti, quando parleremo di SAT lo considereremo come se fosse SATCNF , vista la sostanziale equivalenza tra i due problemi.
Teorema
3SAT è NPC.
Su un alfabeto di n variabili booleane, basta che una NTM prenda le 2n interpretazioni
[N] )
possibili e verifichi il valore di verità della formula. Dato che tale verifica può essere compiuta
in tempo polinomiale, si ha 3SAT NP .
[H] ) Riduciamo da SAT a 3SAT .
Siano U e C rispettivamente l’insieme delle variabili e la formula CNF per SAT , contenente m
clausole. Costruiamo gli insiemi U e C che saranno i rispettivi analoghi per 3SAT nel modo
seguente:
1. Per i 1,, m
a. se Ci X i , siano U i Yi , Z i e Ci X i , Yi , Zi , X i , Yi , Z i , X i , Yi , Z i , X i ,Yi , Z i
b. se Ci X ,Y , siano U Z e C X , Y , Z , X , Y , Z
i i i i i i i i i i i
c. se Ci X i , Yi , Z i , siano U i e Ci Ci
d. se Ci X i , Yi , Zi ,Wi ,1 ,,Wi ,t , siano U i Vi ,1 ,,Vi , t
e Ci X i ,Yi ,Vi ,1 , Vi ,1 , Zi ,Vi ,2 ,
Vi ,2 ,Wi ,1 ,Vi ,3 ,, Vi ,t 1 ,Wi , t 2 ,Vi , t , Vi , t ,Wi ,t 1 ,Wi , t
m
2. Siano U U U e C C,, C
i 1 m
i 1
In tal modo, otteniamo evidentemente una PTR. Per dimostrare che C è soddisfacibile sse C
lo è, osserviamo che, qualunque valore di verità Vi , j abbia in una clausola di Ci , esso è negato
in quella successiva, e analizziamo i quattro casi dell’algoritmo precedente, facendo vedere,
per ogni i , che Ci è soddisfacibile sse Ci lo è:
a) Banale, perché se Ci è vera, per costruzione, almeno una delle clausole di Ci lo sarà; se è
falsa, lo saranno pure tutte queste ultime
b) Banale, per costruzione come il caso precedente
c) Ovvio, perché non si introduce nulla di nuovo
d) Se tutti i letterali di Ci sono falsi, lo sarà almeno una clausola di Ci perché in ciascuna di
esse ne è presente almeno uno e per l’osservazione; se almeno uno dei letterali di Ci è vero, la
clausola di Ci che lo contiene sarà vera e le altre saranno tutte vere per l’osservazione.
Di conseguenza, 3SAT è NPH.
Corollario
1SAT e 2SAT sono NPC.
1SAT è banale (vale anche per le formule DNF).
Per 2SAT si procede in maniera analoga a 3SAT (vale anche per le formule DNF).
Dato un grafo non direzionato G V , E , un sottoinsieme V V si dice vertex
cover per G di dimensione kV se V k e vi , v j E accade che vi V v j V .
Denotiamo con VC il problema della VERTEX COVER per un grafo G V , E , cioè decidere se
esiste una sua cover, non banale (cioè V stesso) e non vuota, di dimensione k V .
Teorema
VC è NPC.
Sia G V , E il grafo di p nodi per cui trovare la vertex cover V .
Fissato 0 k V , basta che una NTM prenda ogni V V , con V k , e verifichi se è una
[N] )
vertex cover. Dato che tale verifica può essere compiuta in tempo polinomiale e che i
sottografi da vagliare sono O p 2 , si ha VC NP .
[H] ) Riduciamo da 3SAT a VC .
Prendiamo una formula F con n variabili e m clausole e costruiamo il grafo G in modo che
abbia 2n vertici, corrispondenti ai letterali possibili, cioè alle variabili e alle loro negazioni; ogni
variabile sarà connessa da un lato alla sua negazione. Poi aggiungiamone altri 3m , connessi “a
triangolo”, ognuno dei quali corrisponde ad una clausola, e scorriamo F , connettendo un
vertice di ogni clausola con il letterale corrispondente.
Tale trasformazione dell’input prende spazio polinomiale (i vertici totali sono 2n 3m e i lati
sono n 6m ) e tempo polinomiale (i passi compiuti scorrendo la formula sono 3m ).
Dimostriamo che esiste una VC per G di dimensione k n 2m sse F è soddisfacibile:
) Sia V ' V una VC per G .
Intanto, dev’essere per forza solo xi V o solo xi V , perché se fossero entrambi in V ,
supereremmo n 2m , mentre se non ve ne fosse alcuno, non sarebbe una vertex cover. Per
questo motivo assegnamo a xi il valore vero se xi V , falso altrimenti. I restanti 2m vertici
sono due per ogni triangolo: se fossero di più, supereremmo n 2m ; se fossero di meno, non
avremmo una vertex cover. In tal modo, per ogni clausola si ha almeno un letterale vero,
altrimenti non saremmo riusciti a coprire i triangoli. Di conseguenza, F è soddisfacibile.
) Sia F soddisfacibile.
Essendoci in ogni coppia xi , xi almeno un letterale vero, per costruire la vertex cover,
inserisco intanto i vertici corrispondenti a tali letterali in V . Poi inseriamo, per ogni clausola,
due vertici del triangolo corrispondente che non sono connessi a tali letterali. In questo modo,
tutti i vertici saranno coperti, per cui V sarà una vertex cover per G .
Da tutto ciò, ricaviamo che VC è NPH.
Per esempio, data la formula F x1 , x2 , x3 , x2 , x3 , x4 , avremo:
Lemma
Dato un grafo G V , E , sia V V .
Teorema
IS è NPC.
Siano G V , E il grafo di n nodi per cui trovare l’independent set V e 1 k V .
[N] ) Fissato 1 k V , basta che una NTM prenda ogni V V , con V k , e verifichi se è un
independent set. Dato che tale verifica può essere compiuta in tempo O n 2 e che i sottografi
2
da vagliare sono O n , si ha IS NP .
[H] )Per il lemma, chiedersi se esiste una vertex cover per G di dimensione k equivale a
chiedersi se esiste un independent set per lo stesso grafo di dimensione n k . Dato che la
differenza tra insiemi prende tempo polinomiale, ricaviamo che IS è NPH.
Dato un grafo non direzionato G V , E , un sottoinsieme V V si dice k-clique
per G se tutte le coppie di nodi di V sono connesse da un lato in E.
Denotiamo con CLIQUE il problema del trovare se esiste una clique di dimensione 1 k V per
un grafo G V , E .
Lemma
Dato un grafo G V , E , sia V V .
Teorema
CLIQUE è NPC.
[N] ) Basta che una NTM prenda ogni V V , con V k , e verifichi se è una clique. Dato che
tale verifica può essere compiuta in tempo O n 2 e che i sottografi da vagliare sono O n 2 , si
ha CLIQUE NP .
[H] )
Per il lemma precedente, chiedersi se esiste un independent set per G di dimensione k
equivale a chiedersi se esiste una clique per il suo complementare della stessa dimensione.
Dato che la differenza tra insiemi di coppie prende tempo polinomiale quadratico, ricaviamo
che CLIQUE è NPH.
Lemma
Dato un grafo G V , E , sia V V .
Teorema
2DM P
È facile verificare tutti gli accoppiamenti in tempo polinomiale in maniera deterministica.
Teorema
3DM è NPC.
[N] )
Basta che una NTM prenda ogni insieme di combinazioni possibile e verifichi il matching
con le “preferenze”. Ciò può essere svolto in tempo polinomiale (cubico??). Di conseguenza
3DM NP .
Riduciamo da 3SAT a 3DM (la struttura della formula darà l’insieme delle preferenze P ,
[H] )
mentre un’assegnazione dei valori di verità che la soddisfa ne genererà un matching M P ).
Siano U u1, u2 , , un e C C1 , C2 ,, Cm rispettivamente l’insieme delle variabili e delle
clausole di una formula F di 3SAT . Per formare P W X Y tale che le triple contenute non
abbiano sovrapposizioni di componenti, costruiamo tre suoi sottoinsiemi che rappresentano
“funzioni” separate di esso.
truth setting Per ciascuna variabile ui U , introduciamo l’insieme Ti Ti Ti , dove
Ti ui j , ai j , bi j |1 j m e Ti ui j , ai j 1, bi j |1 j m ui m, ai 1, bi m .
Si vede subito che qualsiasi matching comprenderà esattamente m triple tutte da Ti o tutte
da Ti , per ogni i 1,, n (perché altrimenti qualche componente a o b coinciderebbe), e
quindi ciò costringe a scegliere un valore di verità per ui (vero se scegliamo Ti , falso se
scegliamo Ti ).
sat testing Per ogni clausola c j C , costruiamo l’insieme S j ui j , s X j , sY j | ui C j
ui j , s X j , sY j | ui C j , per cui ogni matching conterrà esattamente una tripla di S j .
Ciò è possibile solo se almeno un letterale in ui C j (o ui C j ) non appartiene alle triple in Ti
scelte per il matching, che accade sse il valore di verità stabilito per quest’ultimo soddisfa la
clausola considerata.
garbage collection Definiamo l’insieme G ui j , g X k , gY k , ui j , g X k , gY k | 1 i n,
1 j m, 1 k m(n 1) , dove ogni coppia g X k , gY k deve essere “attriplata” con il solo
tra ui j e ui j che non compare in alcuna tripla di M G . La struttura di G ci assicura che
ci siano m(n 1) coppie g X k , gY k che possono essere coperte scegliendo M G . In tal
modo, ogni qual volta che un sottoinsieme di P G soddisfa i vincoli imposti dal
truth setting e dal sat testing , esso può essere esteso ad un matching per P .
Costruiamo gli insiemi del 3DM :
W ui j , ui j | 1 i n, 1 j m , X A S X GX , Y B SY GY
A ai j | 1 i n, 1 j m B bi j | 1 i n, 1 j m
(dove S X s X j | 1 j m e SY sY j | 1 j m ),
GX g X k | 1 k m(n 1) GY gY k | 1 k m(n 1)
n m
P Ti S j G W X Y (che contiene 2mn 3m 2m 2n(n 1) triple, e quindi può
i 1 j 1
Dato un insieme finito X , sia C X X X un insieme di triple di X in cui sono presenti tutti
gli elementi di X almeno una volta in una qualsiasi posizione. Denotiamo con X 3C il problema
del trovare se esiste un’EXACT 3-SET COVER per X , con X 3n , cioè se esiste C C tale
che le componenti di X nelle triple compaiono una volta sola in una qualche posizione.
Teorema
X 3C è NPC.
Osserviamo che X 3C è un caso più generale di 3DM , per cui si verifica facilmente la
condizione [N] e quella [H] , riducendolo da quest’ultimo.
Dato un grafo G V , E , con V v1,, vn è detto cammino hamiltoniano per G
l’insieme ,
P vi1 , vi2 , vi2 , vi3 ,, vin1 , vin E | 1 is n, is it s t s, t 1n che corrisponde ad
un percorso passante per tutti i vertici del grafo una sola volta. Se è possibile
aggiungere un lato che ritorna al primo vertice (cioè, se
P vi , vi , vi , vi ,, vi , vi , vi , vi E | 1 is n, is it s t s, t 1 n ), l’insieme è detto
1 2 2 3 n1 n n 1
Teorema
DHC è NPC.
[N] )
Basta che una NTM prenda tutti i percorsi possibili e verifichi che il cammino passi una sola
volta per ciascun vertice e ritorni a quello di partenza. Tale verifica è ovviamente polinomiale,
per cui HC NP .
[H] ) Riduciamo da 3SAT a DHC .
Siano F una formula 3 CNF contenente n variabili xi e k clausole C j , e mi il massimo tra le
occorrenze di xi e di xi . Costruiamo il grafo diretto G H I , dove H H1 H 2 H n e
I I1 I 2 I k . Ogni frammento H i ha un nodo di uscita di collegato al nodo di entrata
ai 1 di H i 1 e H n ritorna su H1 mediante il lato d n , a1 : in tal modo la macrostruttura di H
rappresenta un ciclo. Oltre ai nodi di entrata e uscita, ogni frammento ha anche due “colonne”
di mi 1 nodi bit e cit . I frammenti I j non sono connessi tra loro direttamente. Nelle figure
seguenti sono rappresentati rispettivamente i frammenti H i , il sottografo H e i frammenti I j .
ai
H1 v j1 vj2 v j3
bi 0 ci 0
bimi cimi
Hn
di
Per collegare i frammenti H i con quelli I j si procede nel modo seguente: per ogni occorrenza
di xi ( xi ), si connetta il primo nodo disponibile cit ( bit ) con v jp e il nodo vjp con bi , t 1 ( ci , t 1 ),
dove j è l’indice della clausola dove si trova xi ( xi ) e p è l’indice della sua posizione
all’interno di essa. Da notare che vi sono sempre nodi disponibili, in quanto t mi . Queste
operazioni si possono evidentemente svolgere in tempo polinomiale.
Dimostriamo che F è soddisfacibile sse G ha un circuito hamiltoniano.
) Data un’assegnazione di valori di verità t : x1 ,, xn V , F che soddisfa F , costruiamo
per ogni i 1,, n il ciclo nel modo seguente:
- per ogni s m , all’analisi di cis (o bis ), se il esso è connesso ad un frammento I j non ancora
incluso nel ciclo, allora lo aggiungiamo (per esempio, se includiamo c , v ,
is jp dobbiamo
aggiungere tutti i lati opportuni a partire da v jp in modo da toccare tutti i vertici una sola volta
e includere v , b ); altrimenti, anettiamo al ciclo c , b (o b , c );
jp i , s 1 is i , s 1 is i , s 1 in ogni caso,
includiamo b , c (o c , b ) e passiamo ad esaminare c
i , s 1 i , s 1 i , s 1 i , s 1 (o b ); i , s 1 i , s 1
- all’analisi di cimi (o bimi ), aggiungiamo cimi , di (o bimi , di ) e di , ai 1 ( d n , a1 , se i n ).
Teorema
HC è NPC.
[N] ) Si procede come per DHC , da cui HC NP .
[H] ) Riduciamo da DHC a HC .
Sia G V , E un grafo diretto. Costruiamo il grafo indiretto G V , E nel modo seguente:
- per ogni nodo v V , si aggiungano a V tre nodi v, v, v e ad E due archi v, v , v, v ;
Teorema
TSP è NPC.
[N] )
Basta che una NTM prenda tutti i percorsi possibili, sommando i pesi, e verifichi che il
cammino passi una sola volta per ciascun vertice e ritorni a quello di partenza, e che tale
somma sia non superiore al valore voluto. Tale verifica è ovviamente polinomiale, per cui
TSP NP .
[H] ) Riduciamo da HC a TSP .
Sia G V , E un grafo indiretto. Costruiamo il grafo indiretto G V , E assegnando 1 come
peso a tutti i lati, e come valore limite k il numero dei vertici (operazione evidentemente
eseguibile in tempo polinomiale). In questo modo, si evince che G ha un ciclo hamiltoniano
sse in G tale ciclo “pesa” esattamente k .
Dati una matrice A k n e un vettore b k , denotiamo con ILP (programmazione lineare intera)
il problema di trovare se esiste un vettore x n tale che sia soddisfatto il sistema lineare Ax b .
Teorema
ILP è NPC.
[N] ) (data la difficoltà, omettiamo la dimostrazione di appartenenza a NP )
[H] ) Riduciamo da 3SAT a ILP .
Sia F una formula 3 CNF con n variabili e m clausole. Costruiamo il sistema lineare nel modo
seguente:
- per ogni variabile xi aggiungiamo al sistema le incognite xi e xi , e delle equazioni tali da
xi xi 1
x xi 1
forzare queste incognite a rappresentare dei valori di verità opposti: i
xi 0
xi 0