topic 25 dynamic programming "thus, i thought dynamic programming was a good name. it was...
TRANSCRIPT
![Page 1: Topic 25 Dynamic Programming "Thus, I thought dynamic programming was a good name. It was something not even a Congressman could object to. So I used it](https://reader036.vdocuments.mx/reader036/viewer/2022062803/56649f2e5503460f94c47e23/html5/thumbnails/1.jpg)
Topic 25Dynamic Programming
"Thus, I thought dynamic programming was a good name. It was something not even a Congressman could object to. So I used it as an umbrella for my activities"
- Richard E. Bellman
![Page 2: Topic 25 Dynamic Programming "Thus, I thought dynamic programming was a good name. It was something not even a Congressman could object to. So I used it](https://reader036.vdocuments.mx/reader036/viewer/2022062803/56649f2e5503460f94c47e23/html5/thumbnails/2.jpg)
Origins8 A method for solving complex problems by
breaking them into smaller, easier, sub problems
8 Term Dynamic Programming coined by mathematician Richard Bellman in early 1950s– employed by Rand corporation– Rand had many, large military contracts– Charles E Wilson, Secretary of Defense against
research, especially mathematical research– how could any one oppose "dynamic"?
CS314 Dynamic Programming 2
![Page 3: Topic 25 Dynamic Programming "Thus, I thought dynamic programming was a good name. It was something not even a Congressman could object to. So I used it](https://reader036.vdocuments.mx/reader036/viewer/2022062803/56649f2e5503460f94c47e23/html5/thumbnails/3.jpg)
Dynamic Programming8Break big problem up into smaller
problems ...8Sound familiar?8Recursion?
N! = 1 for N == 0N! = N * (N - 1)! for N > 0
CS314 Dynamic Programming 3
![Page 4: Topic 25 Dynamic Programming "Thus, I thought dynamic programming was a good name. It was something not even a Congressman could object to. So I used it](https://reader036.vdocuments.mx/reader036/viewer/2022062803/56649f2e5503460f94c47e23/html5/thumbnails/4.jpg)
Fibonacci Numbers8 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 114, …
8 F1 = 1
8 F2 = 1
8 FN = FN - 1 + FN - 2
8Recursive Solution?
CS314 Dynamic Programming 4
![Page 5: Topic 25 Dynamic Programming "Thus, I thought dynamic programming was a good name. It was something not even a Congressman could object to. So I used it](https://reader036.vdocuments.mx/reader036/viewer/2022062803/56649f2e5503460f94c47e23/html5/thumbnails/5.jpg)
Failing Spectacularly8Naïve recursive method
8Order of this method?A. O(1) B. O(log N) C. O(N) D. O(N2) E. O(2N)
CS314 Dynamic Programming 5
![Page 6: Topic 25 Dynamic Programming "Thus, I thought dynamic programming was a good name. It was something not even a Congressman could object to. So I used it](https://reader036.vdocuments.mx/reader036/viewer/2022062803/56649f2e5503460f94c47e23/html5/thumbnails/6.jpg)
Failing Spectacularly
CS314 Dynamic Programming 6
![Page 7: Topic 25 Dynamic Programming "Thus, I thought dynamic programming was a good name. It was something not even a Congressman could object to. So I used it](https://reader036.vdocuments.mx/reader036/viewer/2022062803/56649f2e5503460f94c47e23/html5/thumbnails/7.jpg)
Failing Spectacularly
CS314 Dynamic Programming 7
![Page 8: Topic 25 Dynamic Programming "Thus, I thought dynamic programming was a good name. It was something not even a Congressman could object to. So I used it](https://reader036.vdocuments.mx/reader036/viewer/2022062803/56649f2e5503460f94c47e23/html5/thumbnails/8.jpg)
Failing Spectacularly
8How long to calculate the 70th Fibonacci Number with this method?
A. 37 seconds
B. 74 seconds
C. 740 seconds
D. 14,800 seconds
E. None of these
CS314 Dynamic Programming 8
![Page 9: Topic 25 Dynamic Programming "Thus, I thought dynamic programming was a good name. It was something not even a Congressman could object to. So I used it](https://reader036.vdocuments.mx/reader036/viewer/2022062803/56649f2e5503460f94c47e23/html5/thumbnails/9.jpg)
Aside - Overflow8 at 47th Fibonacci number overflows int8Could use BigInteger class instead
CS314 Dynamic Programming 9
![Page 10: Topic 25 Dynamic Programming "Thus, I thought dynamic programming was a good name. It was something not even a Congressman could object to. So I used it](https://reader036.vdocuments.mx/reader036/viewer/2022062803/56649f2e5503460f94c47e23/html5/thumbnails/10.jpg)
Aside - BigInteger8 Answers correct beyond 46th Fibonacci number8 Even slower due to creation of so many objects
CS314 Dynamic Programming 10
![Page 11: Topic 25 Dynamic Programming "Thus, I thought dynamic programming was a good name. It was something not even a Congressman could object to. So I used it](https://reader036.vdocuments.mx/reader036/viewer/2022062803/56649f2e5503460f94c47e23/html5/thumbnails/11.jpg)
Slow Fibonacci 8Why so slow?8Algorithm keeps calculating the same
value over and over8When calculating the 40th Fibonacci
number the algorithm calculates the 4th Fibonacci number 24,157,817 times!!!
CS314 Dynamic Programming 11
![Page 12: Topic 25 Dynamic Programming "Thus, I thought dynamic programming was a good name. It was something not even a Congressman could object to. So I used it](https://reader036.vdocuments.mx/reader036/viewer/2022062803/56649f2e5503460f94c47e23/html5/thumbnails/12.jpg)
Fast Fibonacci 8 Instead of starting with the big problem
and working down to the small problems
8 ... start with the small problem and work up to the big problem
CS314 Dynamic Programming 12
![Page 13: Topic 25 Dynamic Programming "Thus, I thought dynamic programming was a good name. It was something not even a Congressman could object to. So I used it](https://reader036.vdocuments.mx/reader036/viewer/2022062803/56649f2e5503460f94c47e23/html5/thumbnails/13.jpg)
Fast Fibonacci
CS314 Dynamic Programming 13
![Page 14: Topic 25 Dynamic Programming "Thus, I thought dynamic programming was a good name. It was something not even a Congressman could object to. So I used it](https://reader036.vdocuments.mx/reader036/viewer/2022062803/56649f2e5503460f94c47e23/html5/thumbnails/14.jpg)
Fast Fibonacci
CS314 Dynamic Programming 14
![Page 15: Topic 25 Dynamic Programming "Thus, I thought dynamic programming was a good name. It was something not even a Congressman could object to. So I used it](https://reader036.vdocuments.mx/reader036/viewer/2022062803/56649f2e5503460f94c47e23/html5/thumbnails/15.jpg)
Memoization8Store (cache) results from functions for
later lookup8Memoization of Fibonacci Numbers
CS314 Dynamic Programming 15
![Page 16: Topic 25 Dynamic Programming "Thus, I thought dynamic programming was a good name. It was something not even a Congressman could object to. So I used it](https://reader036.vdocuments.mx/reader036/viewer/2022062803/56649f2e5503460f94c47e23/html5/thumbnails/16.jpg)
Fibonacci Memoization
CS314 Dynamic Programming 16
![Page 17: Topic 25 Dynamic Programming "Thus, I thought dynamic programming was a good name. It was something not even a Congressman could object to. So I used it](https://reader036.vdocuments.mx/reader036/viewer/2022062803/56649f2e5503460f94c47e23/html5/thumbnails/17.jpg)
Dynamic Programming8When to use?8When a big problem can be broken up into
sub problems.8 Solution to original problem can be
calculated from results of smaller problems.8 Sub problems have a natural ordering from
smallest to largest.– larger problems depend on previous solutions
8Multiple techniques within DP
CS314 Dynamic Programming 17
![Page 18: Topic 25 Dynamic Programming "Thus, I thought dynamic programming was a good name. It was something not even a Congressman could object to. So I used it](https://reader036.vdocuments.mx/reader036/viewer/2022062803/56649f2e5503460f94c47e23/html5/thumbnails/18.jpg)
DP Algorithms8 Step 1: Define the *meaning* of the subproblems
(in English for sure, in Math as well if you find it helpful).
8 Step 2: Show where the solution will be found.
8 Step 3: Show how to set the first subproblem.
8 Step 4: Define the order in which the subproblems are solved.
8 Step 5: Show how to compute the answer to each subproblem using the previously computed subproblems. (This step is typically polynomial, once the other subproblems are solved.)
CS314 Dynamic Programming 18
![Page 19: Topic 25 Dynamic Programming "Thus, I thought dynamic programming was a good name. It was something not even a Congressman could object to. So I used it](https://reader036.vdocuments.mx/reader036/viewer/2022062803/56649f2e5503460f94c47e23/html5/thumbnails/19.jpg)
Dynamic Programing Example8 Another simple example8 Finding the best solution involves finding the
best answer to simpler problems
8Given a set of coins with values (V1, V2, … VN) and a target sum S, find the fewest coins required to equal S
8 Recall, Greedy algorithm does not always work:
8 {1, 5, 12} and target sum = 158Could use recursive backtracking …
CS314 Dynamic Programming 19
![Page 20: Topic 25 Dynamic Programming "Thus, I thought dynamic programming was a good name. It was something not even a Congressman could object to. So I used it](https://reader036.vdocuments.mx/reader036/viewer/2022062803/56649f2e5503460f94c47e23/html5/thumbnails/20.jpg)
Minimum Number of Coins8 To find minimum number of coins to sum to
15 with values {1, 5, 12} start with sum 0 – recursive backtracking would likely start with 15
8 Let M(S) = minimum number of coins to sum to S
8 At each step look at target sum, coins available, and previous sums– pick the smallest option
CS314 Dynamic Programming 20
![Page 21: Topic 25 Dynamic Programming "Thus, I thought dynamic programming was a good name. It was something not even a Congressman could object to. So I used it](https://reader036.vdocuments.mx/reader036/viewer/2022062803/56649f2e5503460f94c47e23/html5/thumbnails/21.jpg)
Minimum Number of Coins8M(0) = 0 coins8M(1) = 1 coin (1 coin)8M(2) = 2 coins (1 coin + M(1))8M(3) = 3 coins (1 coin + M(2))8M(4) = 4 coins (1 coin + M(3))8M(5) = interesting, 2 options available:
1 + others OR single 5if 1 then 1 + M(4) = 5, if 5 then 1 + M(0) = 1clearly better to pick the coin worth 5
CS314 Dynamic Programming 21
![Page 22: Topic 25 Dynamic Programming "Thus, I thought dynamic programming was a good name. It was something not even a Congressman could object to. So I used it](https://reader036.vdocuments.mx/reader036/viewer/2022062803/56649f2e5503460f94c47e23/html5/thumbnails/22.jpg)
Minimum Number of Coins8 M(0) = 08 M(1) = 1 (1 coin)8 M(2) = 2 (1 coin + M(1))8 M(3) = 3 (1 coin + M(2))8 M(4) = 4 (1 coin + M(3))8 M(5) = 1 (1 coin + M(0))8 M(6) = 2 (1 coin + M(5))8 M(7) = 3 (1 coin + M(6))8 M(8) = 4 (1 coin + M(7))8 M(9) = 5 (1 coin + M(8))8 M(10) = 2 (1 coin + M(5))
options: 1, 5
8 M(11) = 2 (1 coin + M(10))options: 1, 5
8 M(12) = 1 (1 coin + M(0))options: 1, 5, 12
8 M(13) = 2 (1 coin + M(12))options: 1, 12
8 M(14) = 3 (1 coin + M(13))options: 1, 12
8 M(15) = 3 (1 coin + M(10))options: 1, 5, 12
CS314 Dynamic Programming 22
![Page 23: Topic 25 Dynamic Programming "Thus, I thought dynamic programming was a good name. It was something not even a Congressman could object to. So I used it](https://reader036.vdocuments.mx/reader036/viewer/2022062803/56649f2e5503460f94c47e23/html5/thumbnails/23.jpg)
KNAPSACK PROBLEM - RECURSIVE BACKTRACKING AND DYNAMIC PROGRAMMING
CS314 Dynamic Programming 23
![Page 24: Topic 25 Dynamic Programming "Thus, I thought dynamic programming was a good name. It was something not even a Congressman could object to. So I used it](https://reader036.vdocuments.mx/reader036/viewer/2022062803/56649f2e5503460f94c47e23/html5/thumbnails/24.jpg)
Knapsack Problem8 A bin packing problem8 Similar to fair teams problem from recursion
assignment8 You have a set of items8 Each item has a weight and a value8 You have a knapsack with a weight limit8Goal: Maximize the value of the items you
put in the knapsack without exceeding the weight limit
CS314 Dynamic Programming 24
![Page 25: Topic 25 Dynamic Programming "Thus, I thought dynamic programming was a good name. It was something not even a Congressman could object to. So I used it](https://reader036.vdocuments.mx/reader036/viewer/2022062803/56649f2e5503460f94c47e23/html5/thumbnails/25.jpg)
Knapsack Example
25
8 Items:
8WeightLimit = 8
8One greedy solution: Take the highest ratio item that will fit: (1, 6), (2, 11), and (4, 12)
8 Total value = 6 + 11 + 12 = 298 Is this optimal?A. Yes B. No
Item Number
Weight of Item
Value of Item
Value per unit Weight
1 1 6 6.0
2 2 11 5.5
3 4 1 0.25
4 4 12 3.0
5 6 19 3.167
6 7 12 1.714
![Page 26: Topic 25 Dynamic Programming "Thus, I thought dynamic programming was a good name. It was something not even a Congressman could object to. So I used it](https://reader036.vdocuments.mx/reader036/viewer/2022062803/56649f2e5503460f94c47e23/html5/thumbnails/26.jpg)
Knapsack - Recursive Backtracking
CS314 Dynamic Programming 26
![Page 27: Topic 25 Dynamic Programming "Thus, I thought dynamic programming was a good name. It was something not even a Congressman could object to. So I used it](https://reader036.vdocuments.mx/reader036/viewer/2022062803/56649f2e5503460f94c47e23/html5/thumbnails/27.jpg)
Knapsack - Dynamic Programming8Recursive backtracking starts with max
capacity and makes choice for items: choices are:– take the item if it fits– don't take the item
8Dynamic Programming, start with simpler problems
8Reduce number of items available8 AND Reduce weight limit on knapsack8Creates a 2d array of possibilities
CS314 Dynamic Programming 27
![Page 28: Topic 25 Dynamic Programming "Thus, I thought dynamic programming was a good name. It was something not even a Congressman could object to. So I used it](https://reader036.vdocuments.mx/reader036/viewer/2022062803/56649f2e5503460f94c47e23/html5/thumbnails/28.jpg)
Knapsack - Optimal Function8OptimalSolution(items, weight) is best
solution given a subset of items and a weight limit
8 2 options:8OptimalSolution does not select ith item
– select best solution for items 1 to i - 1with weight limit of w
8OptimalSolution selects ith item– New weight limit = w - weight of ith item– select best solution for items 1 to i - 1with new
weight limit28
![Page 29: Topic 25 Dynamic Programming "Thus, I thought dynamic programming was a good name. It was something not even a Congressman could object to. So I used it](https://reader036.vdocuments.mx/reader036/viewer/2022062803/56649f2e5503460f94c47e23/html5/thumbnails/29.jpg)
Knapsack Optimal Function8OptimalSolution(items, weight limit) =
0 if 0 items
OptimalSolution(items - 1, weight) if weight of ith item is greater than allowed weightwi > w (In others ith item doesn't fit)
max of (OptimalSolution(items - 1, w), value of ith item + OptimalSolution(items - 1, w - wi)
CS314 Dynamic Programming 29
![Page 30: Topic 25 Dynamic Programming "Thus, I thought dynamic programming was a good name. It was something not even a Congressman could object to. So I used it](https://reader036.vdocuments.mx/reader036/viewer/2022062803/56649f2e5503460f94c47e23/html5/thumbnails/30.jpg)
Knapsack - Algorithm8Create a 2d array to store
value of best option given subset of items and possible weights
8 In our example 0 to 6 items and weight limits of of 0 to 8
8 Fill in table using OptimalSolution Function
CS314 Dynamic Programming 30
Item Number
Weight of Item
Value of Item
1 1 6
2 2 11
3 4 1
4 4 12
5 6 19
6 7 12
![Page 31: Topic 25 Dynamic Programming "Thus, I thought dynamic programming was a good name. It was something not even a Congressman could object to. So I used it](https://reader036.vdocuments.mx/reader036/viewer/2022062803/56649f2e5503460f94c47e23/html5/thumbnails/31.jpg)
Knapsack AlgorithmGiven N items and WeightLimit
Create Matrix M with N + 1 rows and WeightLimit + 1 columns
For weight = 0 to WeightLimitM[0, w] = 0
For item = 1 to Nfor weight = 1 to WeightLimit
if(weight of ith item > weight)M[item, weight] = M[item - 1, weight]
elseM[item, weight] = max ofM[item - 1, weight] ANDvalue of item + M[item - 1, weight - weight of item]
![Page 32: Topic 25 Dynamic Programming "Thus, I thought dynamic programming was a good name. It was something not even a Congressman could object to. So I used it](https://reader036.vdocuments.mx/reader036/viewer/2022062803/56649f2e5503460f94c47e23/html5/thumbnails/32.jpg)
Knapsack - Table
CS314 Dynamic Programming 32
Item Weight Value
1 1 6
2 2 11
3 4 1
4 4 12
5 6 19
6 7 12
items / weight 0 1 2 3 4 5 6 7 8
{} 0 0 0 0 0 0 0 0 0{1} {1,2} {1, 2, 3} {1, 2, 3, 4} {1, 2, 3, 4, 5} {1, 2, 3, 4, 5, 6}
![Page 33: Topic 25 Dynamic Programming "Thus, I thought dynamic programming was a good name. It was something not even a Congressman could object to. So I used it](https://reader036.vdocuments.mx/reader036/viewer/2022062803/56649f2e5503460f94c47e23/html5/thumbnails/33.jpg)
Knapsack - Completed Table
CS314 Dynamic Programming 33
items / weight 0 1 2 3 4 5 6 7 8
{} 0 0 0 0 0 0 0 0 0{1} [1, 6]
0 6 6 6 6 6 6 6 6{1,2} [2, 11]
0 6 11 17 17 17 17 17 17{1, 2, 3} [4, 1]
0 6 11 17 17 17 17 18 18{1, 2, 3, 4} [4, 12]
0 6 11 17 17 18 23 29 29{1, 2, 3, 4, 5}[6, 19]
0 6 11 17 17 18 23 29 30{1, 2, 3, 4, 5, 6}[7, 12]
0 6 11 17 17 18 23 29 30
![Page 34: Topic 25 Dynamic Programming "Thus, I thought dynamic programming was a good name. It was something not even a Congressman could object to. So I used it](https://reader036.vdocuments.mx/reader036/viewer/2022062803/56649f2e5503460f94c47e23/html5/thumbnails/34.jpg)
Knapsack - Items to Take
CS314 Dynamic Programming 34
items / weight 0 1 2 3 4 5 6 7 8
{} 0 0 0 0 0 0 0 0 0{1} [1, 6]
0 6 6 6 6 6 6 6 6{1,2} [2, 11]
0 6 11 17 17 17 17 17 17{1, 2, 3} [4, 1]
0 6 11 17 17 17 17 17 17{1, 2, 3, 4} [4, 12]
0 6 11 17 17 18 23 29 29{1, 2, 3, 4, 5}[6, 19]
0 6 11 17 17 18 23 29 30{1, 2, 3, 4, 5, 6}[7, 12]
0 6 11 17 17 18 23 29 30
![Page 35: Topic 25 Dynamic Programming "Thus, I thought dynamic programming was a good name. It was something not even a Congressman could object to. So I used it](https://reader036.vdocuments.mx/reader036/viewer/2022062803/56649f2e5503460f94c47e23/html5/thumbnails/35.jpg)
Dynamic Knapsack
CS314 Dynamic Programming 35
![Page 36: Topic 25 Dynamic Programming "Thus, I thought dynamic programming was a good name. It was something not even a Congressman could object to. So I used it](https://reader036.vdocuments.mx/reader036/viewer/2022062803/56649f2e5503460f94c47e23/html5/thumbnails/36.jpg)
Dynamic vs. Recursive Backtracking
CS314 Dynamic Programming 36