0 1 Knapsack
0 1 Knapsack
0 1 Knapsack
Knapsack problem
Given some items, pack the knapsack to get
the maximum total value. Each item has some
weight and some value. Total weight that we can
carry is no more than some fixed number W.
So we must consider weights of items as well as
their values.
Item #
1
2
3
Weight Value
1
8
3
6
5
5
2
Knapsack problem
There are two versions of the problem:
1. 0-1 knapsack problem
max bi subject to wi W
iT
iT
Defining a Subproblem
Defining a Subproblem
w1 =2 w2 =4
b1 =3 b2 =5
w3 =5
b3 =8
Weight Benefit
w4 =3
b4 =4
?
Max weight: W = 20
For S4:
Total weight: 14
Maximum benefit: 20
w1 =2 w2 =4
b1 =3 b2 =5
w3 =5
b3 =8
w5 =9
b5 =10
For S5:
Total weight: 20
Maximum benefit: 26
wi
bi
10
Item
#
S4
S5
Solution for S4 is
not part of the
solution for S !!!
V [i, w]
if wi w
or
2) the best subset of Si-1 that has total weight w-wi plus the
item i
10
Recursive Formula
V [i 1, w]
if wi w
V [i, w]
max{V [i 1, w],V [i 1, w wi ] bi} else
11
Running time
for w = 0 to W
O(W)
V[0,w] = 0
for i = 1 to n
V[i,0] = 0
Repeat n
for i = 1 to n
for w = 0 to W
O(W)
< the rest of the code >
times
13
Example
Lets run our algorithm on the
following data:
n = 4 (# of elements)
W = 5 (max weight)
Elements (weight, benefit):
(2,3), (3,4), (4,5), (5,6)
14
Example (2)
i\W 0
0
0
1
2
3
4
1
0
2
0
3
0
4
0
5
0
for w = 0 to W
V[0,w] = 0
15
Example (3)
i\W
0
1
2
3
4
0
0
0
0
0
0
1
0
2
0
3
0
4
0
5
0
for i = 1 to n
V[i,0] = 0
16
Example (4)
i\W
0
1
2
3
4
0
0
0
0
0
0
1
0
0
2
0
3
0
4
0
5
0
Items:
1: (2,3)
2: (3,4)
3: (4,5)
4: (5,6)
i=1
bi=3
wi=2
w=1
w-wi =-1
Example (5)
i\W
0
1
2
3
4
0
0
0
0
0
0
1
0
0
2
0
3
3
0
4
0
5
0
Items:
1: (2,3)
2: (3,4)
3: (4,5)
4: (5,6)
i=1
bi=3
wi=2
w=2
w-wi =0
Example (6)
i\W
0
1
2
3
4
0
0
0
0
0
0
1
0
0
2
0
3
3
0
3
4
0
5
0
Items:
1: (2,3)
2: (3,4)
3: (4,5)
4: (5,6)
i=1
bi=3
wi=2
w=3
w-wi =1
Example (7)
i\W
0
1
2
3
4
0
0
0
0
0
0
1
0
0
2
0
3
3
0
3
4
0
3
5
0
Items:
1: (2,3)
2: (3,4)
3: (4,5)
4: (5,6)
i=1
bi=3
wi=2
w=4
w-wi =2
Example (8)
i\W
0
1
2
3
4
0
0
0
0
0
0
1
0
0
2
0
3
3
0
3
4
0
3
5
0
3
Items:
1: (2,3)
2: (3,4)
3: (4,5)
4: (5,6)
i=1
bi=3
wi=2
w=5
w-wi =3
Example (9)
i\W
0
1
2
3
4
0
0
0
0
0
0
1
0
0
0
2
0
3
3
0
3
4
0
3
5
0
3
Items:
1: (2,3)
2: (3,4)
3: (4,5)
4: (5,6)
i=2
bi=4
wi=3
w=1
w-wi =-2
Example (10)
i\W
0
1
2
3
4
0
0
0
0
0
0
1
0
0
0
2
0
3
3
3
0
3
4
0
3
5
0
3
Items:
1: (2,3)
2: (3,4)
3: (4,5)
4: (5,6)
i=2
bi=4
wi=3
w=2
w-wi =-1
Example (11)
i\W
0
1
2
3
4
0
0
0
0
0
0
1
0
0
0
2
0
3
3
3
0
3
4
4
0
3
5
0
3
Items:
1: (2,3)
2: (3,4)
3: (4,5)
4: (5,6)
i=2
bi=4
wi=3
w=3
w-wi =0
Example (12)
i\W
0
1
2
3
4
0
0
0
0
0
0
1
0
0
0
2
0
3
3
3
0
3
4
4
0
3
4
5
0
3
Items:
1: (2,3)
2: (3,4)
3: (4,5)
4: (5,6)
i=2
bi=4
wi=3
w=4
w-wi =1
Example (13)
i\W
0
1
2
3
4
0
0
0
0
0
0
1
0
0
0
2
0
3
3
3
0
3
4
4
0
3
4
5
0
3
7
Items:
1: (2,3)
2: (3,4)
3: (4,5)
4: (5,6)
i=2
bi=4
wi=3
w=5
w-wi =2
Example (14)
i\W
0
1
2
3
4
0
0
0
0
0
0
1
0
0
0
0
2
0
3
3
3
3
0
3
4
4
4
0
3
4
5
0
3
7
Items:
1: (2,3)
2: (3,4)
3: (4,5)
4: (5,6)
i=3
bi=5
wi=4
w= 1..3
Example (15)
i\W
0
1
2
3
4
0
0
0
0
0
0
1
0
0
0
0
2
0
3
3
3
3
0
3
4
4
4
0
3
4
5
5
0
3
7
Items:
1: (2,3)
2: (3,4)
3: (4,5)
4: (5,6)
i=3
bi=5
wi=4
w= 4
w- wi=0
Example (16)
i\W
0
1
2
3
4
0
0
0
0
0
0
1
0
0
0
0
2
0
3
3
3
3
0
3
4
4
4
0
3
4
5
5
0
3
7
7
Items:
1: (2,3)
2: (3,4)
3: (4,5)
4: (5,6)
i=3
bi=5
wi=4
w= 5
w- wi=1
Example (17)
i\W
0
1
2
3
4
0
0
0
0
0
0
1
0
0
0
0
0
2
0
3
3
3
3
3
0
3
4
4
4
4
0
3
4
5
5
5
0
3
7
7
Items:
1: (2,3)
2: (3,4)
3: (4,5)
4: (5,6)
i=4
bi=6
wi=5
w= 1..4
Example (18)
i\W
0
1
2
3
4
0
0
0
0
0
0
1
0
0
0
0
0
2
0
3
3
3
3
3
0
3
4
4
4
4
0
3
4
5
5
5
0
3
7
7
7
Items:
1: (2,3)
2: (3,4)
3: (4,5)
4: (5,6)
i=4
bi=6
wi=5
w= 5
w- wi=0
Exercise
Comments
33
34
0
0
0
0
0
0
1
0
0
0
0
0
2
0
3
3
3
3
3
0
3
4
4
4
4
0
3
4
5
5
5
0
3
7
7
7
Items:
1: (2,3)
2: (3,4)
3: (4,5)
4: (5,6)
i=4
k= 5
bi=6
wi=5
V[i,k] = 7
V[i1,k] =7
i=n, k=W
while i,k > 0
if V[i,k] V[i1,k] then
mark the ith item as in the knapsack
i = i1, k = k-wi
else
i = i1
35
0
0
0
0
0
0
1
0
0
0
0
0
2
0
3
3
3
3
3
0
3
4
4
4
4
0
3
4
5
5
5
0
3
7
7
7
Items:
1: (2,3)
2: (3,4)
3: (4,5)
4: (5,6)
i=4
k= 5
bi=6
wi=5
V[i,k] = 7
V[i1,k] =7
i=n, k=W
while i,k > 0
if V[i,k] V[i1,k] then
mark the ith item as in the knapsack
i = i1, k = k-wi
else
i = i 1
36
0
0
0
0
0
0
1
0
0
0
0
0
2
0
3
3
3
3
3
0
3
4
4
4
4
0
3
4
5
5
5
0
3
7
7
7
Items:
1: (2,3)
2: (3,4)
3: (4,5)
4: (5,6)
i=3
k= 5
bi=5
wi=4
V[i,k] = 7
V[i1,k] =7
i=n, k=W
while i,k > 0
if V[i,k] V[i1,k] then
mark the ith item as in the knapsack
i = i1, k = k-wi
else
i = i 1
37
0
0
0
0
0
0
1
0
0
0
0
0
2
0
3
3
3
3
3
0
3
4
4
4
4
0
3
4
5
5
5
0
3
7
7
7
i=n, k=W
while i,k > 0
if V[i,k] V[i1,k] then
Items:
1: (2,3)
2: (3,4)
3: (4,5)
4: (5,6)
i=2
k= 5
bi=4
wi=3
V[i,k] = 7
V[i1,k] =3
k wi=2
38
0
0
0
0
0
0
1
0
0
0
0
0
2
0
3
3
3
3
3
0
3
4
4
4
4
0
3
4
5
5
5
0
3
7
7
7
i=n, k=W
while i,k > 0
if V[i,k] V[i1,k] then
Items:
1: (2,3)
2: (3,4)
3: (4,5)
4: (5,6)
i=1
k= 2
bi=3
wi=2
V[i,k] = 3
V[i1,k] =0
k wi=0
39
0
0
0
0
0
0
1
0
0
0
0
0
2
0
3
3
3
3
3
0
3
4
4
4
4
0
3
4
5
5
5
0
3
7
7
7
i=n, k=W
while i,k > 0
if V[i,k] V[i1,k] then
i=0
k= 0
Items:
1: (2,3)
2: (3,4)
3: (4,5)
4: (5,6)
The optimal
knapsack
should contain
{1, 2}
40
0
0
0
0
0
0
1
0
0
0
0
0
2
0
3
3
3
3
3
0
3
4
4
4
4
0
3
4
5
5
5
0
3
7
7
7
i=n, k=W
while i,k > 0
if V[i,k] V[i1,k] then
Items:
1: (2,3)
2: (3,4)
3: (4,5)
4: (5,6)
The optimal
knapsack
should contain
{1, 2}
41
Goal:
Solve only subproblems that are necessary and solve it only once
42
else
value = max(MFKnapsack(i-1, w),
bi + MFKnapsack(i-1, w-wi))
V[i,w] = value
return V[i,w]
43
Conclusion
44
In-Class Exercise
45
Brute-Force Approach
46
46
Dynamic-Programming Approach
(1) SMaxV(0) = 0
(2) MaxV(0) = 0
(3) for i=1 to n
(4) SMaxV(i) = max(SmaxV(i-1)+xi, 0)
30, 40, -100, 10, 20, 50, -60, 90, -180, 100
47
47