15-17 Dynamic Programming - Algorithms (Series Lecture)
15-17 Dynamic Programming - Algorithms (Series Lecture)
1
DP - Two key ingredients
Two key ingredients for an optimization problem
to be suitable for a dynamic-programming
solution:
3
Fibonacci numbers
F =0
0
F =1
1
F = F - + F - for i>1 .
i i 1 i 2
4
How to compute F10
F8
F9
F7
F10
F7
F8
F6
5
Dynamic Programming
Applicable when subproblems are not independent
Subproblems share subsubproblems
E.g.: Fibonacci numbers:
Recurrence: F(n) = F(n-1) + F(n-2)
Boundary conditions: F(1) = 0, F(2) = 1
Compute: F(5) = 3, F(3) = 1, F(4) = 2
A divide and conquer approach would repeatedly solve the
common subproblems
Dynamic programming solves every subproblem just once and
stores the answer in a table
More work in DC than DP
6
Tabular computation
The tabular computation can avoid
recompuation.
F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10
0 1 1 2 3 5 8 13 21 34 55
Result
7
Dynamic Programming Algorithm
1. Characterize the structure of an optimal solution
2. Recursively define the value of an optimal solution
3. Compute the value of an optimal solution in a bottom-
up fashion
4. Construct an optimal solution from computed
information
Steps 1-3 form the basis of a dynamic-programming solution to a problem. Step
4 can be omitted if only the value of an optimal solution is required. When
we do perform step 4, we sometimes maintain additional information
during the computation in step 3 to ease the construction of an optimal
solution.
8
Longest increasing subsequence(LIS)
9
A naive approach for LIS
Let L[ i ] be the length of a longest increasing
subsequence ending at position i.
L[i] = 1 + max j = 0..i-1{L[j] | aj < ai}
(use a dummy a0 = minimum, and L[0]=0)
Index 0 1 2 3 4 5 6 7 8 9 10
Input 0 9 2 5 3 7 11 8 10 13 6
Length 0 1 1 2 2 3 4 4 5 6 3
Prev -1 0 0 2 2 4 5 5 7 8 4
Path 1 1 1 1 1 2 2 2 2 2 2
5 3 3 3 3 3 3 3 BestEnd[2]
7 7 7 7 7 6 BestEnd[3]
11 8 8 8 8 BestEnd[4]
For each position, we perform
a binary search to update 10 10 10 BestEnd[5]
BestEnd. Therefore, the
13 13 BestEnd[6]
running time is O(n log n).
11
The 0-1 Knapsack Problem
Thief has a knapsack of capacity W
Goal:
find xi such that for all xi = {0, 1}, i = 1, 2, .., n
wixi W and
xivi is maximum
12
0-1 Knapsack - Greedy Strategy
E.g.:
Item 3 30 $120
Item 2 50 50 +
20 $100
Item 1 30
20 + 20 $100
10 10 $60
13
0-1 Knapsack - Dynamic Programming
P(i, w) = P(i - 1, w)
14
0-1 Knapsack - Dynamic Programming
0 0 0 0 0 0 0 0 0 0 0 0
0 first
0 second
i-1 0
i 0
0
n 0
15
W=5 Item Weight Value
Example: 0-1 Knapsack
P(i, w) = max {vi + P(i - 1, w-wi), P(i - 1, w) } 1 2 12
2 1 10
3 3 20
w 0 1 2 3 4 5
i 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+0, 0} = 12
2 0 10 12 22 22 22 P(1, 3) = max{12+0, 0} = 12
3 0 10 12 22 30 32 P(1, 4) = max{12+0, 0} = 12
4 0 10 15 25 30 37 P(1, 5) = max{12+0, 0} = 12
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
17
Overlapping Subproblems
P(i, w) = max {vi + P(i - 1, w-wi), P(i - 1, w) }
0: 1 w W
0 0 0 0 0 0 0 0 0 0 0 0
0
0
i-1 0
i 0
0
n 0
E.g.: all the subproblems shown in red may
depend on P(i-1, w)
18
In Class Exercise
i\W 0 1 2 3 4 5
0 0 0 0 0 0 0
1 0
2 0
3 0
4 0
for w = 0 to W
O(W)
V[0,w] = 0
for i = 1 to n
V[i,0] = 0
for i = 1 to n Repeat n times
for w = 0 to W O(W)
< the rest of the code >
What is the running time of this algorithm?
O(n*W)
Remember that the brute-force algorithm
takes O(2n)
Conclusion we achieved till now
Suppose we have a
wall instead of the rock. 4
5 3
2
At every step our climber can reach exactly three
handholds: above, above and to the right and
above and to the left.
Let C(i,j) be the rating of the hold (i,j). There are three
cases for A(i,j):
Middle: C(i,j)+min{A(i-1,j-1),A(i-1,j),A(i-1,j+1)}
A(i,j) = C(i,j)+min{A(i-1,j-1),A(i-1,j),A(i-1,j+1)}
Rock climbing: example
C(i,j): A(i,j):
3 2 5 4 8 i\j 0 1 2 3 4 5 6
5 7 5 6 1 0 0 0 0 0 0
4 4 6 2 3 1
2 8 9 5 8 2
3
4
3 2 5 4 8 i\j 0 1 2 3 4 5 6
5 7 5 6 1 0 0 0 0 0 0
4 4 6 2 3 1 3 2 5 4 8
2 8 9 5 8 2
3
4
3 2 5 4 8 i\j 0 1 2 3 4 5 6
5 7 5 6 1 0 0 0 0 0 0
4 4 6 2 3 1 3 2 5 4 8
2 8 9 5 8 2 7
3
4
A(2,1)=5+min{,3,2}=7.
Rock climbing: example
C(i,j): A(i,j):
3 2 5 4 8 i\j 0 1 2 3 4 5 6
5 7 5 6 1 0 0 0 0 0 0
4 4 6 2 3 1 3 2 5 4 8
2 8 9 5 8 2 7 9
3
4
A(2,1)=5+min{,3,2}=7. A(2,2)=7+min{3,2,5}=9
Rock climbing: example
C(i,j): A(i,j):
3 2 5 4 8 i\j 0 1 2 3 4 5 6
5 7 5 6 1 0 0 0 0 0 0
4 4 6 2 3 1 3 2 5 4 8
2 8 9 5 8 2 7 9 7
3
4
A(2,1)=5+min{,3,2}=7. A(2,2)=7+min{3,2,5}=9
A(2,3)=5+min{2,5,4}=7.
Rock climbing: example
C(i,j): A(i,j):
3 2 5 4 8 i\j 0 1 2 3 4 5 6
5 7 5 6 1 0 0 0 0 0 0
4 4 6 2 3 1 3 2 5 4 8
2 8 9 5 8 2 7 9 7 10 5
3
4
3 2 5 4 8 i\j 0 1 2 3 4 5 6
5 7 5 6 1 0 0 0 0 0 0
4 4 6 2 3 1 3 2 5 4 8
2 8 9 5 8 2 7 9 7 10 5
3 11 11 13 7 8
4
3 2 5 4 8 i\j 0 1 2 3 4 5 6
5 7 5 6 1 0 0 0 0 0 0
4 4 6 2 3 1 3 2 5 4 8
2 8 9 5 8 2 7 9 7 10 5
3 11 11 13 7 8
4 13 19 16 12 15
3 2 5 4 8 i\j 0 1 2 3 4 5 6
5 7 5 6 1 0 0 0 0 0 0
4 4 6 2 3 1 3 2 5 4 8
2 8 9 5 8 2 7 9 7 10 5
3 11 11 13 7 8
4 13 19 16 12 15
3 2 5 4 8 i\j 0 1 2 3 4 5 6
5 7 5 6 1 0 0 0 0 0 0
4 4 6 2 3 1 3 2 5 4 8
2 8 9 5 8 2 7 9 7 10 5
3 11 11 13 7 8
4 13 19 16 12 15
We are done!