Dynamic Programming • General algorithmic technique • Can be used when the problem have “optimal substructure”: solution can be constructed from optimal solutions to subproblems. use dynamic programming when subproblems overlap. Dynamic Programming • Today and next week: 4 examples • Rod cutting • Longest common subsequence CLRS chapter 15.0, 15.1, 15.4. • All pairs shortest path (next week) • Sequence alignment (next week) Rod cutting Rod cutting: Recursive solution • Rod cutting problem: Cut a steel rod into pieces in order to maximize revenue. Cuts are free and each length has a revenue/price. rn = ( 0 maxi=1...n (pi + rn i ) if n = 0 otherwise 4 X2 3 X1 2 time O(2^n) 1 XX0 X0 X0 X1 X1 X0 X0 X0 X0 0 Avoid recomputation? Rod cutting: Recursion + memoization Rod cutting: bottom-up 4 3 2 1 0 • Running time Ɵ(n2): • running time Ɵ(n2). • each subproblem solved once, • Space Ɵ(n) • time to solve a subproblem of size j: for loop iterates j times. • Space: Ɵ(n) Rod cutting: reconstruction solution 11 22 33 44 55 66 77 88 rr 11 55 88 10 10 13 13 17 17 18 18 22 22 s 1 2 3 2 2 6 1 2 Running time (print): Ɵ(n) ? Total running time: Ɵ(n ? 2) Space: Ɵ(n) ? Longest common subsequence Longest common subsequence Longest common subsequence • subsequence: • subsequence: P I N E S P R I N G T I M E P I N E S P R I N G T I M E Longest common subsequence Longest common subsequence • subsequence: • subsequence: P I N E S P R I N G T I M E • Longest common subsequence P I N E S P R I N G T I M E • Longest common subsequence B A N A N A S B A N A N A S S A N D A L S S A N D A L S Longest common subsequence Longest common subsequence • Subproblem property: • subproblem property: Xi-1 Yj-1 xi yj Xi-1 Yj-1 8 > <0 LCS(Xi , Yj ) = LCS(Xi 1 , Yj 1 ) + 1 > : max(LCS(Xi , Yj 1 ), LCS(Xi 1 , Yj )) if i = 0 or j = 0 if xi = yj if xi 6= yj xi yj 8 > <0 LCS(Xi , Yj ) = LCS(Xi 1 , Yj 1 ) + 1 > : max(LCS(Xi , Yj 1 ), LCS(Xi B A N A N A S B A N A N A S S S A A N Depends on ? N D A D A LCS(X5 , Y4 ) L L S S LCS(X5 , Y4 ) Longest common subsequence Longest common subsequence • subproblem property: • subproblem property: Xi-1 Yj-1 xi yj 8 > <0 LCS(Xi , Yj ) = LCS(Xi 1 , Yj 1 ) + 1 > : max(LCS(Xi , Yj 1 ), LCS(Xi 1 , Yj )) if i = 0 or j = 0 if xi = yj if xi 6= yj Depends on S A N N LCS(X5 , Y4 ) xi yj 8 > <0 LCS(Xi , Yj ) = LCS(Xi 1 , Yj 1 ) + 1 > : max(LCS(Xi , Yj 1 ), LCS(Xi B A N A N A S A D A Xi-1 Yj-1 B A N A N A S S 1 , Yj )) if i = 0 or j = 0 if xi = yj if xi 6= yj D A L L S S 1 , Yj )) if i = 0 or j = 0 if xi = yj if xi 6= yj Longest common subsequence Longest common subsequence • subproblem property: • subproblem property: Xi-1 Yj-1 xi yj Yj-1 8 > <0 LCS(Xi , Yj ) = LCS(Xi 1 , Yj 1 ) + 1 > : max(LCS(Xi , Yj 1 ), LCS(Xi S Xi-1 1 , Yj )) if i = 0 or j = 0 if xi = yj if xi 6= yj B A N A N A S 0 xi yj 8 > <0 LCS(Xi , Yj ) = LCS(Xi 1 , Yj 1 ) + 1 > : max(LCS(Xi , Yj 1 ), LCS(Xi S A A N N D A D A L L S S B A N A N A S 0 Longest common subsequence Longest common subsequence • subproblem property: • subproblem property: Xi-1 Yj-1 xi yj 8 > <0 LCS(Xi , Yj ) = LCS(Xi 1 , Yj 1 ) + 1 > : max(LCS(Xi , Yj 1 ), LCS(Xi 1 , Yj )) 0 0 xi yj 8 > <0 LCS(Xi , Yj ) = LCS(Xi 1 , Yj 1 ) + 1 > : max(LCS(Xi , Yj 1 ), LCS(Xi B A N A N A S S Xi-1 Yj-1 if i = 0 or j = 0 if xi = yj if xi 6= yj B A N A N A S S A A N N D A D A L L S S 1 , Yj )) if i = 0 or j = 0 if xi = yj if xi 6= yj 0 0 0 0 0 0 1 , Yj )) if i = 0 or j = 0 if xi = yj if xi 6= yj Longest common subsequence Longest common subsequence • subproblem property: • subproblem property: Xi-1 Yj-1 xi yj Yj-1 8 > <0 LCS(Xi , Yj ) = LCS(Xi 1 , Yj 1 ) + 1 > : max(LCS(Xi , Yj 1 ), LCS(Xi S Xi-1 1 , Yj )) if i = 0 or j = 0 if xi = yj if xi 6= yj B A N A N A S 0 0 0 0 0 0 1 xi yj 8 > <0 LCS(Xi , Yj ) = LCS(Xi 1 , Yj 1 ) + 1 > : max(LCS(Xi , Yj 1 ), LCS(Xi S A A N N D A D A L L S S B A N A N A S 0 0 0 0 0 0 1 Longest common subsequence Longest common subsequence • subproblem property: • subproblem property: Xi-1 Yj-1 xi yj 8 > <0 LCS(Xi , Yj ) = LCS(Xi 1 , Yj 1 ) + 1 > : max(LCS(Xi , Yj 1 ), LCS(Xi Xi-1 Yj-1 1 , Yj )) if i = 0 or j = 0 if xi = yj if xi 6= yj xi yj 8 > <0 LCS(Xi , Yj ) = LCS(Xi 1 , Yj 1 ) + 1 > : max(LCS(Xi , Yj 1 ), LCS(Xi B A N A N A S B A N A N A S S 0 0 0 0 0 0 1 S 0 0 0 0 0 0 1 A 0 A 0 N N D A D A L L S S 1 , Yj )) if i = 0 or j = 0 if xi = yj if xi 6= yj 1 , Yj )) if i = 0 or j = 0 if xi = yj if xi 6= yj Longest common subsequence Longest common subsequence • subproblem property: • subproblem property: Xi-1 Yj-1 xi yj Xi-1 Yj-1 8 > <0 LCS(Xi , Yj ) = LCS(Xi 1 , Yj 1 ) + 1 > : max(LCS(Xi , Yj 1 ), LCS(Xi 1 , Yj )) if i = 0 or j = 0 if xi = yj if xi 6= yj xi yj 8 > <0 LCS(Xi , Yj ) = LCS(Xi 1 , Yj 1 ) + 1 > : max(LCS(Xi , Yj 1 ), LCS(Xi S B A N A N A S 0 0 0 0 0 0 1 S B A N A N A S 0 0 0 0 0 0 1 A 0 1 A 0 1 N N D A D A L L S S Longest common subsequence Longest common subsequence • subproblem property: • subproblem property: Xi-1 Yj-1 xi yj 8 > <0 LCS(Xi , Yj ) = LCS(Xi 1 , Yj 1 ) + 1 > : max(LCS(Xi , Yj 1 ), LCS(Xi Xi-1 Yj-1 1 , Yj )) if i = 0 or j = 0 if xi = yj if xi 6= yj xi yj 8 > <0 LCS(Xi , Yj ) = LCS(Xi 1 , Yj 1 ) + 1 > : max(LCS(Xi , Yj 1 ), LCS(Xi B A N A N A S B A N A N A S S 0 0 0 0 0 0 1 S 0 0 0 0 0 0 1 A 0 1 1 A 0 1 1 N N D A D A L L S S 1 , Yj )) if i = 0 or j = 0 if xi = yj if xi 6= yj 1 , Yj )) if i = 0 or j = 0 if xi = yj if xi 6= yj Longest common subsequence Longest common subsequence • subproblem property: • subproblem property: Xi-1 Yj-1 xi yj Xi-1 Yj-1 8 > <0 LCS(Xi , Yj ) = LCS(Xi 1 , Yj 1 ) + 1 > : max(LCS(Xi , Yj 1 ), LCS(Xi 1 , Yj )) if i = 0 or j = 0 if xi = yj if xi 6= yj xi yj 8 > <0 LCS(Xi , Yj ) = LCS(Xi 1 , Yj 1 ) + 1 > : max(LCS(Xi , Yj 1 ), LCS(Xi S B A N A N A S 0 0 0 0 0 0 1 S B A N A N A S 0 0 0 0 0 0 1 A 0 1 1 1 A 0 1 1 1 N N D A D A L L S S Longest common subsequence Longest common subsequence • subproblem property: • subproblem property: Xi-1 Yj-1 xi yj 8 > <0 LCS(Xi , Yj ) = LCS(Xi 1 , Yj 1 ) + 1 > : max(LCS(Xi , Yj 1 ), LCS(Xi Xi-1 Yj-1 1 , Yj )) if i = 0 or j = 0 if xi = yj if xi 6= yj xi yj 8 > <0 LCS(Xi , Yj ) = LCS(Xi 1 , Yj 1 ) + 1 > : max(LCS(Xi , Yj 1 ), LCS(Xi B A N A N A S B A N A N A S S 0 0 0 0 0 0 1 S 0 0 0 0 0 0 1 A 0 1 1 1 1 A 0 1 1 1 1 N N D A D A L L S S 1 , Yj )) if i = 0 or j = 0 if xi = yj if xi 6= yj 1 , Yj )) if i = 0 or j = 0 if xi = yj if xi 6= yj Longest common subsequence Longest common subsequence • subproblem property: • subproblem property: Xi-1 Yj-1 xi yj Xi-1 Yj-1 8 > <0 LCS(Xi , Yj ) = LCS(Xi 1 , Yj 1 ) + 1 > : max(LCS(Xi , Yj 1 ), LCS(Xi 1 , Yj )) if i = 0 or j = 0 if xi = yj if xi 6= yj xi yj 8 > <0 LCS(Xi , Yj ) = LCS(Xi 1 , Yj 1 ) + 1 > : max(LCS(Xi , Yj 1 ), LCS(Xi S B A N A N A S 0 0 0 0 0 0 1 S B A N A N A S 0 0 0 0 0 0 1 A 0 1 1 1 1 1 A 0 1 1 1 1 1 1 N N 0 1 2 2 2 2 2 D A D 0 1 2 2 2 2 2 A 0 1 2 3 3 3 3 L L 0 1 2 3 3 3 3 S S Running time: Ɵ(nm) Space: Ɵ(nm) Linear space: save only last and current row 0 1 2 3 3 3 4 Longest common subsequence Longest common subsequence • subproblem property: • subproblem property: Xi-1 Yj-1 xi yj Xi-1 Yj-1 8 > <0 LCS(Xi , Yj ) = LCS(Xi 1 , Yj 1 ) + 1 > : max(LCS(Xi , Yj 1 ), LCS(Xi B A N A N A S 1 , Yj )) if i = 0 or j = 0 if xi = yj if xi 6= yj xi yj 8 > <0 LCS(Xi , Yj ) = LCS(Xi 1 , Yj 1 ) + 1 > : max(LCS(Xi , Yj 1 ), LCS(Xi B A N A N A S B A N A N A S 0 0 0 0 0 0 1 S S 0 0 0 0 0 0 1 S A 0 1 1 1 1 1 1 A A 0 1 1 1 1 1 1 A N Value, not solution D A N 0 1 2 2 2 2 2 N D 0 1 2 2 2 2 2 A 0 1 2 3 3 3 3 D A D 0 1 2 2 2 2 2 A 0 1 2 3 3 3 3 L 0 1 2 3 3 3 3 L L 0 1 2 3 3 3 3 L S S S S 0 1 2 3 3 3 4 0 1 2 3 3 3 4 1 , Yj )) if i = 0 or j = 0 if xi = yj if xi 6= yj B A N A N A S S N 0 1 2 2 2 2 2 1 , Yj )) if i = 0 or j = 0 if xi = yj if xi 6= yj Longest common subsequence B A N A N A S S A N D A L S
© Copyright 2026 Paperzz