0% found this document useful (0 votes)
12 views24 pages

0 1knapsack

Uploaded by

zeeshan mubeen
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
12 views24 pages

0 1knapsack

Uploaded by

zeeshan mubeen
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 24

Dynamic programming

0-1 Knapsack
problem

Zeeshan Mubeen
Senior Lecturer (RSCI)
1
0-1 Knapsack problem

Given a knapsack with maximum capacity


W, and a set S consisting of n items
Each item i has some weight wi and benefit
value bi (all wi , bi and W are integer
values)
Problem: How to pack the knapsack to
achieve maximum total value of
04/04/17 2
packed items?
0-1 Knapsack problem:
a picture
Weight Benefit value
Items wi bi

3
This is a knapsack 2
Max weight: W = 20
3 4
5 8
W = 20 4 5

9 10

04/04/17 3
Defining a Subproblem
w1 =2 w2=3 w3 =4 w4 =5 Weight
wi
b1 =3 b2
=4
b3 =5
?
b4 =8 ItemBenefit
#
b2
i

1 3
Max weight: W = 20
S4 2 3 4
For S 4:
Total S5 3 4 5
weight: 14; 4 5 8
total
benefit: 20 5 9 10
w1 =2 w2=4 w3 =5 w4 =9
b1 =3 b2 b3 =8 b4 =10
=5
For S 5:
Solution for S4 is
Total not part of the
04/04/17 weight: 20 solution for S5!!! 13
total
Example #1
Let’s 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)

04/04/17 5
i 0 1 2 3 4
W
0 0
1 0
2 0
3 0
4 0
5 0

for w = 0 to W
B[0,w] = 0

04/04/17 6
i 0 1 2 3 4
W
0 0 0 0 0 0
1 0
2 0
3 0
4 0
5 0

for i = 0 to n
B[i,0] = 0

04/04/17 7
Items:
i 1: (2,3)
0 1
W 2: (3,4)
0 0 0 0 0 0 3: (4,5)
1 0 0 i=1 4: (5,6)
2 0 bi=3
3 0 wi=2
4 0
5 0
w=1
if w <= w // item i can be part of the solution
i w-wi
if b + B[i-1,w-w ] > B[i-1,w]
i i
=-1
B[i,w] = bi + B[i-1,w- wi]
else
B[i,w] = B[i-1,w]
04/04/17 else B[i,w] = B[i-1,w] // 22
wi > w
Items:
Example (5) 1: (2,3)
i 0 1 2 3 4
W 2: (3,4)
0 0 0 0 0 0 3: (4,5)
1 0 0 i=1 4: (5,6)
2 0 3 bi=3
3 0 wi=2
4 0
5 0
w=2
if w <= w // item i can be part of the solution
i w-wi
if b + B[i-1,w-w ] > B[i-1,w]
i i
=0
B[i,w] = bi + B[i-1,w- wi]
else
B[i,w] = B[i-1,w]
04/04/17 else B[i,w] = B[i-1,w] // wi > w 23
Items:
i 1: (2,3)
0 1
W 2: (3,4)
0 0 0 0 0 0 3: (4,5)
1 0 0 i=1 4: (5,6)
2 0 3 bi=3
3 0 3 wi=2
4 0
5 0
w=3
if w <= w // item i can be part of the solution
i w-
if b + B[i-1,w-w ] > B[i-1,w]
i i
wi=1
B[i,w] = bi + B[i-1,w- wi]
else
B[i,w] = B[i-1,w]
04/04/17 else B[i,w] = B[i-1,w] // wi > w 24
Items:
i 1: (2,3)
0 1
W 2: (3,4)
0 0 0 0 0 0 3: (4,5)
1 0 0 i=1 4: (5,6)
2 0 3 bi=3
3 0 3 wi=2
4 0 3
5 0
w=4
if w <= w // item i can be part of the solution
i w-
if b + B[i-1,w-w ] > B[i-1,w]
i i
wi=2
B[i,w] = bi + B[i-1,w- wi]
else
B[i,w] = B[i-1,w]
04/04/17 else B[i,w] = B[i-1,w] // wi > w 25
Items:
Example (8) 1: (2,3)
i 0 1 2 3 4
W 2: (3,4)
0 0 0 0 0 0 3: (4,5)
1 0 0 i=1 4: (5,6)
2 0 3 bi=3
3 0 3 wi=2
4 0 3
5 0 3
w=5
if w <= w // item i can be part of the solution
i w-
if b + B[i-1,w-w ] > B[i-1,w]
i i
wi=2
B[i,w] = bi + B[i-1,w- wi]
else
B[i,w] = B[i-1,w]
04/04/17 else B[i,w] = B[i-1,w] // wi > w 26
Items:
i 1: (2,3)
0 1
W 2: (3,4)
0 0 0 0 0 0 3: (4,5)
1 0 0 0 i=2 4: (5,6)
2 0 3 bi=4
3 0 3 wi=3
4 0 3
5 0 3
w=1
if w <= w // item i can be part of the solution
i w-
if b + B[i-1,w-w ] > B[i-1,w]
i i
wi=-
B[i,w] = b + B[i-1,w- w ]
2
i i

else
B[i,w] = B[i-1,w]
04/04/17 else B[i,w] = B[i-1,w] // 27
wi > w
Items:
i 1: (2,3)
0 1
W 2: (3,4)
0 0 0 0 0 0 3: (4,5)
1 0 0 0 i=2 4: (5,6)
2 0 3 3 bi=4
3 0 3 wi=3
4 0 3
5 0 3
w=2
if w <= w // item i can be part of the solution
i w-
if b + B[i-1,w-w ] > B[i-1,w]
i i
wi=-
B[i,w] = b + B[i-1,w- w ]
1
i i

else
B[i,w] = B[i-1,w]
04/04/17 else B[i,w] = B[i-1,w] // 28
wi > w
Items:
i 1: (2,3)
0 1
W 2: (3,4)
0 0 0 0 0 0 3: (4,5)
1 0 0 0 i=2 4: (5,6)
2 0 3 3 bi=4
3 0 3 4 wi=3
4 0 3
5 0 3
w=3
if w <= w // item i can be part of the solution
i w-
if b + B[i-1,w-w ] > B[i-1,w]
i i
wi=0
B[i,w] = bi + B[i-1,w- wi]
else
B[i,w] = B[i-1,w]
04/04/17 else B[i,w] = B[i-1,w] // wi > w 29
Items:
i 1: (2,3)
0 1
W 2: (3,4)
0 0 0 0 0 0 3: (4,5)
1 0 0 0 i=2 4: (5,6)
2 0 3 3 bi=4
3 0 3 4 wi=3
4 0 3 4
5 0 3
w=4
if w <= w // item i can be part of the solution
i w-
if b + B[i-1,w-w ] > B[i-1,w]
i i
wi=1
B[i,w] = bi + B[i-1,w- wi]
else
B[i,w] = B[i-1,w]
04/04/17 else B[i,w] = B[i-1,w] // wi > w 30
Items:
i 1: (2,3)
0 1
W 2: (3,4)
0 0 0 0 0 0 3: (4,5)
1 0 0 0 i=2 4: (5,6)
2 0 3 3 bi=4
3 0 3 4 wi=3
4 0 3 4
5 0 3 7
w=5
if w <= w // item i can be part of the solution
i
w-
if b + B[i-1,w-w ] > B[i-1,w]
i i
wi=2
B[i,w] = bi + B[i-1,w- wi]
else
B[i,w] = B[i-1,w]
04/04/17 else B[i,w] = B[i-1,w] // wi > w 17
Items:
i 1: (2,3)
0 1
W 2: (3,4)
0 0 0 0 0 0 3: (4,5)
1 0 0 0 0 i=3 4: (5,6)
2 0 3 3 3 bi=5
3 0 3 4 4 wi=
4 0 3 4 4 =1..3
w
5 0 3 7
if wi <= w // item i can be part of the solution
if bi + B[i-1,w-wi] > B[i-1,w]
B[i,w] = bi + B[i-1,w- wi]
else
B[i,w] = B[i-1,w]
04/04/17 else B[i,w] = B[i-1,w] // wi > w 18
Items:
i 1: (2,3)
0 1
W 2: (3,4)
0 0 0 0 0 0 3: (4,5)
1 0 0 0 0 i=3 4: (5,6)
2 0 3 3 3 bi=5
3 0 3 4 4 wi=4
4 0 3 4 5
5 0 3 7 w-
w=4wi=0
if wi <= w // item i can be part of the solution
if bi + B[i-1,w-wi] > B[i-1,w]
B[i,w] = bi + B[i-1,w- wi]
else
B[i,w] = B[i-1,w]
04/04/17 else B[i,w] = B[i-1,w] // wi > w 33
Items:
i 1: (2,3)
0 1
W 2: (3,4)
0 0 0 0 0 0 3: (4,5)
1 0 0 0 0 i=3 4: (5,6)
2 0 3 3 3 bi=5
3 0 3 4 4 wi=4
4 0 3 4 5
5 0 3 7 7 w-
w=5wi=1
if wi <= w // item i can be part of the solution
if bi + B[i-1,w-wi] > B[i-1,w]
B[i,w] = bi + B[i-1,w- wi]
else
B[i,w] = B[i-1,w]
04/04/17 else B[i,w] = B[i-1,w] // 20
wi > w
Items:
i 1: (2,3)
0 1
W 2: (3,4)
0 0 0 0 0 0 3: (4,5)
1 0 0 0 0 0 i=3 4: (5,6)
2 0 3 3 3 3 bi=5
3 0 3 4 4 4 wi=
4 0 3 4 5 5 4 =1..4
w
5 0 3 7 7
if wi <= w // item i can be part of the solution
if bi + B[i-1,w-wi] > B[i-1,w]
B[i,w] = bi + B[i-1,w- wi]
else
B[i,w] = B[i-1,w]
04/04/17 else B[i,w] = B[i-1,w] // 21
wi > w
Items:
i 1: (2,3)
0 1
W 2: (3,4)
0 0 0 0 0 0 3: (4,5)
1 0 0 0 0 0 i=3 4: (5,6)
2 0 3 3 3 3 bi=5
3 0 3 4 4 4 wi=4
4 0 3 4 5 5
5 0 3 7 7 7
w=5
if wi <= w // item i can be part of the solution
if bi + B[i-1,w-wi] > B[i-1,w]
B[i,w] = bi + B[i-1,w- wi]
else
B[i,w] = B[i-1,w]
04/04/17 else B[i,w] = B[i-1,w] // 36
wi > w
Conclusion
Dynamic programming is a useful
technique of solving certain kind
of problems
When the solution can be recursively
described in terms of partial solutions, we
can store these partial solutions and re-
use them as necessary
Running time (Dynamic Programming
algorithm vs. naïve algorithm):
– LCS: O(m*n) vs. O(n * 2m)
38
The End

04/04/17 39

You might also like