Download presentation
Presentation is loading. Please wait.
Published byGilbert Park Modified over 9 years ago
1
Dynamic Programming 又稱 動態規劃 經常被用來解決最佳化問題
2
Dynamic Programming2 Rod cutting problem Given a rod of length N inches and a table of prices p[i] for i=1..N, determine the maximum revenue r[N] obtainable by cutting up the rod and selling the pieces. Length i 12345678910 Price p[i] 15891017 202430 Eg : N=7, 7=3+4 produces revenue 17 7=1+6=2+2+3 produces revenue 18.
3
Dynamic Programming3 Rod cutting problem If an optimal solution cuts the rod into k pieces, then N=i 1 +i 2 +…+i k r[N]=p[i 1 ]+…+p[i k ] ----total revenue r[N] = max i=1..n { p[i]+r[N-i]}, r[0]=0. CUT-ROD(p, n) 1.if n==0 return 0; 2.q=-99999999; 3.for i=1 to n 4. q= max(q, p[i]+CUT-ROD(p, n - i)); 5. return q;
4
Dynamic Programming4 Rod cutting problem Memoized-CUT-ROD(p, n) 1.let r[0,..n] be a new array 2.for i=0 to n 3. r[i]= -9999999; 4. return Memoized-CUT-ROD-AUX(p, n, r) Memoized-CUT-ROD-AUX(p, n, r) 1.if r[n]>=0 return r[n] ; 2.if n==0 q=0; 3.else q=-9999999; 4. for i=0 to n 5. q = max(q, p[i]+Memoized-CUT-ROD-AUX(p, n-i, r)); 6.r[n] = q; 7. return q; Time =O(n 2 ), why?
5
Dynamic Programming5 BOTTOM-UP-CUT-ROD(p, n) 1.let r[0,..n] be a new array 2.r[0]=0; 3.for j=1 to n 4. q=-9999999; 5. for i= 1 to j 6. q=max(q, p[i] + r[j-i]); 7. r[j]=q; 8. return r[n]; PRINT-CUT-ROD-SOLUTION(p, n) 1.(r, s) = EXTENDED-BOTTOM-UP-CUT-ROD(p, n); 2.while n > 0 3. print s[n]; n=n - s[n]; EXTENDED-BOTTOM-UP-CUT-ROD(p, n) 1.let r[0,..n] and s[0..n] be a new arrays 2.r[0]=0; 3.for j=1 to n 4. q=-9999999; 5. for i= 1 to j 6. if q < p[i] + r[j-i]) 7. q = p[i] + r[j-i]); 8. s[j]=i; 9. r[j]=q; 10. return r and s; Length i 12345678910 Price p[i] 15891017 202430 r[i] 15810131718222530 s[i] 12322612310
6
Dynamic Programming6 Crazy eights puzzle Given a sequence of cards c[0], c[1],…,c[n-1], e.g. 7H, 6H, 7D, 3D, 8C, JS,.. Find the longest subsequence c[i 1 ], c[i 2 ],…, c[i k ], (i 1 < i 2 <…< i k ), where c[i j ] and c[i j+1 ] have the same suit or rank or one has rank 8.-- match Let T[i] be the length of the longest subsequence starting at c[i]. T[i]= 1 + max {T[j]: c[i] and c[j] have a match and j >n } Optimal solution: max {T[i]}.
7
Dynamic Programming7 Matrix-chain multiplication Given a sequence A 1, A 2, …, A n of n matrices to be multiplied, where A i has dimension p i 1 p i, fully parenthesize the product A 1 A 2 …A n such that the number of scalar multiplications is minimized. Eg : A 1 A 2 A 3 A 4 p i :13589 334 (A 1 (A 2 (A 3 A 4 ))), (A 1 ((A 2 A 3 )A 4 )), ((A 1 A 2 )( A 3 A 4 )), ((A 1 (A 2 A 3 ))A 4 ), ((( A 1 A 2 )A 3 )A 4 ).
8
Dynamic Programming8 Matrix-chain multiplication (A 1 (A 2 (A 3 A 4 ))), costs = 26418 (A 1 ((A 2 A 3 )A 4 )), costs = 4055 ((A 1 A 2 )( A 3 A 4 )), costs = 54201 ((A 1 (A 2 A 3 ))A 4 ), costs = 2856 ((( A 1 A 2 )A 3 )A 4 ), costs = 10582 A 1 A 2 A 3 A 4 13589 334 (A 1 (A 2 (A 3 A 4 ))) A 1 (A 2 A 3 A 4 ) A 2 (A 3 A 4 ) A 3 A 4 cost = 13*5*34 + 5*89*34 + 89*3*34 = 2210 + 15130 + 9078 = 26418
9
Dynamic Programming9 Catalan Number For any n, # ways to fully parenthesize the product of a chain of n+1 matrices = # binary trees with n nodes. = # permutations generated from 1 2 … n through a stack. = # n pairs of fully matched parentheses. = n-th Catalan Number = C(2n, n)/(n +1) = (4 n /n 3/2 )
10
Dynamic Programming10 Multiplication tree (A 1 (A 2 (A 3 A 4 ))) (A 1 ((A 2 A 3 )A 4 )) ((A 1 A 2 )( A 3 A 4 )) ((A 1 (A 2 A 3 ))A 4 ) ((( A 1 A 2 )A 3 )A 4 ) A 1 A 2 A 3 A 4 2 1 3 A1 A2 A3 A4 123
11
Dynamic Programming11 Matrix-chain multiplication k T : If T is an optimal solution for A 1, A 2, …, A n 1, …, k k+1, …, n T1T1 T2T2 then, T 1 (resp. T 2 ) is an optimal solution for A 1, A 2, …, A k (resp. A k+1, A k+2, …, A n ).
12
Dynamic Programming12 Matrix-chain multiplication Let m[i, j] be the minmum number of scalar multiplications needed to compute the product A i …A j, for 1 i j n. If the optimal solution splits the product A i …A j = (A i …A k ) (A k+1 …A j ), for some k, i k < j, then m[i, j] = m[i, k] + m[k+1, j] + p i 1 p k p j. Hence, we have : m[i, j] = min i k < j {m[i, k] + m[k+1, j] + p i 1 p k p j } = 0 if i = j
13
Dynamic Programming13 MATRIX-CHAIN-ORDER(P) 1. n = p.length -1; 2. let m[1..n, 1..n] and s[1..n-1, 2..n] be new tables; 3. for i= 1 to n m[i, i]=0; 4. for l= 2 to n 5. { for i= 1 to n – l + 1 6. { j=i + l- 1; 7. m[i, j]= ; 8. for k= i to j-1 9. { q = m[i, k] + m[k+1, j]+ P i-1 P k P j 10. if q<m[i, j] 11. { m[i, j] = q ; s[i, j] = k ;} 12. } } } 13. return m and s Time = O(n 3 )
14
Dynamic Programming14 l =3 m[3,5] = min m[3,4]+m[5,5] + 15*10*20 =750 + 0 + 3000 = 3750 m[3,3]+m[4,5] + 15*5*20 =0 + 1000 + 1500 = 2500 l = 2 10*20*25 =5000 35*15*5= 2625
15
Dynamic Programming15 Matrix-chain multiplication Consider an example with sequence of dimensions m[i, j] = min i k < j {m[i, k] + m[k+1, j] + p i 1 p k p j } 1 2 3 4 5 6 1 03064132226348 2 024 72156268 3 0 72198366 4 0168392 5 0336 6 0
16
Dynamic Programming16 §Constructing an optimal solution l Each entry s[i, j]=k records that the optimal parenthesization of A i A i+1 …A j splits the product between A k and A k+1 l A i..j (A i..s[i..j] )(A s[i..j]+1..j )
17
Dynamic Programming17 Matrix-chain multiplication m[i, j] = min i k < j {m[i, k] + m[k+1, j] + p i 1 p k p j } s[i, j] = a value of k that gives the minimum s 1 23456 1 11111 2 2345 3 345 4 45 5 [1,6] [2,6] A1A1 [2,5] A6A6 [2,4] A5A5 A4A4 [2,3] A2A2 A3A3 A 1 (((( A 2 A 3 )A 4 )A 5 ) A 6 )
18
Dynamic Programming18 Matrix-chain multiplication To fill the entry m[i, j], it needs (j i) operations. Hence the execution time of the algorithm is m[i, j] =min i k < j {m[i, k] + m[k+1, j] + p i 1 p k p j } Time: (n 3 ) Space: (n 2 )
19
Dynamic Programming19 MEMOIZED-MATRIX-CHAIN(P) 1. n = p.length -1; 2. let m[1..n, 1..n] be a new table; 3. for i= 1 to n 4. for j= i to n 5. m[i, j]= ; 6. return LOOKUP-CHAIN(m, p, 1, n) Lookup-Chain(m, P, i, j) 1. if m[i, j] < return m[i, j]; 2. if i==j m[i, j] = 0 3. else for k=i to j-1 4. { q= Lookup-Chain(m, P, i, k) + Lookup-Chain(m, P, k+1, j) + P i-1 P k P j ; 5. if q < m[i, j] m[i, j] = q;} 6. return m[i, j] ; } time: O(n 3 )space: (n 2 )
20
Dynamic Programming20 Design DP algorithm 1.Characterize the structure of an optimal solution. 2.Derive a recursive formula for computing the values of optimal solutions. 3.Compute the value of an optimal solution in a bottom-up fashion (top-down is also applicable). 4.Construct an optimal solution in a top-down fashion.
21
Dynamic Programming21 Elements of Dynamic Programming Optimal substructure (a problem exhibits optimal substructure if an optimal solution to the problem contains within it optimal solutions to subproblems) Overlapping subproblems Reconstructing an optimal solution Memoization
22
Dynamic Programming22 §Given a directed graph G=(V, E) and vertices u, v V l Unweighted shortest path: Find a path from u to v consisting the fewest edges. Such a path must be simple (no cycle). Optimal substructure? YES. l Unweighted longest simple path: Find a simple path from u to v consisting the most edges. Optimal substructure? NO. q r t is longest but q r is not the longest between q and r. u w v q st r
23
Dynamic Programming23 Printing neatly Given a sequence of n words of lengths l[1], l[2],…,l[n], measured in characters, want to print it neatly on a number of lines, of which each has at most M characters.. If a line has words i through j, i<=j, and there is exactly one space between words, the cube of number of extra space characters at the end of the line is: B[i, j] =(M – j + i - (l[i]+l[i+1]+…+l[j])) 3. Want to minimize the sum over all lines (except the last line) of the cubes of the number of extra space at the ends of lines. Let c[i] denote the minimum cost for printing words i through n. c[i]= min i<j<=i+p (c[j+1] + B[i,j]), where p is the maximum number of words starting from i-th word that can be fitted into a line.
24
Dynamic Programming24 Longest Common Subsequence Given two sequences X = and Y = find a maximum-length common subsequence of X and Y. Eg 1 : Input: ABCBDAB BDCABA C.S.’s: AB, ABA, BCB, BCAB, BCBA … Longest: BCAB, BCBA, … Length = 4 A B C B D A B B D C A B A Eg 2 : vintner writers
25
Dynamic Programming25 Step 1: Characterize longest common subsequence Let Z= be a LCS of X = and Y =. 1.If x m = y n, then z k = x m = y n and is a LCS of and. 2.If z k x m, then Z is a LCS of and Y. 3.If z k y n, then Z is a LCS of X and.
26
Dynamic Programming26 Step 2: A recursive solution Let C[i, j] be the length of an LCS of the prefixes X i = and Y j =, for 1 i m and 1 j n. We have : C[i, j] = 0 if i = 0, or j = 0 = C[i 1, j 1] + 1 if i, j > 0 and x i = y j = max(C[i, j 1], C[i 1, j]) if i, j > 0 and x i y j
27
Dynamic Programming27 Step 3: Computing the length of an LCS LCS-Length(X,Y) 1. m = X.length; 2. n = Y.length; 3. let b[1..m, 1..n] and c[0..m, 0..n] be new tables; 4. for i= 1 to m c[i, 0] = 0; 5. for j= 1 to n do c[0, j] = 0; 6. for i= 1 to m do 7. for j= 1 to n do 8. { if x i == y j 9. { c[i,j] = c[i-1,j-1]+1; b[i,j] = “ ”; } 10. else if c[i-1, j] c[i, j-1] 11. { c[i, j] = c[i-1, j]; b[i, j] = “ ”; } 12. else { c[i, j] = c[i, j-1]; b[i, j] = “ ”; } 13. } 14. return b, c
28
Dynamic Programming28 Step 4: Constructing an LCS Print-LCS(b, X, i, j) 1. if i==0 or j==0 return; 2. if b[i,j] == “ ”; 3. { Print-LCS(b, X, i-1, j-1); 4. print x i ; 5. } 6. else if b[i,j] == “ ” 7. Print-LCS(b, X, i-1, j); 8. else Print-LCS(b, X, i, j-1);
29
Dynamic Programming29 Longest Common Subsequence C[i, j] = 0 if i = 0, or j = 0 = C[i 1, j 1] + 1 if i, j > 0 and x i = y j = max(C[i, j 1], C[i 1, j]) if i, j > 0 and x i y j Time: (mn) Space: (mn) A BCBDAB B 011 1111 D 0111222 C 01 22222 A1 1 22233 B12 2 3 334 A1223344 LCS: BCBA
30
Dynamic Programming30 Find a triangulation s.t. the sum of the weights of the triangles in the triangulation is minimized. Optimal Polygon Triangulation v0v0 v1v1 v2v2 v3v3 v4v4 v5v5 v6v6
31
Dynamic Programming31 Optimal Polygon Triangulation If T is an optimal solution for v 0, v 1, …, v n v0v0 vkvk vnvn T1T1 T2T2 then, T 1 (resp. T 2 ) is an optimal solution for v 0, v 1, …, v k (resp. v k, v k+1, …, v n ), 1 k < n.
32
Dynamic Programming32 Optimal Polygon Triangulation Let t[i, j] be the weight of an optimal triangulation of the polygon v i 1, v i,…, v j , for 1 i < j n. If the triangulation splits the polygon into v i 1, v i,…, v k and v k, v k+1, …,v j for some k, then t[i, j] = t[i, k] + t[k+1, j] + w( v i 1 v k v j ). Hence, we have : t[i, j] = min i k < j {t[i, k] + t[k+1, j] + w( v i 1 v k v j ) } = 0 if i = j
33
Dynamic Programming33 Optimal binary search trees: §k=(k 1,k 2,…,k n ) of n distinct keys in sorted order (k 1 <k 2 <…< k n ) §Each key k i has a probability p i that a search will be for k i §Some searches may fail, so we also have n+1 dummy keys: d 0,d 1,…,d n, where d 0 <k 1, k n <d n and k i <d i <k i+1 for i=1,…,n-1. §For each dummy key d i, we have a probability q i that a search will correspond to d i.
34
Dynamic Programming34 Optimal binary search trees: i012345 pipi 0.150.10.050.10.2 qiqi 0.050.10.05 0.1 Expected search cost: 2.8 k2k2 k1k1 k4k4 k3k3 k5k5 d0d0 d1d1 d2d2 d3d3 d4d4 d5d5
35
Dynamic Programming35 §Goal: Given a set of probabilities, want to construct a binary search tree whose expected search cost is the smallest. l Step 1: The structure of an optimal BST. Consider any subtree of a BST, which must contain contiguous keys k i,…,k j for some 1 i j n and must also have as its leaves the dummy keys d i-1,…,d j. Optimal-BST has the property of optimal substructure. T: T’
36
Dynamic Programming36 Step 2: A recursive solution l Find an optimal BST for the keys k i,…,k j, where j i-1, i 1, j n. (When j=i-1, there is no actual key, but d i-1 ) l Define e[i,j] as the expected cost of searching an optimal BST containing k i,…,k j. Want to find e[1,n]. For dummy key d i-1, e[i,i-1]=q i-1. l For j i, need to select a root k r among k i,…,k j. l For a subtree with keys k i,…,k j, denote krkr k i,…,k r-1 k r+1,…,k j
37
Dynamic Programming37 l e[i,j]=p r +(e[i,r-1]+w(i,r-1))+(e[r+1,j]+w(r+1,j)) =e[i,r-1]+e[r+1,j]+w(i,j) l Thus e[i,j]= l Step 3: Computing the expected search cost of an optimal BST l Use a table w[1..n+1,0..n] for w(i,j)’s. w[i,i-1]=q i-1 w[i,j]=w[i,j-1]+p j +q j
38
Dynamic Programming38 OPTIMAL-BST(p,q,n) 1. let e[1..n+1, 0..n], w[1..n+1, 0..n] and root[1..n, 1..n] be new tables; 2. for i=1 to n+1 3. e[i,i-1]=q i-1 ; 4. w[i,i-1]=q i-1 ; 5. for ℓ=1 to n 6. for i=1 to n-ℓ+1 7. { j=i+ℓ-1; 8. e[i,j]= ; 9. w[i,j]=w[i,j-1]+p j +q j ; 10. for r = i to j 11. { t=e[i, r-1]+e[r+1, j] + w[i, j]; 12. if t < e[i,j] 13. e[i,j]=t; 14. root[i,j] = r;}} 15. return e and root (n 3 )
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.