350 likes | 369 Views
Dynamic programming. Binhai Zhu Computer Science Department, Montana State University. Idea. You have a large problem to solve, you can divide the problem into smaller sub-problems
E N D
Dynamic programming Binhai Zhu Computer Science Department, Montana State University
Idea • You have a large problem to solve, you can divide the problem into smaller sub-problems (1) Solution of a sub-problem might be interrelated and might be re-used again (this is different from Divide & Conquer. (2) So it is better to store those smaller solutions somewhere.
Idea • You have a large problem to solve, you can divide the problem into smaller sub-problems (1) Solution of a sub-problem might be interrelated and might be re-used again (this is different from Divide & Conquer. (2) So it is better to store those smaller solutions somewhere. (3) Of course, sometimes it might not work.
Example 1. World Series Odds Two teams A and B play to see who is the first to win n games. In world series games n=4. Assumption: A and B are equally competent, each has a 50% chance to win any particular game.
Example 1. World Series Odds P(i,j) --- the probability that A needs i extra games to win and B needs j extra games to win.
Example 1. World Series Odds P(i,j) --- the probability that A needs i extra games to win and B needs j extra games to win. (Assume that we talk about team A is to win/lose.) P(i,j) = 1, if i = 0 and j > 0 P(i,j) = 0, if i >0 and j =0
Example 1. World Series Odds P(i,j) --- the probability that A needs i extra games to win and B needs j extra games to win. (Assume that we talk about team A is to win/lose.) P(i,j) = 1, if i = 0 and j > 0 P(i,j) = 0, if i >0 and j =0 P(i,j) = ( P(i-1,j) + P(i,j-1) ) /2, if i > 0 and j > 0 What is the cost to calculate P(i,j) recursively?
Example 1. World Series Odds P(i,j) = 1, if i = 0 and j > 0 P(i,j) = 0, if i >0 and j =0 P(i,j) = ( P(i-1,j) + P(i,j-1) ) /2, if i > 0 and j > 0 What is the cost to calculate P(i,j) recursively? • Let i+j = n and T(n) be the cost for calculating P(i,j). • T(1) = O(1) = c • T(n) = 2T(n-1) + O(1) = 2T(n-1)+ d, c,d are constants.
Example 1. World Series Odds • Let i+j = n and T(n) be the cost for calculating P[i,j]. • T(1) = O(1) = c • T(n) = 2T(n-1) + O(1) = 2T(n-1)+ d, c,d are constants. T(n) = c2n-1 + d(2n-1-1) ε O(2n) = O(2i+j). So when n is large, this is not an efficient solution.
Example 1. World Series Odds • How to solve this problem with dynamic programming? • (1) Define a Table P[-,-] Odds(i,j) for t = 1 to i+j do P[0,t] = 1 P[t,0] = 0 for k = 1 to t-1 do P[k,t-k]=(P[k-1,t-k]+P[k,t-k-1])/2; endfor endfor return P[i,j] // running time?
Example 1. World Series Odds Odds(i,j) for t = 1 to i+j do P[0,t] = 1 P[t,0] = 0 for k = 1 to t-1 do P[k,t-k]=(P[k-1,t-k]+P[k,t-k-1])/2; endfor endfor return P[i,j] // running time? 4 1 3 1 ↑ j 2 1 1 1 0 0 0 0 0 0 1 2 3 4 i →
Example 1. World Series Odds Odds(i,j) for t = 1 to i+j do P[0,t] = 1 P[t,0] = 0 for k = 1 to t-1 do P[k,t-k]=(P[k-1,t-k]+P[k,t-k-1])/2; endfor endfor return P[i,j] // running time? 4 1 15/16 3 1 7/8 ↑ j 2 1 3/4 1 1 1/2 0 0 0 0 0 0 1 2 3 4 i →
Example 1. World Series Odds Odds(i,j) for t = 1 to i+j do P[0,t] = 1 P[t,0] = 0 for k = 1 to t-1 do P[k,t-k]=(P[k-1,t-k]+P[k,t-k-1])/2; endfor endfor return P[i,j] // running time? 4 1 15/16 13/16 21/32 1/2 3 1 7/8 11/16 1/2 11/32 ↑ j 2 1 3/4 1/2 5/16 3/16 1 1 1/2 1/4 1/8 1/16 0 0 0 0 0 0 1 2 3 4 i →
Example 2. Matrix Chain Multiplication Given n matrices M1,M2,…,Mn, compute the product M1M2M3…Mn, where Mi has dimension di-1 x di (i.e., with di-1 rows and di columns), for i = 1,…,n. Objective?
Example 2. Matrix Chain Multiplication Given n matrices M1,M2,…,Mn, compute the product M1M2M3…Mn, where Mi has dimension di-1 x di (i.e., with di-1 rows and di columns), for i = 1,…,n. Objective? Fact 1. Given matrices A with dimension p x q and B with dimension q x r, multiplication AB takes pqr scalar multiplications (see handouts).
Example 2. Matrix Chain Multiplication Given n matrices M1,M2,…,Mn, compute the product M1M2M3…Mn, where Mi has dimension di-1 x di (i.e., with di-1 rows and di columns), for i = 1,…,n. Objective? Fact 1. Given matrices A with dimension p x q and B with dimension q x r, multiplication AB takes pqr scalar multiplications (see handouts). So the objective is to compute M1M2M3…Mnwith the minimum number of scalar multiplications.
Example 2. Matrix Chain Multiplication Problem: Parenthesize the product M1M2…Mn in a way to minimize the number of scalar multiplications. Example. M1 --- 20 x 10 M2 --- 10 x 50 M3 --- 50 x 5 M4 --- 5 x 30 (M1(M2(M3M4))) --- 28500 multiplications (M1((M2M3)M4) --- 10000 multiplications ((M1M2)(M3M4)) --- 47500 multiplications ((M1(M2M3))M4) --- 6500 multiplications (((M1M2)M3)M4) --- 18000 multiplications
Example 2. Matrix Chain Multiplication Problem: Parenthesize the product M1M2…Mn in a way to minimize the number of scalar multiplications. However, exhaustive search is not efficient. Let P(n) be the number of alternative parenthesizations of n matrices.
Example 2. Matrix Chain Multiplication Problem: Parenthesize the product M1M2…Mn in a way to minimize the number of scalar multiplications. However, exhaustive search is not efficient. Let P(n) be the number of alternative parenthesizations of n matrices. P(n) = 1, if n=1 P(n) = ∑k=1 to n-1 P(k)P(n-k), if n ≥ 2
Example 2. Matrix Chain Multiplication Problem: Parenthesize the product M1M2…Mn in a way to minimize the number of scalar multiplications. However, exhaustive search is not efficient. Let P(n) be the number of alternative parenthesizations of n matrices. P(n) = 1, if n=1 P(n) = ∑k=1 to n-1 P(k)P(n-k), if n ≥ 2 P(n) ≥ 4n-1/(2n2-n). Ex. n = 20, this is > 228.
Example 2. Matrix Chain Multiplication So let’s use dynamic programming. Let mij be the number of multiplications performed using an optimal parenthesization of MiMi+1…Mj-1Mj.
Example 2. Matrix Chain Multiplication So let’s use dynamic programming. Let mij be the number of multiplications performed using an optimal parenthesization of MiMi+1…Mj-1Mj. • mii = 0 • mij = mink{mik + mk+1,j + di-1dkdj, 1 ≤ i ≤ k < j ≤ n}
Example 2. Matrix chain multiplication Now you see another difference between dynamic programming and Divide&Conquer --- dynamic programming is always bottom-up! j 1 2 3 4 1 i 0 10000 3500 0 2500 4000 2 7500 0 3 Pass 2 4 0 Pass 1 mii = 0 mij = mink{mik + mk+1,j + di-1dkdj, 1 ≤ i ≤ k < j ≤ n} Pass 0
Example 2. Matrix chain multiplication j m[1,4] contains the value of the optimal solution. 1 2 3 4 1 i 0 10000 3500 6500 0 2500 4000 2 7500 0 3 4 0 mii = 0 mij = mink{mik + mk+1,j + di-1dkdj, 1 ≤ i ≤ k < j ≤ n}
Example 3. Optimal Polygon Triangulation Given a convex polygon P=< v0,v1,…,vn-1>, a chord vivj divides P into two polygons <vi,vi+1,…,vj> and <vj,vj+1,…,vi> (assume vn=v0 or more generally, vk=vkmod n). v5 v4 v6 v3 v2 v7 v1 v8 v0
Example 3. Optimal Polygon Triangulation Given a convex polygon P=< v0,v1,…,vn-1>, a chord vivj divides P into two polygons <vi,vi+1,…,vj> and <vj,vj+1,…,vi> (assume vn=v0 or more generally, vk=vkmod n). v5 v4 v6 v3 v2 v7 v1 v8 v0
Example 3. Optimal Polygon Triangulation Given a convex polygon P=< v0,v1,…,vn-1>, it can always be divided into n-2 non-overlapping triangles using n-3 chords. v5 v4 v6 v3 v2 v7 v1 v8 v0
Example 3. Optimal Polygon Triangulation Given a convex polygon P=< v0,v1,…,vn-1>, it can always be divided into n-2 non-overlapping triangles using n-3 chords. v5 v4 v6 v3 v2 v7 v1 v8 v0
Example 3. Optimal Polygon Triangulation Given a convex polygon P=< v0,v1,…,vn-1>, there could be a lot of triangulations (in fact, an exponential number of them). v5 v4 v6 v3 v2 v7 v1 v8 v0
Example 3. Optimal Polygon Triangulation Given a convex polygon P=< v0,v1,…,vn-1>, we want to compute an optimal triangulation. v5 v4 v6 v3 Optimal on what? v2 v7 v1 v8 v0
Example 3. Optimal Polygon Triangulation Given a convex polygon P=< v0,v1,…,vn-1 >, we want to compute an optimal triangulation whose weight is minimized. The weight of a triangulation is the weight of all its triangles and the weight of a triangle is the sum of its 3 edge lengths. v5 v4 v6 v3 v2 v7 v1 v8 v0
Example 3. Optimal Polygon Triangulation Given a convex polygon P=< v0,v1,…,vn-1 >, we want to compute an optimal triangulation whose weight is minimized. The weight of a triangulation is the weight of all its triangles and the weight of a triangle is the sum of its 3 edge lengths. v5 v4 The weight of ∆v2v4v6 is |v2v4|+|v4v6|+|v2v6| v6 v3 v2 v7 v1 v8 v0
Example 3. Optimal Polygon Triangulation Dynamic Solution: Let t[i,j] be the weight of an optimal triangulation of polygon <vi-1,vi,…,vj>. vj vk+1 vk vi-1 vi
Example 3. Optimal Polygon Triangulation Dynamic Solution: Let t[i,j] be the weight of an optimal triangulation of polygon <vi-1,vi,…,vj>. vj t[i,j] = mink { t[i,k] + t[k+1,j] + w(∆vi-1vkvj) }, i<j t[i,i] = 0 vk+1 vk vi-1 vi
Example 3. Optimal Polygon Triangulation Dynamic Solution: Let t[i,j] be the weight of an optimal triangulation of polygon <vi-1,vi,…,vj>. vj t[i,j] = mink { t[i,k] + t[k+1,j] + w(∆vi-1vkvj) }, i<j t[i,i] = 0 Almost identical to the matrix chain multiplication problem! vk+1 vk vi-1 vi