Algoritmi e Strutture Dati
Schifano S. Fabio [email protected]
Algoritmi e Strutture Dati
Laurea di Informatica - Università di Ferrara 2011-2012
[1]
Complessità
La teoria della complessità si occupa di caratterizzare e classificare i problemi, di cui la teoria della
Calcolabilità ci ha dimostrato la loro risolubilià, dal punto di vista della quantità di risorse necessarie per
risolverli, indipendentemente dal modello di calcolo che si usa.
I problemi vengono caratterizzati in funzione di una risorsa di calcolo, quale il tempo o lo spazio, e quindi
suddivisi in classi o insiemi di complessità.
Parleremo quindi di:
. complessità temporale: cioè il numero di passi elementari necessari a risolvere un problema. Ad esempio,
il numero di transizioni di una macchina di Turing.
. complessità spaziale: lo spazio necessario a risolvere il problema. Ad esempio, nel caso delle macchine
di Turing ci riferiremo al numero di celle occupate durante la computazione.
Indichiamo con tA(n) il tempo di esecuzione di una algoritmo A che calcola la funzione f con input n.
Esempio: il numero di passi impiegati dalla macchina di Turing Mf per calcolare il valore di f (n)
Indichiamo con sA(n) lo spazio di memoria utlizzato dall’algoritmo A su input n.
Esempio: il numero di celle usate dalla macchina di Turing Mf per calcolare il valore f (n).
Nel caso della complessità spaziale ci riferiremo solamente allo spazio occupato durante la computazione
trascurando quello necessario per memorizzare l’input.
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[2]
Valutazione della Complessità
Dato un problema P diciamo che:
. P ha complessità temporale O(g(n)), cioè superiormente limitata dalla funzione g(n), se ∃ un algoritmo
A tale che tA(n) = O(g(n)), cioè se e solo se esistono due costanti a, b tali che
∀n ∈ N, tA(n) ≤ a · g(n) + b
. P ha complessità temporale Ω(g(n)), cio’e inferiormente limitata dalla funzione g(n), se ∃ un algoritmo
A tale che tA(n) = Ω(g(n)), cioè se e solo se esistono due costanti a, b tali che
∀n ∈ N, tA(n) ≥ a · g(n) + b
. P ha complessità temporale Θ(g(n)) se ∃ un algoritmo A tale che
tA(n) = O(g(n)) = Ω(g(n))
La definizione di complessità è data in termini asintotici ed in alcuni casi può essere fuorviante nel senso che
le costanti moltiplicative ed additive possono giocare un ruolo fondamentale.
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[3]
Ad esempio, si supponga di avere due algoritmo A, B , tali che
2
n
tA(n) = O(n ) e tB (n) = O(2 )
Allora, secondo le definizioni date, diremo che A è migliore di B .
Ma se
tA(n) = 1010 · n2 + 238
tB (n) = 10−19 · 2n + 1
tB per molti valori di n assume valori decisamente inferiori a tA.
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[4]
Tipi di Problemi
È utile classificare i problemi in base all tipologia stessa del problema.
Ad esempio dato x ed una funzione f (x) si possono istanziare le seguenti tipologie di problemi:
•
•
•
•
decisione: determinare se esiste un valore y tale che y ∈ f (x)
ricerca: determinare un valore y0 tale che y0 ∈ f (x)
enumerazione: determinare tutti i valori di f (x)
ottimizzazione: determinare una valore y ∈ f (x) ottimo secondo una qualche funzione di costo.
Esempio. Il problema decisionale dell’esistenza di una cricca di dimensione k in un grafo è definito nel
seguente modo:
. istanza: G = (V, E), k > 0
0
0
0
. predicato: ∃ V ⊆ V, |V | = k, ∀u, v ∈ V , (u, v) ∈ E
Dato un grafo G, una cricca di dimensione k è un sottografo G0 di k nodi mutuamente adiacenti.
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[5]
Complessità Temporale e Spaziale
La teoria della complessità è generalmente definita facendo uso dei problemi di decisione e dei linguaggi ad
essi associati.
Ciò è principalmente dovuto ai seguenti fattori:
1. ogni problema di decisione può facilmente essere trasformato in un problema di riconoscimento di un
linguaggio da parte di una MdT.
Infatti codificate opportunamente le istanze del problema, si può costruire una MdT che accetta le istanze
vere e rifiuti le istanze false.
2. l’output di un problema decisionale è una valore booleano, quindi il costo di restituzione del risultato non
viene calcolato e tutti i costi hanno origine solo dalla computazione.
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[6]
Esempio Definiamo un linguaggio per il problema cricca di un grafo.
Sia Σ l’alfabeto utilizzato per codificare il grafo G e l’intero k. Il problema cricca corrisponde al linguaggio
Lcricca = {x ∈ Σ∗ | x corrisponde ad una cricca dimensione k}
Per esempio, dato k = 3 e il seguente grafo G = (N, A) :
N = {1, 2, 3, 4} A = {[1, 2], [1, 3], [1, 4], [3, 4]}
possiamo usare l’alfabeto Σ = {|, 1, 0, ∗} per codificare il grafo e il valore k:
x = 0111 | 1000 | 1001 | 1010 ∗ 11
Questa stringa rappresenta le righe della matrice nodi-nodi di G separate tra loro dal carattere | seguite dalla
codifica binaria di k.
La dimensione dell’input è O(n2), con n uguale al numero dei nodi del grafo.
Abbiamo quindi formulato il problema cricca di un grafo in un problema decisionale: riconoscere le stringhe
s ∈ Σ∗ corrispondenti ad una cricca di dimensione k.
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[7]
Tempo Computazionale
Possiamo quindi definire i concetti di tempo e spazio computazionale facendo riferimento al riconoscimento di
un linguaggio da parte di una Macchina di Turing.
Definizione Tempo Computazionale Deterministico
Un linguaggio L è accettabile in tempo deterministico t(n) se esiste una MdT deterministica che
accetta il linguaggio L in tempo t(n), ovvero se il numero di passi necessari per accettare una stringa
del linguaggio è t(n), ove n è la dimensione della stringa di input.
Analogamente possiamo definire il tempo computazionale per una MdT non-deterministica.
Definizione Tempo Computazionale Non Deterministico
Un linguaggio L è accettabile in tempo non deterministico t(n) se esiste una MdT non deterministica
che accetta il linguaggio L in tempo t(n), ovvero se il numero di passi necessari per accettare una
stringa del linguaggio è t(n), ove n è la dimensione della stringa di input.
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[8]
Spazio Computazionale
Definizione Spazio Computazionale Deterministico
Un linguaggio L è accettabile in spazio deterministico s(n) se esiste una MdT deterministica che
accetta L in spazio s(n), ovvero se il numero di celle occupate durante la computazione necessarie per
accettare una stringa del linguaggio è s(n), ove n è la dimensione della stringa di input.
Analogamente possiamo definire lo spazio computazionale per una MdT non-deterministica.
Definizione Spazio Computazionale Non Deterministico
Un linguaggio L è accettabile in spazio non deterministico s(n) se esiste una MdT NON deterministica
che accetta L in spazio s(n), ovvero se il numero di celle occupate durante la computazione necessarie
per accettare una stringa del linguaggio è s(n), ove n è la dimensione della stringa di input.
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[9]
Classi di Complessità
Avendo definito il concetto di tempo e spazio computazionale, possiamo definire le seguenti classi di complessità
rispetto ad una funzione di costo f : N → N :
. DTIME(f (n)): l’insieme dei linguaggi decisi da una MdT deterministica ad 1 nastro in tempo al più f (n).
. NTIME(f (n)): l’insieme dei linguaggi decisi da una MdT non deterministica ad 1 nastro in tempo al più
f (n).
. DSPACE(f (n)): l’insieme dei linguaggi decisi da una MdT deterministica ad 1 nastro (più un nastro
di sola lettura e monodirezionale contenente la stringa di input. In questo modo possiamo trascurare
lo spazio necessario a contenere l’input irrilevante ai fini del calcolo della complessità) in spazio al più f (n).
. NPSPACE(f (n)): l’insieme dei linguaggi decisi da una MdT non deterministica ad 1 nastro (più un
nastro di sola lettura e monodirezionale contenente la stringa di input. In questo modo possiamo trascurare
lo spazio necessario a contenere l’input irrilevante ai fini del calcolo della complessità) in spazio al più
f (n)
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[10]
Teoremi di Compressione ed Accelerazione
Nel calcolo della complessità temporale e spaziale le costanti moltiplicative sono trascurate. Ciò è giustificato
da due teoremi fondamentali detti rispettivamente di compressione ed accelerazione.
Tali teoremi ci permettono di affermare che:
per qualunque algoritmo con una complessità (di tempo o spazio) φ(n) è possibile derivare un
algoritmo di complessità c φ(n) per ogni costante c < 1 predefinita
Teorema di Compressione Lineare
Sia M una MdT che accetta un linguaggio L in spazio s(n) e sia c > 0 una costante. Allora è
possibile costruire una MdT che accetta L in spazio s0(n) ≤ c · s(n).
Intuitivamente, se una macchina M con alfabeto Λ, posso costruire una macchina M0 con alfabeto Λ0 tale
che |Λ0| = |Λ|k con k = 1/c, e codificare una sequenza di k simboli del nastro di M con un simbolo
dell’alfabeto Λ0.
In questo modo lo spazio occupato da M0 è k volte inferiore a quello occupato da M.
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[11]
Teoremi di Compressione ed Accelerazione
Conseguentemente al risparmio di spazio si ha anche un accelerazione del tempo di computazione come
stabilito dal seguente teorema.
Teorema di Accelerazione Lineare
Sia M una MdT che accetta un linguaggio L in tempo t(n) e sia > 0 una costante. Allora è
possibile costruire una MdT con 2 nastri che accetta L in tempo t0(n) ≤ · t(n) + O(n).
Intuitivamente, se sul nastro ci sono meno simboli la testina si muove di meno e quindi si effettuano meno
passi.
I due teoremi appena enunciati formalizzano il seguente concetto:
Aumentando opportunamente la capacità di memorizzazione di una singola cella e la potenza
computazionale delle singole operazioni di un modello ci calcolo (MdT, RAM ...), è possibile
migliorare linearmente la complessità temporale e spaziale di un algoritmo.
Poichè i miglioramenti sono ottenuti potenziando opportunamente o capacità di memorizzazione di una cella
o la potenza di una singola operazione, e non da miglioramenti algoritmici, si ha che:
Problemi difficili rimangono difficili
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[12]
Classi di Complessità
I teoremi precedenti permettono di affermare che tutte le classi definite rispetto a funzioni asintoticamente
equivalenti (cioè a meno di costanti moltiplicative) sono equivalenti.
In particolare dal teorema di compressione si deduce che:
0
. DSPACE(s(n)) = DSPACE(s (n))
0
∀ s0(n) = O(s(n))
. NPSPACE(s(n)) = NPSPACE(s (n))
∀ s0(n) = O(s(n))
e dal teorema di accelerazione lineare si deduce che:
0
∀ t0(n) = O(t(n))
0
∀ t0(n) = O(t(n))
. DTIME (t(n)) = DTIME (t (n))
. NTIME (t(n)) = NTIME (t (n))
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[13]
Classi di Complessità Temporali
A questo punto possiamo definire le classi di complessità temporali in modo indipendente da una specifica
funzione di costi, cioè definiamo:
∞
k
. P= ∪k=0 DTIME(n ): la classe dei linguaggi decidibili da una MdT deterministica in tempo polinomiale
nella dimensione dell’input.
∞
. EXPTIME= ∪k=0 DTIME(2
nk
): la classe dei linguaggi decidibili da una MdT deterministica in tempo
esponenziale nella dimensione dell’input.
∞
k
. NP= ∪k=0 NTIME(n ): la classe dei linguaggi decidibili da una MdT non deterministica in tempo
polinomiale nella dimensione dell’input.
∞
. NEXPTIME= ∪k=0 NTIME(2
nk
): la classe dei linguaggi decidibili da una MdT non deterministica in
tempo esponenziale nella dimensione dell’input.
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[14]
Classi di Complessità Spaziali
Analogamente possiamo definire le seguenti classi di complessità spaziale:
∞
k
. PSPACE= ∪k=0 DSPACE(n ): la classe dei linguaggi decidibili da una MdT deterministica in spazio
proporzionale ad un polinomio nella dimensione dell’input.
∞
. LOGSPACE= ∪k=0 DSPACE(log n): la classe ei linguaggi decidibili da una MdT deterministica in spazio
proporzionale al logaritmo nella dimensione dell’input.
∞
k
. NPSPACE= ∪k=0 NPSPACE(n ): la classe dei linguaggi decidibili da una MdT non deterministica in
spazio proporzionale ad un polinomio nella dimensione dell’input.
La classificazione proposta permette di individuare proprietà della complessità di problemi che non verrebbero
messi in evidenza da classificazioni più raffinate.
Ad esempio, si può dimostrare che un problema si trova in P o in EXPTIME indipendentemente dalla
funzione di costo e quindi dal modello di calcolo considerato.
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[15]
Gerarchie di Complessità Temporale
Definite le classi di complessità possiamo stabilire le relazioni che intercorrono tra di esse.
Uno dei problemi aperti dell’informatica teorica (the one million dollar problem), è definire una relazione
insiemistica tra le classi P ed NP.
Poichè una MdT deterministica può essere simulata da una MdT non deterministica, vale la relazione
P ⊆ NP
ma non sappiamo quali delle seguenti relazioni sia vera
P = NP oppure P 6= NP
Tuttavia, poichè una MdT-ND può essere simulata da una MdT deterministica in un tempo esponenziale, si
può dimostrare che vale la seguente relazione:
NP ⊆ EXPTIME
cioè ogni problema decisionale risolto da una MdT-ND può essere risolto da una MdT deterministica in tempo
esponenziale.
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[16]
Ovviamente, poichè ogni problema decisionale risolto da un algoritmo in tempo polinomiale può essere risolto
da un algoritmo di enumerazione vale anche la seguente inclusione stretta:
P ⊂ EXPTIME
Dunque sappiamo che valgono le seguenti relazioni:
P ⊆ NP ⊆ EXPTIME
e che almeno una delle due inclusioni dovrebbe essere stretta.
Infatti, poichè sappiamo che
P ⊂ EXPTIME
deve essere:
P ⊂ NP
oppure
N P ⊂ EXPTIME
(Infatti, in entrambi i casi P risulterebbe strettamente incluso in EXPTIME).
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[17]
Gerarchie di Complessità Spaziale
Riguardo lo spazio in prima battuta per analogia con le classi temporali saremmo indotti a dire che
PSPACE ⊆ NPSPACE
Tuttavia vale il seguente risultato noto come teorema di Savitch:
PSPACE = NPSPACE
L’idea che ci sta dietro è che se lo spazio occupato da una MdT-ND è polinomiale.
Infatti, la MdT deterministica che simula sequenzialmente tutte le computazioni delle MdT-ND, che sono un
numero esponenziale, alla fine di ogni computazione può riportare la testina indietro all’inizio del nastro.
In questo modo lo spazio usato durante la computazione sarà lo stesso della MdT-ND.
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[18]
Gerarchie tra Classi di Complessità Temporale e Spaziale
Inoltre si può dimostrare che valgono la seguente relazioni
NPSPACE ⊆ EXPTIME e PSPACE ⊆ EXPTIME
Infatti:
. NPSPACE ⊆ EXPTIME: una MdT-ND che riconosce un linguaggio in spazio polinomiale può essere
simulata da MdT deterministica che riconosce lo stesso linguaggio ma in tempo esponenziale.
Basta simulare sequenzialmente tutte le computazione della MdT-ND.
. PSPACE ⊆ EXPTIME: infatti, poichè NPSPACE = PSPACE, si deduce che
PSPACE ⊆ EXPTIME
.
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[19]
Gerarchie tra Classi di di Complessità Temporale e Spaziale
Inoltre si può dimostrare che valgono le seguenti relazioni:
NP ⊆ NPSPACE e NP ⊆ PSPACE
Infatti:
. La classe dei problemi risolti da una MdT-ND in tempo polinomiale occupano uno spazio polinomiale,
infatti si possono usare al più una cella per passo di computazione.
. Una MdT-ND può essere simulata da una MdT deterministica che occupa lo stesso numero di celle. Infatti
per ogni simulazione della corrispondente computazione della MdT-ND si può sempre pensare di riportare
la testina indietro.
Quindi si deduce la seguente relazione tra classi temporali e spaziali:
P ⊆ NP ⊆ PSPACE = NPSPACE ⊆ EXPTIME ⊆ NEXPTIME
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[20]
Riducibilità
In molti casi la complessità di un problema non è nota nè in modo esatto nè approssimato in quanto il divario
tra complessità inferiore e superiore è molto ampio.
Un caso tipico è quello in cui il lower bound noto è Ω(n log n) ed il miglior algoritmo per risolverlo ha
complessità O(cn) con c > 1.
In questi casi per determinare la complessità di un problema si ricorre alla tecnica di riduzione:
Una riduzione da un problema P1 ad un problema P2 (P1 ∝ P2) fornisce un metodo per risolvere P1
assumendo di essere in grado di risolvere P2.
Ovvero ogni istanza del primo problema P1 può essere risolto se si ha una riduzione di tale istanza ad
una istanza del secondo problema P2.
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[21]
Riducibilità di Karp
Possiamo definire diversi tipi di tecniche riduzioni, la più nota è quella che va sotto il nome di Karp-riducibilità:
Un problema di decisione P1 è detto essere Karp-riducibile ad un problema di decisione P2 se e solo se esiste
un algoritmo R che trasforma ogni istanza di P1 in una istanza di P2.
Sotto questi ipotesi conoscendo un algoritmo per P2 possiamo definire il seguente algoritmo per risolvere P1:
1. data una istanza x di P1 si calcoli y = R(x) istanza di P2
2. si applichi l’algoritmo di risoluzione per P2 ad y
3. il risultato al problema P1 sarà True o False a seconda del risultato ottenuto dall’algoritmo di risoluzione
per P2 sull’input y .
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[22]
Riducibilità Karp-Polinomiale
Un caso interessante di riducibilità è quando la funzione di riduzione ha complessità polinomiale, in questo
caso la riduzione si dice Karp-polinomiale.
Infatti in questo caso se P1 è Karp-riducibile-polinomialmente a P2 allora, saper risolvere in modo
efficiente, cioè in tempo polinomiale, P2 implica che anche P1 può essere risolto in modo efficiente.
In particolare:
P1 ∝ P2, P2 ∈ P ⇒ P1 ∈ P
Conseguentemente
P1 ∝ P2, P1 ∈
/ P ⇒ P2 ∈
/P
ovvero, risolvere P2 è almeno tanto difficile quanto P1.
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[23]
Problemi Hard e Completi
Definizione Problemi Hard
Per ogni classe di complessità C un problema di decisione P viene detto C-hard rispetto ad una riduzione se
e solo
∀ P 0 problema di decisione, P 0 ∈ C , P 0 ∝ P
Definizione Problemi Completi
Per ogni classe di complessità C un problema di decisione P viene detto C-completo rispetto ad riduzione
se e solo se
P è C-hard e P ∈ C
Definizione Chiusura
Una classe di complessità C viene detta chiusa rispetto ad una riduzione se e solo se per ogni coppia di
problemi P1 e P2 tali che P1 ∝ P2 ⇒ P1, P2 ∈ C
P, NP, PSPACE, EXPTIME, sono chiuse rispetto all Karp-riducibilità polinomiale
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[24]
Problema della Soddisfacibilità: SAT
Data una formula logica di ϕ(x1, . . . , xn) di n variabili booleane si dice essere in forma normale congiuntiva
se è definita nel seguente modo:
ϕ(x1, . . . , xn) = C1 ∧ . . . ∧ Ck
ovvero come congiunzione di k clausole.
Ogni clausola è la disgiunzione di m letterali ovvero:
∀i = 1 . . . k, Ci = ν1 ∨ . . . ∨ νm
ed ogni letterale è una variabile in forma diretta o negata ovvero
∀j = 1 . . . m, νj = xt oppure νj = ¬xt
Esempio:
ϕ(x1, x2, x3) = (x1 ∨ x2) ∧ (¬x1 ∨ ¬x2 ∨ x3) ∧ (¬x3)
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[25]
Teorema di Cook
Definizione Satisfability (SAT)
Data una formula in foma normale congiuntiva stabile se esiste un assegnamento delle variabili che renda
True la formula data.
SAT è un problema NP poichè è risolvibile in tempo polinomiale da un algoritmo non deterministico.
Nel 1971 Thomas Cook ha dimostrato il seguente teorema:
Teorema di Cook:
Il problema della soddisfacibilità di una fomula logica in forma nomale congiuntiva è un problema
NP-completo.
Il teorema di Cook permette di affermare che
qualunque problema della classe NP si riduce al problema decisionale della soddisfattibilità.
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[26]
Conseguenze del Teorema di Cook
Il teorema di Cook ci fornisce un metodo per dimostrare che un problema P è NP-completo.
Infatti, grazie a tale teorema, per dimostrare che un problema P è NP-completo basta far vedere che:
1. P ∈ N P , cioè esiste un algoritmo non-deterministico che lo risolve
2. SAT ∝ P , cioè SAT si riduce in tempo polinomiale al problema P in questione.
Inoltre, poichè la riducibilità è transitiva, se si dimostra che
P è NP-completo
si può dimostrare l’NP-completezza di un’altro problema P 0 facendo vedere che
P 0 ∈ NP e P ∝ P 0
Grazie al teorema di Cook, dal 1971 sono stati scoperti moltissimi problemi NP-completi.
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[27]
Riassunto
. un problema P appartiene alla classe NP se è risolvibile in tempo polinomiale da una MdT-ND, ovvero da
un algoritmo non-deterministico
. un problema P è detto NP-completo se e solo se:
1. P ∈ NP
2. ∀ P0 ∈ NP si ha che P0 ∝ P tramite una riduzione polinomiale
. se P ∝ SAT ⇒ risolvere P NON è più difficile di risolvere SAT (SAT è un upper-bound alla complessità
di P)
. se SAT ∝ P ⇒ risolvere P NON è un più facile che risolvere SAT (altrimenti avrei risolto SAT!) (SAT
è un lower-bound alla complessità di P)
. se suppongo che P sia un problema NP-completo, per dimostrare che Q è NP-completo è sufficente
dimostrare che:
1. Q ∈ NP, quindi esiste un algoritmo non-deterministico che lo risolve in tempo polinomiale
2. che P ∝ Q. Ovvero, risolvere Q non può essere più facile che risolvere P.
Infatti, poichè:
. P è NP-completo, Q ∈ NP
. P ∝Q
. la riduzione ∝ è transitiva
ne segue che ∀P 0, P 0 ∝ P ∝ Q, ovvero ∀P 0, P 0 ∝ Q, e quindi per definizione Q è NP-completo.
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[28]
Enumerazione
Una generica procedura di enumerazione, enumera tutte le possibili soluzioni di un problema, ed è,
generalmente, strutturata nel seguente modo:
procedure ENUMERA ( i )
if ( i <= n ) then
# n numero delle possibili soluzioni
< determina I [ i ] in funzione di S [ 1 ] , S [ 2 ] , . . . , S [ i −1] >
if ( | I [ i ] | != 0 ) then
for ( j=1 to | I [ i ] | ) do
S[j] = I[i][j]
if ( { S [ 1 ] . . . S [ i ] } == soluzione ) then
<arresta la computazione >
else
ENUMERA ( i+1)
end
end
end
end
end
. I[i] è l’insieme delle possibili scelte che si possono fare al passo i-esimo
. S[j] rappresenta il j-esimo elemento di I[i]
. {S[1] ...
S[i]} rappresenta la soluzione parziale al passo i-esimo
n
. se |I[i]| ≤ m, ∀1 ≤ i ≤ n, la complessità è O(m ).
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[29]
Enumerazione Cricca
Sia G = (N, A) |N | = n un grafo, e sia k la dimensione della cricca cercata.
procedure ENUMERACRICCA ( i , h ) ( ∗ i=indice nodo , h=dimensione della cricca corrente
∗)
if ( k−h <= n−i+1 ) then ( ∗ #nodi da inserire nella cricca <= #nodi da visitare
∗)
S [ i ] = False
( ∗ non inserisco il nodo i nella cricca
∗)
ENUMERACRICCA ( i +1, h ) ( ∗ richiamo la funz . senza aumentare la dim . della cricca ∗ )
S [ i ] = True
( ∗ considero il caso in cui inserisco il nodo nella cricca ∗ )
cricca = True
( ∗ verifico se la sequenza di scelte e ’ una soluzione
*)
for j =1 to i -1 do
if ( S [ j ]== True and (i , j ) notin A ) then (* j e ’ stato scelto ma non esiste l ’ arco *)
cricca = False
end
end
if ( cricca == True ) then
if ( h = k ) then
(* se la sequenza di scelte e ’ una cricca di dimensione k ∗ )
success
else
ENUMERACRICCA ( i +1, h+1)
end
end
end
end
La ricerca della cricca comincia con la chiamata ENUMERACRICCA(1,0).
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
Algoritmi e Strutture Dati
[30]
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[31]
Algoritmi Non-Deterministici
Una generica procedura non deterministica è strutturata nel seguente modo:
procedure ND
for ( i=1 to n ) do
< determina I [ i ] in funzione di S [ 1 ] . . . S [ i −1] >
if ( | I [ i ] | == 0 ) then
failure
else
S [ i ] = choice ( I [ i ] ) ( ∗ scegli un elemento dall ’ insieme I [ i ] *)
if ( S [1] ... S [ i ] ) == soluzione ) then
success
end
end
end
end
. la prima parte genera una sequenza di scelte usando il costrutto non deterministico choice
. la seconda parte verifica se la scelta parziale è una soluzione.
La parte di codice che verifica se una sequenza di scelte è una soluzione si chiama certificato.
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[32]
Algoritmo Non-Deterministico per SAT
Sia ϕ(x1, . . . , xn) una formula in forma normale congiuntiva.
procedure NDSAT
k = 1
while ( k <= n ) do
x [ k ] = choice { True , False }
k = k + 1
end
if ( F ( x [ 1 ] , . . . , x [ k ] ) == True ) then
success
else
failure
end
end
L’algoritmo sceglie in modo non deterministico l’assegnamento delle variabili x − 1, . . . , xn e poi verifica o
certifica se l’assegnamento prodotto soddisfa la formula ϕ(x1, . . . , xn).
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[33]
Algoritmo Non-Deterministico per CRICCA
Sia G = (N, A) |N | = n un grafo, e sia k la dimensione della cricca cercata.
procedure NDCRICCA
h = 0
for i = 1 to n do
S [ i ] = choice ( True , False ) ( ∗ scelgo se inserire o meno il nodo Ni ∗ )
if ( S [ i ] == True ) then
h = h+1
( ∗ incr . la dim . della cricca corrente ∗ )
for j=1 to i−1 do
if ( S [ j ] and ( i , i ) notin A ) then ( ∗ non esiste l ’ arco (i , j )
*)
failure
else
if ( h = K ) then
(* cricca corrente di dimensione = k
*)
success
end
end
end
end
end
end
L’algoritmo sceglie in modo non deterministico se un nodo appartiene alla cricca oppure no, e poi verifica o
certifica se l’insieme di nodi prodotto soddisfa la condizione di cricca.
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[34]
Hamiltonian Path ∝ SAT
Definizione Dato un grafo G, un path hamiltoniano è una cammino completo che passa per tutti i nodi del
grafo una sola volta.
Supponiamo che HP sia NP-completo, ovvero supponiamo per ipotesi che:
. HP ∈ NP
. ∀P ∈ NP, P ∝ HP
Vogliamo dimostrare che SAT è NP-completo. A tal fine è sufficiente dimostrare che:
1. SAT ∈ NP, ovvero esiste un algoritmo non deterministico che lo risolve
2. che il problema HP ∝ SAT, ovvero che ogni istanza di HP può essere ricondotta o espressa come una
istanza del problema SAT.
Il primo punto è stato già dimostrato poichè abbiamo definito un algoritmo non deterministico che risolve il
problema SAT.
Per trasformare una istanza del problema HP in una istanza del problema SAT, definiamo una variabile Xij
con il seguente significato :
Xij = True ⇔ il nodo j è l’i−esimo nodo del cammino hamiltoniano.
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[35]
L’esistenza di un cammino hamiltoniano per un grafo G = (N, E) corrisponde quindi al verificarsi di tutte
le seguenti condizioni che caratterizzano proprietà di ciclo hamiltoniano
1. ogni nodo j deve stare nel cammino hamiltoniano, ovvero deve essere vera la seguente formula per ogni
nodo j :
∀j ∈ N, X1j ∨ X2j ∨ . . . ∨ Xnj = φj
2. ogni nodo j non può essere contemporaneamente l’i−esimo ed il k−esimo nodo del ciclo hamiltoniano,
ovvero deve essere vera la seguente formula per ogni nodo j :
∀j ∈ N, i 6= k, ¬(Xij ∧ Xkj ) = ¬Xij ∨ ¬Xkj = ψj (i, k)
3. almeno un nodo deve essere l’i−esimo del cammino hamiltoniano, ovvero:
∀i = 1 . . . n, Xi1 ∨ . . . ∨ Xin = ηi
4. due nodi non adiacenti non possono essere consecutivi in ciclo hamiltoniano, ovvero:
∀(i, j) ∈
/ E, ∀k = 1 . . . n − 1, ¬(Xki ∧ X(k+1)j ) = ¬Xki ∨ ¬X(k+1)j = ρij (k)
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[36]
Una assegnamento delle variabili Xij che renda vera tutte le formule φj , ψj , ηi, ρij , implica che esiste un
cammino hamiltoniano inviduato dai letterali che hanno valore True.
Infatti:
. la verità delle condizioni 1, 2 e 3 implicano che:
∀j ∈ N ∃ i | Xij = True
cioè per ogni nodo j esiste un ed un solo indice i tale che HP [i] = nj
. la condizione 4 implica che
∀(i, j) ∈ HP, (i, j) ∈ E
cioè per ogni coppia di nodi appartenenti al cammino hamiltoniano, esista un arco appartenente ad E .
La costruzione delle formule φj , ψj , ηi, ρij può essere fatta in tempo polinomiale, infatti basta scandire i
nodi del grafo e costruire le corrispondenti formule.
In conclusione abbiamo definito un algoritmo di riduzione polinomiale che ci permette di trasformare ogni
istanza del problema HP in una istanza del problema SAT. Quindi, poichè
. SAT ∈ NP
. HP ∝ SAT in tempo polinomiale
possiamo concludere che SAT è NP-completo.
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[37]
Circuit Value e Circuit SAT
Definizione Circuit Value
Dato un circuito logico di porte and, or, not con una sola porta di uscita, ed i valori degli ingressi,
stabilire se l’output è True
Circuit Value è un problema facile, cioè appartiene alla classe di complessità P, e quindi può essere risolto
in tempo polinomiale nella dimensione delle porte logiche che descrivono il circuito.
Infatti basta applicare i valori degli input alle porte e verificare che il risultato prodotto sia True. Questo è
fattibile in un tempo polinomiale nella dimensione del circuito, cioè nel numero di porte logiche.
Definizione Circuit SAT (CSAT)
Dato un circuito logico di porte and, or, not con una sola porta di uscita stabilire se esiste un
assegnamento degli input tali che l’output sia True
Circuit SAT è un problema difficile, cioè appartiene alla classe di complessità NP ed inoltre si può dimostrare
che è NP-completo. Infatti, è possibile trasformare ogni istanza di SAT in una di CSAT, ovvero
SAT ∝ CSAT.
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[38]
Esercizio
Supponiamo che CSAT sia NP-completo e facciamo vedere che vale la riduzione
CSAT ∝ SAT
ovvero, che ogni istanza di CSAT può essere ricondotta ad una istanza del problema SAT.
Senza perdere di generalità possiamo supporre che il circuito sia composto solamente di porte or, not, infatti
per le leggi di De Morgan vale la seguente uguaglianza:
(a ∧ b) = ¬((¬a) ∨ (¬b))
Associamo una variabile di output y ad ogni nodo del circuito:
. ad ogni porta di tipo or(a, b) associamo una variabile y ⇔ a ∨ b, cioè la variabile y è vera se e solo se
l’espressione a ∨ b è vera, e viceversa.
. ad ogni porta not(a) associamo una variabile y ⇔ ¬a.
La relazione logica se e solo se (⇔) può essere scritta in funzione delle sole operazioni logiche di and, or e
not nel seguente modo:
A ⇔ B ≡ (¬A ∨ B) ∧ (¬B ∨ A),
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[39]
Riscriviamo quindi la porta or come:
y ⇔a∨b
(¬y ∨ (a ∨ b)) ∧ (¬(a ∨ b) ∨ y)
(¬y ∨ a ∨ b) ∧ ((¬a ∧ ¬b) ∨ y)
(¬y ∨ a ∨ b) ∧ (¬a ∨ y) ∧ (¬b ∨ y)
≡
≡
≡
De Morgan
Distributiva
Aanalogamente la porta not(a) può essere riscritta nel seguente modo:
y ⇔ ¬a ≡ (¬y ∨ ¬a) ∧ (a ∨ y)
La congiunzione di tutte le clausole corrispondenti a tutte le porte logiche del circuito definisce una formula
logica in forma normale congiuntiva.
Una soluzione che soddisfa tale formula soddisfa anche il circuito corrispondente.
La trasformazione può essere effettuata in tempo polinomiale, infatti basta esaminare tutte le porte del circuito
e scrivere la corrispondente clausola.
Anche in questo caso avendo effettuato la riduzione CSAT ∝ SAT l’unica cosa che possiamo dire è che
risolvere CSAT è difficile almeno quanto risolvere SAT.
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[40]
Esempio Vediamo come ridurre una istanza di CSAT a SAT. Sia dato il seguente circuito:
z = ¬x
⇔
(¬z ∨ ¬x) ∧ (x ∨ z)
w =z∨y
⇔
(¬w ∨ z ∨ y) ∧ (¬(z ∨ y) ∨ w) =
(¬w ∨ z ∨ y) ∧ ((¬z ∧ ¬y) ∨ w) =
(¬w ∨ z ∨ y) ∧ (¬z ∨ w) ∧ (¬y ∨ w)
ϕ(x, y, w, z) = (¬z ∨ ¬x) ∧ (x ∨ z) ∧ (¬w ∨ z ∨ y) ∧ (¬z ∨ w) ∧ (¬y ∨ w)
Tale formula è soddisfatta dall’assegnamento:
x=F y=F z=T w=T
da cui si deduce che l’assegnamento x = F y = F è una soluzione per CSAT.
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[41]
CRICCA è NP-completo
Definizione Dato un grafo G = (N, E) ed un intero k stabilire se esiste un sottografo completo di k nodi.
Per dimostrare che un problema P è NP-completo bisogna:
1. dimostrare che il problema P appartiene alla classe NP, quindi far vedere che esiste un algoritmo non
deterministico che lo risolve.
2. dimostrare che ogni problema NP si riduce al problema P.
Poichè la proprietà di riduzione è transitiva, basta far vedere che un qualsiasi problema NP-completo si
riduce a P tramite un algoritmo polinomiale.
Il problema CRICCA è un problema NP poichè può essere risolto tramite un algoritmo non deterministico
(vedi slide precedenti).
Per dimostrare l’NP-completezza del problema della CRICCA, applichiamo il teorema di Cook, quindi
dimostriamo che:
SAT ∝ CRICCA
ovvero che ogni istanza del problema SAT si riduce ad una istanza del problema CRICCA.
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[42]
Supponiamo che ϕ(x1, . . . , xn) sia una generica istanza di SAT composta da k clausole:
ϕ(x1, . . . , xn) = C1 ∧ . . . ∧ Ck
A partire dalla formula ϕ, costruiamo un Grafo G nel seguente modo:
1. un nodo per ogni letterale che appare in ϕ, e lo etichettiamo come (z, j), con il significato che il letterale
z appare nella clausola Cj
2. un archo per ogni coppia di nodi di letterali appartenenti a clausole diverse che possono avere
contemporaneamente valore True.
Ovvero, gli archi uniranno coppie di nodi tali che:
(z, j), (w, h) con z 6= ¬w e j 6= h
Costruito il grafo G:
se esiste un sottografo G0 di k nodi l’assegnamento al valore True di tutti i nodi ad esso
appartenente, ovvero a tutti i letterali corrispondenti, renderà vera la formula ϕ.
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[43]
Il grafo G = (N, E) può essere costruito in tempo polinomiale nel numero delle variabili di ϕ.
Infatti, se n è il numero delle variabili e k il numero delle clausole la formula ϕ contiene al massimo kn
letterali per cui:
. il numero dei nodi del grafo è |N | = kn ∈ O(n),
2
2
. il di archi è |E| ≤ (kn) ∈ O(n )
Di conseguenza, la costruzione del grafo può essere fatta in tempo polinomiale nel numero delle variabili della
formula ϕ.
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[44]
Esempio
Esempio Data la formula
ϕ(a, b, c) = (a ∨ b) ∧ (¬a ∨ ¬b ∨ c) ∧ (¬c)
costruisco il seguente grafo:
Esistono due cricche di dimensione k = 3 ( cioè uguale al numero delle clausole di ϕ) corrispondenti a due
soluzioni che soddisfano la formula ϕ:
1. ((b.1), (¬a, 2), (¬c, 3)) ⇒ (b = T, ¬a = T, ¬c = T )
2. ((a, 1), (¬b, 2), (¬c, 3)) ⇒ (a = T, ¬b = T, ¬c = T )
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[45]
3-SAT è NP-completo
Definizione 3-SAT
Data una formula logica in forma normale congiuntiva in cui ogni clausola contiene esattamente 3 letterali,
stabilire se esiste un assegnamento delle variabile che renda vera la formula.
Poichè ogni istanza di 3-SAT è anche una istanza di SAT l’appartenenza alla classe NP è ovvia. Quindi esiste
un algoritmo non deterministico che lo risolve (una variante di quello che risolve SAT).
Per dimostrare che 3-SAT è un problema NP-completo, applichiamo il teorema di Cook e dimostriamo che
vale la seguente riduzione:
SAT ∝ 3-SAT
Sia ϕ(x1, . . . , xn) una generica istanza di SAT di k clausole
ϕ(x1, . . . , xn) = C1 ∧ . . . ∧ Ck
e supponiamo senza perdere di generalità che ogni clausola sia formata da m letterali, con m variabile da
clausola a clausola
Quindi per ogni clausola esiste m tale che:
Ci = l1 ∨ . . . ∨ lm
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[46]
Trasformiamo ogni clausola della formula ϕ in una congiunzione di clausole di tre soli letterali nel seguente
modo:
1.
2.
3.
4.
se
se
se
se
m
m
m
m
=
=
=
>
1
2
3
3
trasformo Ci nella clausola Ci = l1 ∨ l1 ∨ l1
trasformo Ci nella clausola Ci = l1 ∨ l2 ∨ l2
non faccio nulla
introduco una nuova variabile X e riscrivo la clausola nel seguente modo
Ci = (l1 ∨ l2 ∨ X) ∧ (¬X ∨ l3 . . . ∨ lm)
e riapplico le regole di riscrittura alla sottoclausola (¬X ∨ l3 . . . ∨ lm) finchè non ottendo clausole di soli
tre letterali.
Per dimostrare la correttezza della trasformazione (poichè risulta ovvia per i primi 3 punti) bisogna dimostrare
che la trasformazione del punto 4 è corretta.
Bisogna quindi dimostrare che:
1. l’introduzione della variabile X non altera le soluzione del problema SAT. Ovvero, data una soluzione che
soddisfa il problema SAT, la medesima soluzione soddisfa pure la versione 3-SAT dello stesso problema.
2. data una soluzione per la versione 3-SAT del problema, possiamo da essa ricavare una soluzione per la
versione SAT.
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[47]
Dimostriamo innanzitutto che data una soluzione per il problema SAT essa costituisce anche una soluzione
per la versione 3-SAT.
Supponiamo che σ sia una soluzione per il problema SAT.
Consideriamo una generica clausola Ci, con un numero > 3 letterali, e la clausola Ci0 da essa ottenuta
introducendo la variabile X :
Ci = (l1 ∨ l2 ∨ l3 . . . ∨ lm)
Ci0 = (l1 ∨ l2 ∨ X) ∧ (¬X ∨ l3 . . . ∨ lm)
Se la clausola Ci è soddisfatta perchè l1 =True o l2 =True, allora la clausola Ci0 sarà soddisfatta
dall’assegnamento:
σ 0 = σ[X = False]
Infatti, in questo caso, la sottoclausola che contiene (¬X ∨ l3 . . . ∨ lm) sarà soddisfatta.
Se viceversa la clausola Ci è soddisfatta poichè un letterale diverso da l1 e l2 è True, allora la clausola Ci0
sarà soddisfatta dall’assegnamento
σ 0 = σ[X = True]
Infatti in questo caso la sottoclausola (l1 ∨ l2 ∨ X) sarà soddisfatta.
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[48]
Supponiamo viceversa che η sia una soluzione per la versione 3-SAT, e sia Ci0 una clausola ottenuta dalla
trasformazione della clausola Ci, che contiene un numero di letterali > 3.
Ci0 = (l1 ∨ l2 ∨ X) ∧ (¬X ∨ l3 . . . ∨ lm)
Allora, poichè entrambe le sottoclausole devono essere vere, almeno un letterale lj della clausola Ci0 deve
essere necessariamente True ( quello in cui il letterale della variabile X è false ).
Quindi l’assegnamento
η 0 = η − {X}
è un assegnamento che soddisfa la clausola Ci e quindi il problema SAT.
Abbiamo quindi ridotto una istanza di SAT in una istanza di 3-SAT, ed una soluzione che soddisfa l’istanza
di 3-SAT soddisfa anche l’istanza di SAT.
La trasformazione avviene il tempo polinomiale, infatti le clausole sono k e per ogni clausola il numero di
trasformazioni da applicare è O(m), quindi la complessità totale è O(km).
Quindi, abbiamo dimostrato che
3-SAT è un problema NP-completo
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[49]
NAESAT: Not All Equal SAT
Definizione NAESAT
Stabilire se esiste un assegnamento che renda True una istanza di 3-SAT tale che in ogni clausola ci
sia almeno un letterale che abbia valore diverso dagli altri due.
In altre parole non accettiamo gli assegnamenti per cui tutti i letterali di ogni clausola abbiamo banalmente
valore True da cui il nome Not All Equal SAT.
NAESAT appartiene alla classe NP poichè la verifica di una soluzione può essere effettuata in tempo
polinomiale ed è risolvibile tramite un algoritmo non deterministico in tempo polinomiale.
Supponendo che CSAT sia NP-completo, per dimostare che NAESAT è NP-completo effettuiamo la riduzione
CSAT ∝ NAESAT.
Senza perdere di generalità supponiamo che l’istanze di CSAT contengano solamente porte or, e not.
Trasformiamo ogni istanza di CSAT in una equivalente di NAESAT riscrivendo le funzioni logiche calcolate
dalla porte del circuito del problema di CSAT come clausole di tre letterali.
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[50]
Alle porte di tipo or possiamo associare la variabile z ⇔ or(x, y), che possiamo riscrivere come:
(¬z
(¬z
(¬z
(¬z
∨ x ∨ y) ∧ (¬(x ∨ y) ∨ z)
∨ x ∨ y) ∧ ((¬x ∧ ¬y) ∨ z)
∨ x ∨ y) ∧ (¬x ∨ z) ∧ (¬y ∨ z)
∨ x ∨ y) ∧ (¬x ∨ z ∨ w) ∧ (¬y ∨ z ∨ w)
=
=
=
ove w è una variabile aggiuntiva per far diventare le clause di tre letterali come richiesto dal problema
NAESAT.
Alle porte di tipo not associamo la variabile z ⇔ not(x):
(¬z ∨ ¬x) ∧ (x ∨ z)
(¬z ∨ ¬x ∨ w) ∧ (x ∨ z ∨ w)
=
Anche qui la variabile w è stata aggiunta per far divenire le clausole di 3 letterali.
Per dimostrare la correttezza della trasformazione bisogna dimostrare che l’introduzione della variabile w non
altera le soluzioni del problema nel senso che:
1. una soluzione per il problema CSAT costituisce anche una soluzione per il problema NAESAT.
2. una soluzione per il problema NAESAT permette di dedurre una soluzione per il problema CSAT
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[51]
Dimostriamo innanzitutto che data una soluzione per il problema CSAT essa costituisce anche una soluzione
per la versione NAESAT dello stesso problema.
Sia σ è una soluzione del problema CSAT, allora l’assegnamento σ 0 = σ[w = false] è una soluzione per la
versione NAESAT dello stesso problema.
Infatti, per quanto riguarda la porta or
(¬z ∨ x ∨ y) ∧ (¬x ∨ z ∨ w) ∧ (¬y ∨ z ∨ w)
. nella prima sotto-clausola (¬z ∨ x ∨ y) tutti e tre i letterali non possono avere valore True poichè la
seconda e la terza non sarebbero soddisfatte. Quindi almeno un letterale ha valore False come richiesto
dal problema NAESAT.
. avendo posto w =False anche la seconda e la terza hanno almeno un letterare diverso da True come
richiesto dal problema NAESAT.
Per quanto riguarda la porta not
(¬z ∨ ¬x ∨ w) ∧ (x ∨ z ∨ w)
avendo posto w =False, almeno un letterale ha valore False.
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[52]
Viceversa, se η è una soluzione per NAESAT allora anche la soluzione η 0 = ¬η è una soluzione per lo stesso
problema.
Infatti poichè NAESAT richiede che i letterali di una clausola non siano tutti True, negando una soluzione di
NAESAT, tutti i letterali che in ogni clausola
Ci = l1 ∨ . . . ∨ lm
avevano valore False avranno valore True, e quindi la clausola è ancora soddisfatta.
La soluzione, η o ¬η , di NAESAT in cui w =False, costituisce quindi una soluzione per CSAT. Infatti, in
questo caso la verità delle clausole non dipende da w.
Abbiamo quindi dimostrato che
CSAT ∝ NAESAT
e essendo CSAT NP-completo per ipotesi si deduce che NAESAT è NP-completo.
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[53]
Graph k-Coloring
Definizione Dato un grafo G=(N,E) stabilire se è possibile colorare i nodi del grafo con k colori in modo tale
che ogni coppia di nodi adiacenti abbia un colore diverso.
Facciamo vedere tramite un esempio come possiamo ridurre una istanza NAESAT ad una istanza del problema
3-coloring.
Sia ϕ una istanza di NAESAT cosı̀ definita:
ϕ = (X1 ∨ ¬X2 ∨ X3) ∧ (¬X1 ∨ X2 ∨ ¬X3)
Costruiamo il seguente grafo:
1. per ogni variabile Xi della formula ϕ si costruisca un sottografo triangolare completo i cui nodi sono
Xi, ¬Xi, V , ove V è un nodo comune. Tali sottografi prendono il nome di triangoli delle variabili
2. per ogni clausola di indice k costruisco un sottografo triangolare completo composto dai nodi (k, Xki )
ove Xki sono i letterali della clausola di indice k. Tali sottografi prendono il nome di triangoli delle
clausole
3. aggiungo degli archi tra un nodo di un triangolo variabile e un nodo di un triangolo clausola che
rappresentano lo stesso letterale.
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[54]
Se il grafo cosı̀ ottenuto è colorabile con tre colori, allora è possibile colorare i nodi in modo tale che
l’assegnamento delle varibili:
. Xi = True se il corrispondente nodo variabile è stato colorato con il colore di indice 1
. Xi = False se il corrispondente nodo variabile è stato colorato con il colore di indice 0
soddisfa la formua ϕ ed è una soluzione per il problema NAESAT.
Esempio
Facciamo vedere, come esempio, che ad una soluzione di NAESAT che soddisfa la formula ϕ, ad essa
corrisponde una colorazione valida per il grafo costruito.
Sia
X1 = True, X2 = True, X3 = False
una soluzione per ϕ, allora la seguente colorazione:
1. assegno il colore 0 ai nodi variabile che hanno valore False ed 1 ai nodi clausola adiacenti
2. assegno il colore 1 ai nodi variabile che hanno valore True e 0 ai nodi clausola adiacenti, finchè possibile
3. assegno il colore 2 al nodo V ed ai rimanenti nodi clausola
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[55]
è una colorazione valida del grafo costruito a partire da ϕ.
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[56]
Sia:
ϕ(X1, X2, X3) = (X1 ∨ ¬X2 ∨ X3) ∧ (¬X1 ∨ X2, ∨¬X3)
Una soluzione è costituita dal seguente assegnamento:
X1 = 1 X2 = 1 X3 = 0
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[57]
Graph K-coloring
Il problema della colorazione di un grafo trova applicazione nella risoluzione dell problema dell’allocazione dei
registri virtuali in un compilatore.
.
.
.
1000.
.
.
.
1010.
1001.
.
.
.
1020.
.
.
.
R100 = R0+1
R300 = R1+1
R400 = R300+1
R500 = R100+1
.
.
.
1000.
.
.
.
1010.
1001.
.
.
.
1020.
.
.
.
R10 = R0+1
R10 = R1+1
R11 = R10+1
R12 = R10+1
I registri virtuali R100 ed R300 interferiscono quindi non possono essere mappati sullo stesso registro fisico.
Cioè il mapping sui registri fisici che appare a destra della tabella sarebbe sbagliato.
Costruisco un grafo di interferenza e cerco di colorare il grafo con un numero di colori pari al numero di
registri fisici disponibili.
Un classico algoritmo di allocazione dei registri e’ quello che va sotto il nome di Graph Coloring.
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[58]
Algoritmo Graph Coloring
Graph Coloring: supponiamo di avere un numero k di colori ed una cartina geografica (politica). Si vuole
colorare ogni stato della cartina con un colore differente in modo che ogni stato abbia un colore diverso dallo
stato confinante.
In termini matematici il problema puo’ essere formulato nel seguente modo:
Dato un grafo G=(N,E) e k colori si vuole colorare ogni nodo del grafo in modo tale che ogni nodo
abbia un colore diverso dal nodo adiacente.
Sia n un nodo del grafo tale che degree(n)< k, allora il grafo G=(N,E) e’ colorabile con k colori se è
colorabile il grafo G=(N-n, E).
Da questa semplice proprietà possiamo derivare un semplice algoritmo di colorazione:
1.
2.
3.
4.
5.
6.
Selezionare un nodo n tale che degree(n)< k
Rimuovere il nodo selezionato ed i suoi archi dal grafo, ed inserirlo in uno stack S
Ripetere i passi precedenti finchè o il grafo è vuoto o ogni nodo ha un grado maggiore od uguale a k.
Se il grafo risultante non è vuoto la procedura fallisce (non implica che il grafo non sia k-colorabile).
Se il grafo è vuoto allora si comincia ad estrarre un nodo alla volta dallo stack S .
Ad ogni nodo si associa il colore che non conflitta con i nodi adiacenti e si reinserisce il nodo nel grafo.
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[59]
Esempio: Dato il seguente grafo
si vuole colorare ogni nodo del grafo usando un numero di colori k = 4.
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
Algoritmi e Strutture Dati
[60]
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[61]
Classe co-N P
Dato un problema decisionale Q definiamo il problema Qc, cioè il problema decisionale complementare, come
quel problema che ha risposta affermativa laddove Q aveva risposta negativa, e viceversa.
Se Q ∈ P allora Qc ∈ P, infatti basta usare lo stesso algoritmo di risoluzione e scambiare le istruzioni di
success con quelle di failure.
Se Q ∈ NP allora non possiamo affermare nulla su problema Qc.
Infatti, gli algoritmi non deterministici danno risposta affermativa alla prima computazione che termina con
l’istruzione di success.
Ma per dare risposta negativa devono terminare tutte le possibili computazioni con l’istruzione di failure.
Inoltre, se scambiassimo le istruzioni di success con quelle di failure otterremmo un algoritmo non
deterministico che non risolve Qc, poichè si fermerebbe alla prima esecuzione dell’istruzione di success.
Per molti problemi appartenenti alla classe NP non si conosce nulla del corrispondente problema
complementare.
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[62]
Esercizio: CRICCA ∝ Independent Set
Definizione Independet Set Graph
Dato un grafo non orientato G = (N, E) ed un insieme I ⊆ N si dice che I è un insieme indipendente
(IS) per G se per ogni i, j ∈ I l’arco (i, j) ∈
/ E.
Dato un grafo G = (N, A) per il problema CRICCA, si definisca il grafo complemento Gc = (N, A)c di
G avente gli stessi nodi ma gli archi sono scambiati con i non archi. Cioè
c
∀ i, j (i, j) ∈ A ⇔ (i, j) ∈
/A
È immediato verificare che un sottoinsime S di nodi è una soluzione di CRICCA di G se e solo se è anche una
soluzione del problema Independent Set per Gc.
La riduzione può essere effettuata in tempo polinomiale.
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[63]
Esempio Ad ogni soluzioni di IS corrisponde una soluzione di CRICCA.
. se supponiamo k = 3, abbiamo le seguenti soluzioni per IS e CRICCA
(A, B, C), (D, E, F ), (B, C, D)
. se supponiamo k = 4, abbiamo le seguenti soluzioni di IS e CRICCA
(B, D, C, F ), (D, C, F, E)
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[64]
Esercizio: Hamiltonian Path ∝ TSP
Dato un grafo G = (N, A) si definisca un insieme di dati per il problema TSP come segue:
. si introducano n = |N | città
. si ponga k = n
. si definisca la matrice D = [dij ] delle distanze tra le città
∀i, j = 1 . . . n
dij = 1
dij = 2
se
se
[i, j] ∈ A
[i, j] ∈
/A
È immediato verificare che esiste un circuito Hamiltoniano in G se e solo se esiste una soluzione al commesso
viaggiatore con distanza c omplessiva k.
La riduzione può essere fatta in tempo polinomiale.
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[65]
Esempio
Ad ogni soluzione TSP corrisponde una soluzione equivalente HP.
Ad esempio una soluzione TSP è il cammino:
(A, F, E, B, C, D, A)
a cui corrisponde una soluzione per HP.
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[66]
Esercizio: PARTIZIONE ∝ SCHEDULING MULTIPROCESSORE
Definizione PARTIZIONE
Dato un insieme A = {a1, . . . , an} di interi positivi esiste un sottoinsieme S ⊂ {1, . . . , n} tale
che
Σi∈S ai = Σi∈S
/ ai
Definizione SCHEDULING MULTIPROCESSORE
Dati un insieme P = {p1, . . . , pn} di programmi tali che pi richieda un tempo (intero) di esecuzione
ti, m processori identici ed un intero d è possibile eseguire tutti i programmi sugli m processori in d
unità di tempo ?
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[67]
Data una generica istanza per il problema PARTIZIONE rappresentata dall’insieme
A = {a1, . . . , an}
si definisca P = {p1, . . . , pn} insieme di programmi tali che pi richieda tempo ti = ai, ∀i = 1, . . . , n.
Si considerino m = 2 processori e si ponga
d=
1 n
Σi=1ai
2
Allora, se è possibile eseguire tutti i programmi sui due processori in d unità di tempo esiste una soluzione
per il problema PARTIZIONE costituita dagli indici dei programmi che sono eseguiti rispettivamente dal
processore 1 al processore 2.
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[68]
Esercizio: PARTIZIONE ∝ SOMMA DI SOTTOINSIEME
Definizione PARTIZIONE
Dato un insieme A = {a1, . . . , an} di interi positivi esiste un sottoinsieme S ⊂ {1, . . . , n} tale
che
Σi∈S ai = Σi∈S
/ ai
Definizione SOMMA DI SOTTOINSIEME
Dati un insieme A = {a1, . . . , an} di interi positivi ed un intero k esiste un sottoinsieme S ⊂
{1, . . . , n} tale che Σi∈S ai = k
Il problema PARTIZIONE si riduce al problema SOMMA di SOTTOINSIEME.
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[69]
Infatti sia data una istanza del problema partizione PARTIZIONE, ovvero un insieme
A = {a1, . . . , an}
di valori interi positivi.
Per costruire una istanza corrispondente per il problema SOMMA DI SOTTOINSIEME si ponga
k=
1 n
Σi=1ai
2
Allora per costruzione una soluzione per il problema SOMMA DI SOTTOINSIEME con A = {a1, . . . , an}
e k costituisce anche una soluzione per il problema PARTIZIONE.
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[70]
PARTIZIONE ∝ ZAINO
Definizione PARTIZIONE
Dato un insieme A = {a1, . . . , an} di interi positivi esiste un sottoinsieme S ⊂ {1, . . . , n} tale
che
Σi∈S ai = Σi∈S
/ ai
Definizione ZAINO
Dati un insieme O = {o1, . . . , on} di oggetti tali che oi è caratterizzato da un profitto pi e da un
volume vi, e due interi positivi c (capacità dello zaino) e k (obiettivo) esiste un sottoinsieme S ⊆ O
tale che
Σi∈S vi ≤ c e Σi∈S pi ≥ k
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[71]
Data una generica istanza per il problema PARTIZIONE rappresentata dall’insieme
A = {a1, . . . , an}
si consideri la seguente istanza per il problema dello ZAINO di n oggetti in cui, i profitti ed i volumi sono
definiti nel seguente modo:
pi = vi = ai ∀i = 1 . . . n
e la capacità e l’obiettivo nel seguente modo:
k=c=
1 n
Σ ai
2 i=1
Se determiniamo un insieme S ⊂ {1, . . . , n} tale che
Σi∈S vi ≤ c e Σi∈S pi ≥ k
abbiamo anche trovata una soluzione per il problema partizione costituita da tutti gli indici di S .
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[72]
Independet Set Graph
Definizione Independet Set Graph
Dato un grafo non orientato G=(N,E) ed un insieme I ⊆ N si dice che I è un insieme indipendente (IS) per
G se per ogni i, j ∈ I l’arco (i, j) ∈
/ E.
Il problema di stabilire se dato un grafo esiste un insieme indipendente di k nodi è un problema NP poichè è
risolvibile tramite un algoritmo non deterministico.
Per dimostrare l’NP-completezza facciamo vedere tramite un esempio che 3-SAT ∝ IS.
Sia quindi, per esempio, ϕ una istanza di 3-SAT definita nel seguente modo:
ϕ = (X1 ∨ ¬X2 ∨ X3) ∧ (¬X1 ∨ X2 ∨ ¬X3)
1. per ogni clausola costruisco un sottografo completo associando un nodo ad ogni letterale
2. aggiungo archi tra i nodi che rappresentano letterali complementari
Se il grafo cosı̀ costruito ammette un IS di cardinalità 2, in generale un independent set di cardinalità uguale
al numero delle clausole, allora ϕ è soddisfattibile con un assegnamento che da valore True ai letterali
corrispondenti ai nodi del set indipendente individuato.
Algoritmi e Strutture Dati
Schifano S. Fabio
Laurea di Informatica - Università di Ferrara 2011-2012
[73]
Soluzioni:
1. soluzione IS={X1, X2}, soluzione 3-SAT=X1 = 1, X2 = 1, X3 = 0
2. soluzione IS={¬X1, ¬X2}, soluzione 3-SAT=X1 = 0, X2 = 0, X3 = 1
Algoritmi e Strutture Dati
Schifano S. Fabio