DOUBLE-SAT = { θ | θ è una formula Booleana con due assegnamenti di soddisfacibilità}.
Si mostri che DOUBLE-SAT è NP-Complete. (Hint: Si usi una riduzione da SAT.)
Il problema SET-PARTITION prende in input un insieme S di numeri e decide se l’insieme può essere partizionato in due insiemi A e il suo complemento
Si mostri che SET-PARTITION è NP-Complete.
Per l’appartenenza a NP mostriamo che esiste una macchina di Turing nondeterministica che in tempo polinomiale decide il problema:
Basta fare un “guess” su due partizioni e verificare che hanno la stessa somma
Per l’hardness usiamo una riduzione polinomiale dal problema SUBSET-SUM, in modo tale che il problema SET-PARTITION ammette soluzione se e solo se SUBSET-SUM ammette soluzione
Si ricordi che SUBSET-SUM è definito nel modo seguente:
Dato un insieme S di interi e un numero target t, occorre verificare che esiste un sottoinsieme di numeri di S la cui somma è uguale a t
Sia s la somma degli elementi di S.
Consideriamo due casi distinti.
Se s = 2t, usiamo come input per il SET-PARTITION l’insieme S stesso. Ovviamente, S appartiene a SET-PARTITION se e solo se (S, t) è in SUBSET-SUM.
Se s è diverso da 2t, usiamo come input per SET-PARTITION l’insieme S’ = S U {2s, s+2t}. Si noti che la somma di tutti gli oggetti in S’ è 4s + 2t.
Si supponga adesso che (S, t) sia in SUBSET-SUM. Allora, esiste un sottoinsieme A di S’ la cui somma è t. Sia A’ = A U {2s}. Con semplici calcoli si vede che la somma degli elementi in A’ e il suo complemento rispetto S’ coincide. Dunque, S’ è in SET-PARTITION.
Si supponga adesso che S’ sia partizionato in due insiemi: A’ e il suo complemento. Per ognuno di questi insiemi, la somma dei suoi elementi è 2s+t. Si noti adesso che gli elementi 2s e s+2t non possono stare nello stesso insieme perchè la loro somma è maggiore di 2s+t.
Senza perdita di generalità, si assuma che 2s è in A’.
Sia adesso A uguale ad A’ \ {2s}. Allora la somma di tutti gli elementi di A è 2s+t-2s=t e tutti gli elementi di A sono elementi di S. Dunque, (S,t) è in SUBSET-SUM
Sia SUBSET-SUM-k = { | S è un insieme di interi positivi che contiene un sottoinsieme B di taglia k tale che è in SUBSET-SUM}
Si provi che SUBSET-SUM-k è NP-Complete usando per l’harndess una riduzione da SUBSET-SUM.
SUBSET-SUM-k is in NP since we can verify that a subset of size k adds up to the target t. Now, we will show that SUBSET-SUM-k is also NP-Complete.
Consider an instance of SUBSET-SUM with the set S = {x1, x2, … xn} and a target T. Let X = x1 + x2 + … +xn. Here is an instance of SUBSET-SUM-k that is accepted if and only if the original instance of SUBSET SUM is:
S” = {X, X, … X, X – x1, X – x2, … X – xn}, T_ = nX – T, k = n
In particular, our set S” has 2n elements in it: n X_s and then one element corresponding to each element in the original set S. First of all, IF there is a subset in S that adds up to T, we can find a subset of S” of size n that adds up to T”. (To do this, simply pick each term of the form X – xi, that corresponds to the elements in the subset of S that add up to T. Then pick the remainder of the elements to be S”s.
Based on this construction, the sum will be:
X + X + … + (X – xi), for each xi in the original subset adding up to T.
= nX – (xi, for each xi in the original subset adding up to T.)
= nX – T
= T”, as desired.
Now, we must show the other direction. If there is a subset in S_ of size n that adds up to T”, then there will be a subset in S that adds up to T. Consider any subset of T” of size n that adds up to nX – T. Naturally, some of these values, say m of them, will be X, while the other n – m will be of the form X – xi. Adding these up we get that
mX + (n – m)X – (the sum of n – m xis) = nX – T.
Simplifying, we find that
(the sum of n – m xis) = T, but this implies that there is a subset of S such the sum of its elements equals T, as desired.
Thus, we have shown how to reduce SUBSET-SUM to SUBSET-SUM-k and can conclude that SUBSET-SUM-k is NP-Complete.
Un triangolo in un grafo indiretto è una 3-clique. Si mostri che il problema di verificare che un grafo abbia un triangolo è in P. Formalmente, il problema è così definito:
TRIANGLE = { | G contiene una 3-clique}
Per mostrare che TRIANGLE è in P è sufficiente mostrare un algoritmo che risolve il problema in tempo polinomiale nella taglia dell’input.
Dato un grafo di n vertici, iteriamo sulle n3 combinazioni di 3 vertici in G.
Per ogni combinazione, controlliamo se tutti gli archi sono presenti.
Se e solo se esiste una combinazione per cui il controllo sugli archi risponde affermativamente, allora rispondiamo “SI” al problema.
Questo algoritmo risolve correttamente il problema TRIANGLE con un algoritmo di forza bruta che prende tempo O(n3). Si noti che verificare l’esistenza dei 3 archi richiede tempo O(1) time.
Quindi, TRIANGLE è in P.
Esercizio per gli studenti: PENT = { | G contiene una 5-clique} è in P?
Sia HALF-CLIQUE = { | G è un grafo inderetto di n nodi e (G, n/2) è una CLIQUE}. Si mostri che HALF-CLIQUE è NP-completo.
Per l’appartenenza in NP, usiamo l’algoritmo di verifica per k-Clique, già usato in precedenza, per k qualsiasi.
Per la NP-hardness, usiamo una riduzione da k-CLIQUE a HALF-CLIQUE in tempo polinomiale.
Dividiamo la riduzione in due parti:
Se k ≥ n/2, allora si procede come segue:
Se k < n/2, allora si procede come segue:
4. Macchine di Turing multinastro
5. Macchine di Turing non-deterministiche
6. Macchina di Turing universale e problema della fermata
7. Problemi decidibili e non decidibili
8. Problemi non decidibili e riducibilità - prima parte
9. Problemi non decidibili e riducibilità - seconda parte
11. Decidibilità delle teorie logiche
12. Misurazione della Complessità e introduzione alla classe P
14. NP-Completezza - prima parte
15. NP-Completezza - seconda parte
16. Altri problemi NP-Completi
17. Esercitazione su problemi NP-Completi
18. Space Complexity
19. Savitch Theorem