1. Problema dello zaino
(Knapsack problem)
Dimostrazione di appartenenza alla classe
NP-C
Fabrizio Finucci
2. Knapsack
Definizione (problema generico)
Data una collezione di oggetti S = {x1,…,xn}, dove
ogni oggetto xi è caratterizzato da due valori:
vi , valore dell’oggetto
wi , peso dell’oggetto
entrambi interi positivi, e dato uno zaino dotato di
una certa capacità di peso W, restituire un
sottoinsieme S di oggetti xj tali che
j S wj W
j S vj sia massima
2
3. Tipi di Knapsack
Il problema precedente può essere suddiviso in
tre sottocasi, basati sul numero di volte che un
oggetto può essere inserito nello zaino:
1. problema dello zaino 0-1 (0-1 Knapsack problem),
in cui ogni oggetto può esserci o meno senza
ripetizioni
2. problema dello zaino limitato (Bounded Knapsack
problem), in cui ogni oggetto non può essere
inserito più di un numero fissato di volte
3. problema dello zaino illimitato (Unbounded
Knapsack problem), in cui ogni oggetto può
essere inserito un numero arbitrario di volte
3
4. 0-1 Knapsack
D’ora in poi si farà riferimento al caso 0-1
Knapsack
Esempio:
# valore peso
1 1 1
S : {3,4} ha valore 40
2 6 2
W = 11
3 18 5
4 22 6
5 28 7
4
5. Knapsack (versione decisionale)
Al fine di dimostrare l’appartenenza di Knapsack
alla classe dei problemi NP-Completi, se ne
formulerà ora la versione decisionale
Questo è un passaggio necessario al fine di
utilizzare la tecnica della Riduzione Polinomiale
5
6. Knapsack (versione decisionale)
Definizione (problema decisionale)
Sia data una collezione di oggetti S = {x1,…,xn},
dove ogni oggetto xi è caratterizzato da due valori:
vi , valore dell’oggetto
wi , peso dell’oggetto
entrambi interi positivi.
Dato uno zaino dotato di una certa capacità di peso
W e un valore intero V, decidere se esiste un
sottoinsieme S di oggetti xj tali che
j S wj W
j S vj V
6
7. Knapsack è NP-Completo
Teorema
Knapsack è NP-Completo
Dimostrazione
Si dividerà la dimostrazione in due passi:
1. dimostrazione che Knapsack NP
2. dimostrazione che Knapsack è riducibile
polinomialmente da un altro problema NP-
Completo, in questo caso dal problema della
somma del sottoinsieme (Subset Sum problem)
7
8. Subset Sum
Definizione
Dato un insieme di numeri naturali I = {x1,…,xn}, e
dato un intero X, decidere se esiste un
sottoinsieme I I di numeri naturali, tali che
sommati siano uguali a X
Si ricorda che Subset Sum (come Knapsack) è
un problema numerico. Gli input di tali problemi
vengono codificati in binario. Pertanto la riduzione
dovrà essere polinomiale rispetto alla codifica
binaria di tali input
8
9. Subset Sum è NP-Completo
Teorema
Subset Sum è NP-Completo
Dimostrazione
Si dividerà la dimostrazione in due passi:
1. dimostrazione che Subset Sum NP
2. dimostrazione che Subset Sum è riducibile
polinomialmente da un altro problema NP-
Completo, in questo caso dal problema della 3-
soddisfacibilità (3-SAT)
9
10. 3-SAT
Definizioni
• Letterale: variabile booleana, asserita o negata
• Clausola: disgiunzione di letterali
• Forma normale congiuntiva (CNF): formula F, tale che
sia una congiunzione di clausole
• |F| = numero di clausole di F
Definizione (SAT)
Data una formula F in CNF, esiste un’assegnazione di
verità delle variabili soddisfacibile?
Definizione (3-SAT)
Data una formula F in CNF, con ogni clausola
contenente esattamente 3 letterali, esiste
un’assegnazione di verità delle variabili soddisfacibile?
10
11. Dimostrazione: Subset Sum
NP
Lemma
Subset Sum NP
Dimostrazione
Un sottoinsieme I I è un certificato di
lunghezza polinomiale per una data istanza di
Subset Sum, essendo la sua cardinalità al più
pari alla cardinalità di I
Dato un certificato è possibile verificare se
i I xi = X
Applicando la definizione di problema NP, si
dimostra che Subset Sum appartiene a tale
11 classe di complessità
12. Dimostrazione: 3-SAT p Subset
Sum
Lemma
3-SAT p Subset Sum
Dimostrazione
Data un’istanza F di 3-SAT, si costruirà un’istanza
di Subset Sum tale che ammetta una soluzione sse
F è soddisfacibile
Costruzione
Data un’istanza di 3-SAT con n variabili e k
clausole, si crei un insieme di 2n + 2k numeri
ciascuno di n + k cifre, nella maniera che si andrà
ora ad illustrare
12
13. Costruzione dell’istanza in forma di
tabella
x y z C1 C2 C3
x 1 0 0 0 1 0 10001
x 1 0 0 1 0 1 0
10010
y 0 1 0 1 0 0 1
10100
F = C1 C2 C3
T
0 1 0 0 1 1 10011
C1 = x y z yz 0 0 1 1 1 0 1110
C2 = x y z 0 0 1 0 0 1 1001
C3 = x y z 0 0 0 1 0 0 100
z
0 0 0 2 0 0 200
0 0 0 0 1 0 10
D
0 0 0 0 2 0 20
0 0 0 0 0 1 1
0 0 0 0 0 2 2
13 X 1 1 1 4 4 4 11144
4
14. Costruzione della tabella T
La tabella viene costruita secondo questi criteri:
• si creano n + k colonne, dove:
n = # variabili dell’istanza di 3-SAT
k = # clausole dell’istanza di 3-SAT
• le prime n colonne rappresentano le variabili dell’istanza di
3-SAT, mentre le restanti k colonne rappresentano le
clausole della medesima istanza
• per ogni variabile dell’istanza di 3-SAT si creano due righe,
rappresentanti la prima la variabile asserita, la seconda la
variabile negata (e.g. x e x)
• ognuna delle celle delle prime n colonne è così costruita:
contiene 1 sse la variabile relativa al letterale sulla riga è quella
associata alla colonna, altrimenti contiene 0
• ognuna delle celle delle restanti k colonne è così costruita:
si imposta ad 1 il valore di Ci sse la variabile corrispondente alla
riga compare (asserita o negata) all’interno della clausola Ci,
14 altrimenti si imposta a 0
15. Costruzione della tabella D
A questo punto si aggiungono due ulteriori righe
per ogni clausola
la prima contiene il valore 1 sulla cella relativa alla
clausola considerata
la seconda contiene il valore 2
Si costruisce poi, il vettore riga X di n + k celle
contenente:
1 sulle prime n celle
4 sulle k celle restanti
15
16. Costruzione dell’ istanza di Subset
Sum
Le cifre di ogni riga delle tabelle T e D rappresentano
un numero dell’insieme I di Subset Sum, in notazione
posizionale decimale (la cifra più significativa è a
sinistra)
Il numero associato (con la stessa tecnica usata in
precedenza) al vettore X rappresenta il valore di X
nell’istanza di Subset Sum
16
17. Dimostrazione: 3-SAT p Subset
Sum
Dimostrare che:
F è soddisfacibile un sottoinsieme I I, tale che la somma dei suoi
elementi sia uguale a X
Dimostrazione ( )
Dalla spiegazione di costruzione delle tabelle, si può facilmente dimostrare
che, data un’assegnazione di verità che soddisfa F, sempre un
sottoinsieme di numeri tali che la loro somma sia X.
Infatti è sufficiente scegliere:
• i numeri associati alle righe di T etichettate secondo l’assegnazione di verità
(i.e. se la variabile x è asserita verrà scelta la riga etichettata con x, se la
variabile x è negata verrà scelta la riga etichettata con x)
• un sottoinsieme di righe di D in modo che le ultime k cifre della somma siano
‘4’. Si noti che tale assegnazione esiste sempre: ogni clausola ha valore
‘vero’ quindi la somma su ognuna delle ultime k colonne della matrice T è
compresa tra ‘1’ e ‘3’. Per ognuno di tali valori esiste un sottoinsieme di righe
con le proprietà richieste che non influenza il valore delle altre colonne
Infine, dal momento che l’assegnazione non può essere contraddittoria, per
ogni variabile x verrà selezionato uno ed un solo numero tra quelli relativi alle
righe x e x, dunque per costruzione le prime n cifre della somma saranno 1
17
18. Dimostrazione: 3-SAT p Subset
Sum
Dimostrazione ( )
Al contrario, supponiamo di avere un sottoinsieme di elementi I
I, tali che la loro somma sia X.
È facile notare che:
• dal momento che le prime n cifre della somma sono ‘1’ è
garantito che vengano sempre scelto un letterale per ogni
variabile e che non possano esistere assegnazioni
contraddittorie
• dal momento che non è possibile ottenere somma ‘4’ sulle ultime
k cifre di X usando solo le righe di D, per ogni clausola C deve
essere stata selezionato un numero relativo ad un letterale
contenuto in C
• dunque l’assegnazione derivata a partire dai numeri in I è un’
assegnazione di verità valida per l’istanza di 3-SAT che soddisfa
tutte le clausole e quindi la formula
Si noti, inoltre, che la lunghezza dell’istanza di Subset Sum è
polinomiale rispetto alla lunghezza dell’istanza di 3-SAT e che ogni
operazione viene eseguita in tempo polinomiale.
18
19. Conclusioni sulla dimostrazione
Verificati entrambi i sensi dell’implicazione e
verificato che Subset Sum NP segue che
Subset Sum è NP-Completo
Si procederà ora con la dimostrazione
dell’appartenenza di Knapsack alla classe dei
problemi NP-Completi
19
20. Dimostrazione: Knapsack NP
Lemma
Knapsack NP
Dimostrazione
Un sottoinsieme S S è un certificato di lunghezza
polinomiale per una data istanza di Knapsack,
essendo la sua cardinalità al più pari alla cardinalità di
S
Dato un certificato, è possibile verificare in tempo
polinomiale se
j S wj W
j S vj V
Applicando la definizione di problema NP, si dimostra
20
che Knapsack appartiene a tale classe di complessità
21. Dimostrazione: Subset Sum p
Knapsack
Lemma
Subset Sum p Knapsack
Dimostrazione
Data un’istanza di Subset Sum si costruirà
un’istanza di Knapsack, tale che ammetta una
soluzione sse l’istanza di Subset Sum ammette
una soluzione
Costruzione
Dati i valori (interi positivi) xi, con i {1,…,n},
dell’insieme I di Subset Sum, si costruiranno i valori
(interi positivi) vj, wj, con j {1,…,m}, V, W per
l’istanza di Knapsack nella maniera che si andrà
21 ad illustrare
22. Costruzione dell’istanza
Si imposta la seguente condizione: n = m (i.e. si
prendono tanti oggetti dell’insieme S di Knapsack
quanti sono i numeri dell’insieme I di Subset
Sum)
Si scelgono i valori ed i pesi degli oggetti di
Knapsack nel seguente modo:
vi = xi i = 1,…,n
wi = xi i = 1,…,n
Si scelgono i valori di V e W nel seguente modo:
V=W=X
22
23. Dimostrazione: Subset Sum p
Knapsack
Dimostrare che:
un sottoinsieme I I, tale che la somma dei suoi elementi sia uguale a X un
sottoinsieme S S, tale che j S wj W j S vj V
Dimostrazione
Per costruzione dell’istanza di Knapsack è possibile dimostrare facilmente la
seguente equivalenza:
i I xi = X i I xi X i I xi X j S wj W j S vj V
Questo perché:
(per costruzione) i pesi ed i valori degli oggetti di Knapsack sono uguali ai valori
numerici dell’insieme I di Subset Sum
(per costruzione) gli insiemi I ed S sono di uguale cardinalità
(per costruzione) X = V = W
È possibile quindi affermare che, ad ogni sottoinsieme I I per cui esiste una soluzione
dell’istanza di Subset Sum corrisponde esattamente, in termini di valori numerici e di
numero di elementi, uno ed un solo sottoinsieme S S per cui esiste una soluzione
dell’istanza di Knapsack e viceversa.
Si noti, inoltre, che è possibile scegliere i valori, xi, vj, wj, V, W, X in tempo polinomiale, e
che ogni operazione è eseguita in tempo polinomiale.
23
24. Conclusioni sulla dimostrazione
Verificati entrambi i sensi dell’implicazione segue
la tesi:
Subset Sum p Knapsack
Verificato che Knapsack NP, si è così
dimostrato che il problema dello zaino
appartiene alla classe dei problemi NP-
Completi
24