0% found this document useful (0 votes)
42 views

Dynamic Programming: CSE373: Design and Analysis of Algorithms

The document discusses the 0-1 knapsack problem and fractional knapsack problem, where a thief is trying to maximize the value of items taken while not exceeding the weight capacity of their knapsack. It presents the dynamic programming approach to solving these problems by building up a table to track the maximum profits for different item and weight combinations. The optimal solution can then be reconstructed by tracing the table values back from the final entry.
Copyright
© © All Rights Reserved
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
42 views

Dynamic Programming: CSE373: Design and Analysis of Algorithms

The document discusses the 0-1 knapsack problem and fractional knapsack problem, where a thief is trying to maximize the value of items taken while not exceeding the weight capacity of their knapsack. It presents the dynamic programming approach to solving these problems by building up a table to track the maximum profits for different item and weight combinations. The optimal solution can then be reconstructed by tracing the table values back from the final entry.
Copyright
© © All Rights Reserved
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 9

Lecture 10

Dynamic Programming
CSE373: Design and Analysis of Algorithms
The Knapsack Problem
The 0-1 knapsack problem
A thief robbing a store finds n items: the i-th item is worth vi
dollars and weights wi pounds (vi, wi integers)
The thief can only carry W pounds in his knapsack
Items must be taken entirely or left behind
Which items should the thief take to maximize the value of his
load?

The fractional knapsack problem


Similar to above
The thief can take fractions of items
The 0-1 Knapsack Problem
Thief has a knapsack of capacity W

There are n items: for i-th item value vi and weight wi

Goal:
find xi such that for all xi = {0, 1}, i = 1, 2, .., n

 wixi  W and

 xivi is maximum
0-1 Knapsack - Greedy Strategy
E.g.:

Item 3 30 $120

Item 2 50 50 50 +
20 $100
Item 1 30
20 + 20 $100
10 10 $60

$60 $100 $120 $160 $220

$6/pound $5/pound $4/pound


• None of the solutions involving the greedy
choice (item 1) leads to an optimal solution
– The greedy choice property does not hold
0-1 Knapsack - Dynamic Programming
P(i, w) – the maximum profit that can be obtained
from items 1 to i, if the knapsack has capacity w

Case 1: thief takes item i

P(i, w) =
vi + P(i - 1, w-wi)
Case 2: thief does not take item i

P(i, w) =
P(i - 1, w)
0-1 Knapsack - Dynamic Programming (DP)
Item i was taken Item i was not taken

P(i, w) = max {vi + P(i - 1, w-wi), P(i - 1, w) }


P(i, w) = 0, if i = 0 or w = 0
0: 1 w - wi w W

0 0 0 0 0 0 0 0 0 0 0 0
0 first
0 second
i-1 0
i 0
0
n 0
0-1 Knapsack – DP Algorithm
for i ← 0 to n
do P(i,0) = 0
for w ← 0 to W
do P(0,w) = 0
for i from 1 to n
do for w from 0 to W
do if wi > w //if the capacity is not enough
then P(i, w) = P(i-1, w)
else
P(i,w) = max{ vi + P(i-1, w-wi), P(i-1, w) }
W = 5 Item Weight Value
Example: 1 2 12
2 1 10
P(i, w) = max {vi + P(i - 1, w-wi), P(i - 1, w) }
3 3 20
0 1 2 3 4 5
4 2 15
0 0 0 0 0 0 0 P(1, 1) = P(0, 1) = 0
1 0 0 12 12 12 12 P(1, 2) = max{12+P(0,0), 0} = max{12+0, 0} = 12
2 0 10 12 22 22 22 P(1, 3) = max{12+P(0,1), 0} = max{12+0, 0} = 12
3 0 10 12 22 30 32 P(1, 4) = max{12+P(0,2), 0} = max{12+0, 0} = 12
4 0 10 15 25 30 37 P(1, 5) = max{12+P(0,3), 0} = max{12+0, 0} = 12

P(2, 1)= max{10+P(1,0), 0} = 10 P(3, 1)= P(2,1) = 10 P(4, 1)= P(3,1) = 10


P(2, 2)= max{10+P(1,1), P(1,2)} P(3, 2)= P(2,2) = 12 P(4, 2)= max{15+0, 12} = 15
= 12
P(2, 3)= max{10+P(1,2), P(1,3)} P(3, 3)= max{20+0, 22}=22 P(4, 3)= max{15+10, 22}=25
= max(10+12,12) = 22
P(2, 4)= max{10+12, 12} = 22 P(3, 4)= max{20+10,22}=30 P(4, 4)= max{15+12, 30}=30
P(2, 5)= max{10+12, 12} = 22 P(3, 5)= max{20+12,22}=32 P(4, 5)= max{15+22, 32}=37
Reconstructing the Optimal Solution
0 1 2 3 4 5
0 0 0 0 0 0 0 • Item 4
1 0 0 12 12 12 12
• Item 2
2 0 10 12 22 22 22
3 0 10 12 22 30 32 • Item 1
4 0 10 15 25 30 37

• Start at P(n, W)
• When you go left-up  item i has been taken
• When you go straight up  item i has not been
taken

You might also like