NP completezza
Problemi decisionali
I problemi decisionali sono una classe di problemi dove
per ogni possibile ingresso un algoritmo deve scegliere
una di due risposte possibili: “si” o “no”.
Si tratta quindi della classe delle funzioni computabili del
tipo
f: N  {0,1}
Problemi decisionali: esempi
• Problema del sottografo completo. Dati un grafo G e
un intero n, stabilire se il grafo G contiene un
sottografo completo con n vertici.
• Problema del cammino hamiltoniano. dato un grafo G
stabilire se esiste un cammino che tocca tutti i vertici
di G una e una sola volta.
• Problema del cammino euleriano. Dato un grafo G
stabilire se esiste un cammino che percorra tutti gli
archi di G una e una sola volta.
Problemi decisionali: esempio: CNF
CNF – una formula booleana del tipo:
(x1,1x1,2...x1,k1)&(x2,1x2,2...x2,k2)&...&(xn,1xn,2...xn,kn),
dove xi,j = vs o xi,j = ¬vs per un dato insieme di variabili
{v1,...,vm}.
• Problema SAT. Data una CNF F stabilire se F è
soddisfacibile, cioè se esiste un assegnamento di valori 0
e 1 alle variabili in F tale per cui il valore di F per
quell’assegnamento è 1.
Problemi decisionali: CNF
k-CNF: una formula booleana del tipo:
(x1,1x1,2...x1,k)&(x2,1x2,2...x2,k)&...&(xn,1xn,2...xn,k),
dove xi,j = vs o xi,j = ¬vs per un insieme dato di variabili
{v1,...,vm}.
• k-SAT. Data una k-CNF F, stabilire se F è
soddisfacibile, cioè se esiste un assegnamento di valori
0 e 1 alle variabili in F, tale per cui il valore di F per
quell’assegnamento è 1.
Problemi di ottimizzazione
Spesso il problema non richiede di rispondere si o no,
ma di trovare il massimo o il minimo di una funzione
(es. TSP, VRP, RCPSP, ... )
Questi sono problemi di ottimizzazione, sono
comunque riconducibili a problemi di decisione
chiedendosi se esiste una soluzione di costo inferiore
(superiore) a una soglia k e istanziando ad es. una
ricerca binomiale per il minimo k intero.
La complessità di un problema di ottimizzazione e del
suo corrispondente problema decisionale è la stessa.
Codifica
Un problema è un’entità astratta (es. il TSP).
Una istanza del problema è un suo caso particolare in cui
vengono specificati tutti i suoi elementi costitutivi.
Un programma risolve un problema se può generare una
soluzione in corrispendenza di qualunque sua istanza.
Per poter risolvere un problema con un programma è necessario
codificare l’istanza da risolvere con una stringa (binaria)
comprensibile dal programma.
Codifica: corrispondenza fra l’insieme delle istanze del
problema e un insieme di stringhe binarie.
e: I  {0,1}*
La classe P
Un problema decisionale P è nella classe P se esiste un
algoritmo che risolve qualsiasi istanza del problema P in
tempo polinomiale.
Il tempo viene calcolato rispetto alla dimensione
dell’istanza, cioè alla lunghezza della stringa passata in
ingresso al programma che implementa l’algoritmo.
Una funzione f:{0,1}*  {0,1}* è calcolabile in tempo
polinomiale se esiste un algoritmo polinomiale che, dato in
input un qualsiasi x={0,1}*, produce come output f(x).
La classe NP
Un problema decisionale P è nella classe NP se esiste un
algoritmo non-deterministico che risolve qualsiasi
istanza di P in tempo polinomiale (rispetto alla
dimensione dell’istanza).
Algoritmi nondeterministici
Un algoritmo non deterministico è un programma che può
anche contenere istruzioni del tipo
goto {L1,...,Ln}
eseguendo questa istruzione il programma salta
arbitrariamente a una delle etichette
L1,...,Ln.
Algoritmi nondeterministici
Algoritmo non-deterministico: programma con
goto {L1,...,Ln}
A seconda delle etichette scelte, l’algoritmo nondeterministico A produce risultati diversi.
Si definisce realizzazione di A ciascuna delle possibili
esecuzioni di A.
Algoritmi nondeterministici
Un algoritmo non-deterministico A calcola una funzione
f: N  {0,1} se e solo se
• per ogni aN, tale che f(a) = 1, tutte le realizzazioni di A
terminano, e esiste una realizzazione di A che ritorna 1;
• per ogni aN, tale che f(a) = 0, tutte le realizzazioni di
A terminano restituendo 0.
Algoritmi nondeterministici: esempi
Esiste un algoritmo non deterministico polinomiale per I
problemi Complete subgraph, Hamiltonian cycle, Euler
cycle, SAT e k-SAT.
Per il problema del ciclo euleriano esiste anche un
algoritmo polinomiale.
P e NP
Ovviamente PNP
non è noto se P = NP
la risposta vale 1.000.000 di dollari
Riducibilità polinomiale
f : N  {0, 1} è riducibile polinomialmente a g : N  {0, 1}
se esiste una funzione h, calcolabile in tempo polinomiale,
tale che per ogni x:
f(x) = g(h(x))
Notazionalmente: f p g
NP completezza
f : N  {0, 1} è NP-completo se e solo se:
• fNP
• per ogni gNP si ha g p f
P e NP
P = NP
P = NP
P  NP
NP completi
NP
P
Prove di NP completezza
Difficile: dalla definizione. Si richiede di dimostrare che la funzione
è in NP e che qualunque altra funzione in NP è riducibile
polinomialmente alla funzione data.
Probabilmente la prova più semplice di questo tipo può essere fatta
per il problema SAT:
stabilire se una data formula CNF è soddisfacibile.
Più facile: mostrare che la funzione f è in NP quindi mostrare che g
p f per qualche problema g che è già noto essere NP completo.
NP completezza: esempi di prove
• Problema del sottografo completo. Dati un grafo G e
un intero n stabilire se esiste un sottografo completo
di G si n vertici.
Prova di NP-completezza.
• Problema SAT. data una CNF F, stabilire se F è
soddisfacibile.
Si essume di sapere già che SAT è NP-completo.
NP completezza: esempi di prove
a1
b1
Riduzione da SAT
ab & ¬ab & ¬b
¬a2
b2
¬b3
CNF
Grafo
(k = 3)