dynamic programming. many problem can be solved by d&c – (in fact, d&c is a very powerful...
TRANSCRIPT
![Page 1: Dynamic Programming. Many problem can be solved by D&C – (in fact, D&C is a very powerful approach if you generalize it since MOST problems can be solved](https://reader036.vdocuments.us/reader036/viewer/2022070413/5697bfad1a28abf838c9bcd7/html5/thumbnails/1.jpg)
Dynamic Programming
![Page 2: Dynamic Programming. Many problem can be solved by D&C – (in fact, D&C is a very powerful approach if you generalize it since MOST problems can be solved](https://reader036.vdocuments.us/reader036/viewer/2022070413/5697bfad1a28abf838c9bcd7/html5/thumbnails/2.jpg)
Dynamic Programming
• Many problem can be solved by D&C– (in fact, D&C is a very powerful approach if you
generalize it since MOST problems can be solved by breaking it into smaller parts)
• However, some might show special behavior– Optimal sub-structures– Overlapping sub-problems
![Page 3: Dynamic Programming. Many problem can be solved by D&C – (in fact, D&C is a very powerful approach if you generalize it since MOST problems can be solved](https://reader036.vdocuments.us/reader036/viewer/2022070413/5697bfad1a28abf838c9bcd7/html5/thumbnails/3.jpg)
Dynamic Programming
• Optimal sub structure– “the best” of sub-solutions constitute “the best”
solution• E.g., MCS, Closest Pair
• Overlapping sub-problem– Some instances of sub-problem occur several
times
![Page 4: Dynamic Programming. Many problem can be solved by D&C – (in fact, D&C is a very powerful approach if you generalize it since MOST problems can be solved](https://reader036.vdocuments.us/reader036/viewer/2022070413/5697bfad1a28abf838c9bcd7/html5/thumbnails/4.jpg)
Optimal sub structure
• The solution to the sub-problems directly constitute the solution of the original problem– Finding the best solutions for sub-problems
helps solving the original problem
![Page 5: Dynamic Programming. Many problem can be solved by D&C – (in fact, D&C is a very powerful approach if you generalize it since MOST problems can be solved](https://reader036.vdocuments.us/reader036/viewer/2022070413/5697bfad1a28abf838c9bcd7/html5/thumbnails/5.jpg)
Overlapping Sub-problem
• When a sub-problem of some higher level problem is the same instance as a sub-problem of other higher level
![Page 6: Dynamic Programming. Many problem can be solved by D&C – (in fact, D&C is a very powerful approach if you generalize it since MOST problems can be solved](https://reader036.vdocuments.us/reader036/viewer/2022070413/5697bfad1a28abf838c9bcd7/html5/thumbnails/6.jpg)
Example Fibonacci
• Problem: compute F(N), the Fibonacci function of N
• Def: F(N) = F(N-1) + F(N-2)• F(1) = 1• F(2) = 1
![Page 7: Dynamic Programming. Many problem can be solved by D&C – (in fact, D&C is a very powerful approach if you generalize it since MOST problems can be solved](https://reader036.vdocuments.us/reader036/viewer/2022070413/5697bfad1a28abf838c9bcd7/html5/thumbnails/7.jpg)
Recursion Tree
F(5) F(4)
F(3) F(2)
F(1)
F(3) F(2)
F(1)F(2)
![Page 8: Dynamic Programming. Many problem can be solved by D&C – (in fact, D&C is a very powerful approach if you generalize it since MOST problems can be solved](https://reader036.vdocuments.us/reader036/viewer/2022070413/5697bfad1a28abf838c9bcd7/html5/thumbnails/8.jpg)
Example• F(1) = 1• F(2) = 1• F(3) = 2• F(4) = 3• F(5) = 5• F(6) = 8• F(7) = 13• F(8) = 21• F(9) = 34• F(10) = 55
![Page 9: Dynamic Programming. Many problem can be solved by D&C – (in fact, D&C is a very powerful approach if you generalize it since MOST problems can be solved](https://reader036.vdocuments.us/reader036/viewer/2022070413/5697bfad1a28abf838c9bcd7/html5/thumbnails/9.jpg)
Example• F(1) = 1• F(2) = 1• F(3) = F(2) + F(1)• F(4) = F(3) + F(2)• F(5) = F(4) + F(3)• F(6) = F(5) + F(4)• F(7) = F(6) + F(5)• F(8) = F(7) + F(6)• F(9) = F(8) + F(7)• F(10) = F(9) + F(8)
![Page 10: Dynamic Programming. Many problem can be solved by D&C – (in fact, D&C is a very powerful approach if you generalize it since MOST problems can be solved](https://reader036.vdocuments.us/reader036/viewer/2022070413/5697bfad1a28abf838c9bcd7/html5/thumbnails/10.jpg)
Example• F(1) = 1• F(2) = 1• F(3) = F(2) + F(1)• F(4) = F(3) + F(2)• F(5) = F(4) + F(3)• F(6) = F(5) + F(4)• F(7) = F(6) + F(5)• F(8) = F(7) + F(6)• F(9) = F(8) + F(7)• F(10) = F(9) + F(8)
![Page 11: Dynamic Programming. Many problem can be solved by D&C – (in fact, D&C is a very powerful approach if you generalize it since MOST problems can be solved](https://reader036.vdocuments.us/reader036/viewer/2022070413/5697bfad1a28abf838c9bcd7/html5/thumbnails/11.jpg)
Key Idea
• If there are “overlapping” sub-problem,– Why should we do it more than once?
• Each sub-problem should be solved only once!!!
![Page 12: Dynamic Programming. Many problem can be solved by D&C – (in fact, D&C is a very powerful approach if you generalize it since MOST problems can be solved](https://reader036.vdocuments.us/reader036/viewer/2022070413/5697bfad1a28abf838c9bcd7/html5/thumbnails/12.jpg)
Dynamic Programming Method
• Top-down approach– Memoization– Remember what have been done, if the sub-
problem is encountered again, use the processed result
• Bottom-up approach– Use some kind of “table” to build up the result
from the sub-problem
![Page 13: Dynamic Programming. Many problem can be solved by D&C – (in fact, D&C is a very powerful approach if you generalize it since MOST problems can be solved](https://reader036.vdocuments.us/reader036/viewer/2022070413/5697bfad1a28abf838c9bcd7/html5/thumbnails/13.jpg)
Fibonacci Example: recursive
int fibo(int n) { if (n > 2) { return fibo(n-1) + fibo(n-2); } else return 1;}
![Page 14: Dynamic Programming. Many problem can be solved by D&C – (in fact, D&C is a very powerful approach if you generalize it since MOST problems can be solved](https://reader036.vdocuments.us/reader036/viewer/2022070413/5697bfad1a28abf838c9bcd7/html5/thumbnails/14.jpg)
Fibonacci Example: Memoization
int fibo_memo(int n) { if (n > 2) { if (stored[n] == 0) { int value = fibo_memo(n-1) + fibo_memo(n-2); stored[n] = value; } return stored[n]; } else return 1;}
Stored is an array of size n, initialized as 0
![Page 15: Dynamic Programming. Many problem can be solved by D&C – (in fact, D&C is a very powerful approach if you generalize it since MOST problems can be solved](https://reader036.vdocuments.us/reader036/viewer/2022070413/5697bfad1a28abf838c9bcd7/html5/thumbnails/15.jpg)
Memoization
• Remember the solution for the required sub-problem– it’s caching
• Need a data structure to store the result– Must know how to identify each sub-problem
![Page 16: Dynamic Programming. Many problem can be solved by D&C – (in fact, D&C is a very powerful approach if you generalize it since MOST problems can be solved](https://reader036.vdocuments.us/reader036/viewer/2022070413/5697bfad1a28abf838c9bcd7/html5/thumbnails/16.jpg)
Memoization : Defining Subproblem
• The subproblem must be uniquely identified– So that, when we need to compute a sub-
problem, we can lookup in the data structure to see whether the problem is already solved
– So that, when we solve a subproblem, we can store the solution in the data structure
![Page 17: Dynamic Programming. Many problem can be solved by D&C – (in fact, D&C is a very powerful approach if you generalize it since MOST problems can be solved](https://reader036.vdocuments.us/reader036/viewer/2022070413/5697bfad1a28abf838c9bcd7/html5/thumbnails/17.jpg)
Code Example : D&C
ResultType DandC(Problem p) { if (p is trivial) { solve p directly return the result } else { divide p into p1,p2,...,pn
for (i = 1 to n) ri = DandC(pi) combine r1,r2,...,rn into r return r }}
Trivial Case
Divide
Recursive
Combine
![Page 18: Dynamic Programming. Many problem can be solved by D&C – (in fact, D&C is a very powerful approach if you generalize it since MOST problems can be solved](https://reader036.vdocuments.us/reader036/viewer/2022070413/5697bfad1a28abf838c9bcd7/html5/thumbnails/18.jpg)
Code Example : Memoization
ResultType DandC(Problem p) { if (p is trivial) { solve p directly return the result } else { if p is solved return cache.lookup(p); divide p into p1,p2,...,pn
for (i = 1 to n) ri = DandC(pi) combine r1,r2,...,rn into r cache.save(p,r); return r }}
Look up
save
![Page 19: Dynamic Programming. Many problem can be solved by D&C – (in fact, D&C is a very powerful approach if you generalize it since MOST problems can be solved](https://reader036.vdocuments.us/reader036/viewer/2022070413/5697bfad1a28abf838c9bcd7/html5/thumbnails/19.jpg)
Memoization : Data Structure
• Usually, we use an array or multi-dimension array
• For example, the Fibonacci
![Page 20: Dynamic Programming. Many problem can be solved by D&C – (in fact, D&C is a very powerful approach if you generalize it since MOST problems can be solved](https://reader036.vdocuments.us/reader036/viewer/2022070413/5697bfad1a28abf838c9bcd7/html5/thumbnails/20.jpg)
Fibonacci Example: Bottom up
• From the recurrent, we know that– F(n) needs to know F(n-1) and F(n-2)– i.e., if we know F(n-1) and F(n-2)• Then we know F(N)
• Bottom Up Consider the recurrent and fill the array from the initial condition to the point we need
![Page 21: Dynamic Programming. Many problem can be solved by D&C – (in fact, D&C is a very powerful approach if you generalize it since MOST problems can be solved](https://reader036.vdocuments.us/reader036/viewer/2022070413/5697bfad1a28abf838c9bcd7/html5/thumbnails/21.jpg)
Fibonacci Example: Bottom up
• Initial Condition:– F(1) = 1, F(2) = 2– i.e., stored[1] = 1; stored[2] = 1;
• From the recurrent– stored[3] = stored[2] + stored[1]– stored[4] = stored[3] + stored[2]– …
![Page 22: Dynamic Programming. Many problem can be solved by D&C – (in fact, D&C is a very powerful approach if you generalize it since MOST problems can be solved](https://reader036.vdocuments.us/reader036/viewer/2022070413/5697bfad1a28abf838c9bcd7/html5/thumbnails/22.jpg)
Fibonacci Example: Bottom up
1 1
1 1 2
1 1 2 3
1 1 2 3 5
Step 1
Step 2
Step 3
Step 4
![Page 23: Dynamic Programming. Many problem can be solved by D&C – (in fact, D&C is a very powerful approach if you generalize it since MOST problems can be solved](https://reader036.vdocuments.us/reader036/viewer/2022070413/5697bfad1a28abf838c9bcd7/html5/thumbnails/23.jpg)
Fibonacci Example: Bottom up
int fibo_buttom_up(int n) { value[1] = 1; value[2] = 1; for (int i = 3;i <= n;++i) { value[i] = value[i-1] + value[i-2]; } return value[n];}
![Page 24: Dynamic Programming. Many problem can be solved by D&C – (in fact, D&C is a very powerful approach if you generalize it since MOST problems can be solved](https://reader036.vdocuments.us/reader036/viewer/2022070413/5697bfad1a28abf838c9bcd7/html5/thumbnails/24.jpg)
Approach Preference
• Bottom up is usually better– But it is harder to figure out
• Memoization is easy– Directly from the recursive
![Page 25: Dynamic Programming. Many problem can be solved by D&C – (in fact, D&C is a very powerful approach if you generalize it since MOST problems can be solved](https://reader036.vdocuments.us/reader036/viewer/2022070413/5697bfad1a28abf838c9bcd7/html5/thumbnails/25.jpg)
Binomial Coefficient
• Cn,r =how to choose r things from n things– We have a closed form solution• Cn,r = n!/ ( r!*(n-r)! )
• Cn,r = Cn-1,r + Cn-1,r-1
• = 1 ; r = 0• = 1 ; r = n– What is the subproblem?– Do we have overlapping subproblem?
![Page 26: Dynamic Programming. Many problem can be solved by D&C – (in fact, D&C is a very powerful approach if you generalize it since MOST problems can be solved](https://reader036.vdocuments.us/reader036/viewer/2022070413/5697bfad1a28abf838c9bcd7/html5/thumbnails/26.jpg)
Binomial Coefficient: sub-problem
• Described by two values (n,r)
• Data structure should be 2D array
![Page 27: Dynamic Programming. Many problem can be solved by D&C – (in fact, D&C is a very powerful approach if you generalize it since MOST problems can be solved](https://reader036.vdocuments.us/reader036/viewer/2022070413/5697bfad1a28abf838c9bcd7/html5/thumbnails/27.jpg)
Binomial Coefficient : Code
• Can you write the recursive version of the binomial coefficient?
• Can you change it into the memoization version?
![Page 28: Dynamic Programming. Many problem can be solved by D&C – (in fact, D&C is a very powerful approach if you generalize it since MOST problems can be solved](https://reader036.vdocuments.us/reader036/viewer/2022070413/5697bfad1a28abf838c9bcd7/html5/thumbnails/28.jpg)
Binomial Coefficient : Code
int bino_naive(int n,int r) {if (r == n) return 1;if (r == 0) return 1;
int result = bino_naive(n-1,r) + bino_naive(n-1,r-1);
return result;}
![Page 29: Dynamic Programming. Many problem can be solved by D&C – (in fact, D&C is a very powerful approach if you generalize it since MOST problems can be solved](https://reader036.vdocuments.us/reader036/viewer/2022070413/5697bfad1a28abf838c9bcd7/html5/thumbnails/29.jpg)
Binomial Coefficient : Memoization
int bino_memoize(int n,int r) {if (r == n) return 1;if (r == 0) return 1;
if (storage[n][r] != -1)return storage[n][r];
int result = bino_memoize(n-1,r) + bino_memoize(n-1,r-1);
storage[n][r] = result;
return result;}
![Page 30: Dynamic Programming. Many problem can be solved by D&C – (in fact, D&C is a very powerful approach if you generalize it since MOST problems can be solved](https://reader036.vdocuments.us/reader036/viewer/2022070413/5697bfad1a28abf838c9bcd7/html5/thumbnails/30.jpg)
Binomial Coefficient: bottom up
• Pascal Triangle
C4,2
C4,1
C5,2