# Dynamic Programming.

## Presentation on theme: "Dynamic Programming."— Presentation transcript:

Dynamic Programming

Dynamic Programming Dividing a problem into subproblems
Dynamic programming vs divide and conquer - Dynamic programming : subproblems are overlapped - Divide and conquer : subproblems are independent Used for finding optimized solutions

Assembly-Line Scheduling
station 1 station 2 station 3 station 4 station 5 station 6 n = 6 Assembly Line 1 7 9 3 4 8 4 enters exits 8 5 6 4 5 7 Assembly Line 2

Assembly-Line Scheduling
7 9 3 4 8 4 3 2 enters exits 4 2 8 5 6 4 5 7 Assembly Line 2

Assembly-Line Scheduling
7 9 3 4 8 4 3 2 2 3 1 3 4 enters exits 2 1 2 2 1 4 2 8 5 6 4 5 7 Assembly Line 2

Assembly-Line Scheduling
7 9 3 4 8 4 40 3 2 2 3 1 3 4 enters exits 2 1 2 2 1 4 2 41 8 5 6 4 5 7 Assembly Line 2

Assembly-Line Scheduling
7 9 3 4 8 4 39 3 2 2 3 1 3 4 enters exits 2 1 2 2 1 4 2 8 5 6 4 5 7 Assembly Line 2

Assembly-Line Scheduling
station 1 station 2 station 3 station 4 station 5 station 6 number of cases = 2n Assembly Line 1 7 9 3 4 8 4 enters exits 8 5 6 4 5 7 Assembly Line 2

Assembly-Line Scheduling
T1,1 T1,2 T1,3 T1,4 T1,5 T1,6 Assembly Line 1 T enters exits Assembly Line 2 T2,1 T2,2 T2,3 T2,4 T2,5 T2,6

Assembly-Line Scheduling
T1,5 T1,6 T = min( T1,6 + 3, T2,6 + 2) 8 4 Divide and Conquer? 3 T 4 exits T1,6 = min( T1,5 + 4, T2, ) 1 2 T2,6 = min( T1, , T2,5 + 7) 5 7 T2,5 T2,6

Assembly-Line Scheduling
T1,5 T1,6 T = min( T1,6 + 3, T2,6 + 2) 8 4 Divide and Conquer? 3 T 4 exits T1,6 = min( T1,5 + 4, T2, ) 1 2 T2,6 = min( T1, , T2,5 + 7) 5 7 T2,5 T2,6

Assembly-Line Scheduling
9 12 T1,1 T1,2 T1,3 Assembly Line 1 T1,1 = 9 7 9 3 T2,1 = 12 2 2 3 enters 2 1 4 8 5 6 Assembly Line 2 T2,1 T2,2 T2,3

Assembly-Line Scheduling
9 18 T1,1 T1,2 T1,3 Assembly Line 1 T1,1 = 9 7 9 3 T2,1 = 12 2 2 3 T1,2 = min(T1,1 + 9, T2, ) enters 2 1 4 8 5 6 Assembly Line 2 T2,1 T2,2 T2,3 12

Assembly-Line Scheduling
9 18 T1,1 T1,2 T1,3 Assembly Line 1 T1,1 = 9 7 9 3 T2,1 = 12 2 T1,2 = 18 2 3 enters T2,2 = min(T1, , T2,1 + 5) 2 1 4 8 5 6 Assembly Line 2 T2,1 T2,2 T2,3 12 16

Assembly-Line Scheduling
9 18 20 22 24 25 32 30 35 37 T1,1 T1,2 T1,3 T1,4 T1,5 T1,6 Assembly Line 1 7 9 3 4 8 4 38 3 2 T 2 3 1 3 4 enters exits 2 1 2 2 1 4 2 8 5 6 4 5 7 Assembly Line 2 T2,1 T2,2 T2,3 T2,4 T2,5 T2,6 12 16

Assembly-Line Scheduling
32 30 35 37 T1,5 T1,6 T = T1,6 + 3 ? or T2,6 + 2 ? 8 4 38 3 T1,6 + 3 = T T 4 exits T2,6 + 2 > T 1 2 5 7 T2,5 T2,6

Assembly-Line Scheduling
32 30 35 37 T1,5 T1,6 T = T1,6 + 3 ? or T2,6 + 2 ? 8 4 38 3 T1,6 + 3 = T T 4 exits T2,6 + 2 > T 1 2 5 7 T2,5 T2,6

Assembly-Line Scheduling
32 30 35 37 T1,5 T1,6 T1,6 = T1,5 + 4 ? or T2, ? 8 4 38 3 T 4 T1,5 + 4 > T1,6 exits T2, = T1,6 1 2 5 7 T2,5 T2,6

Assembly-Line Scheduling
32 30 35 37 T1,5 T1,6 T1,6 = T1,5 + 4 ? or T2, ? 8 4 38 3 T 4 T1,5 + 4 > T1,6 exits T2, = T1,6 1 2 5 7 T2,5 T2,6

Assembly-Line Scheduling
9 18 20 22 24 25 32 30 35 37 T1,1 T1,2 T1,3 T1,4 T1,5 T1,6 Assembly Line 1 7 9 3 4 8 4 38 3 2 T 2 3 1 3 4 enters exits 2 1 2 2 1 4 2 8 5 6 4 5 7 Assembly Line 2 T2,1 T2,2 T2,3 T2,4 T2,5 T2,6 12 16

Assembly-Line Scheduling
T1,5 T1,6 T2,5 T2,6 1. Analyze the problem T exits T = min( T1,6 + 3, T2,6 + 2)

Assembly-Line Scheduling
T1,5 T1,6 T2,5 T2,6 1. Analyze the problem 2. Find a recursive solution. T exits T = min( T1,6 + 3, T2,6 + 2) T1,6 = min( T1,5 + 4, T2, ) T2,6 = min( T1, , T2,5 + 7)

Assembly-Line Scheduling
9 18 20 24 32 35 1. Analyze the problem. T1,1 T1,2 T1,3 T1,4 T1,5 T1,6 2. Find a recursive solution. T 3. Compute the fastest time. 38 T2,1 T2,2 T2,3 T2,4 T2,5 T2,6 12 16 22 25 30 37

Assembly-Line Scheduling
9 18 20 24 32 35 1. Analyze the problem. T1,1 T1,2 T1,3 T1,4 T1,5 T1,6 2. Find a recursive solution. T 3. Compute the fastest time. 38 4. Construct the fastest way. T2,1 T2,2 T2,3 T2,4 T2,5 T2,6 12 16 22 25 30 37

Assembly-Line Scheduling
9 18 20 24 32 35 1. Analyze the problem. T1,1 T1,2 T1,3 T1,4 T1,5 T1,6 2. Find a recursive solution. T 3. Compute the fastest time. 38 4. Construct the fastest way. T2,1 T2,2 T2,3 T2,4 T2,5 T2,6 This algorithm takes time. 12 16 22 25 30 37 Brute force :

When can we use Dynamic Programming?
Optimal substructures Overlapping subproblems

Overlapping Subprograms
T1,5 T1,6 T 8 4 3 T1,6 T2,6 T 4 exits T1,5 T2,5 T1,5 T2,5 1 2 5 7 T1,4 T2,4 T1,4 T2,4 T1,4 T2,4 T1,4 T2,4 T2,5 T2,6

Overlapping Subprograms
T1,5 T1,6 T 8 4 3 T1,6 T2,6 T 4 exits T1,5 T2,5 T1,5 T2,5 1 2 5 7 T1,4 T2,4 T1,4 T2,4 T1,4 T2,4 T1,4 T2,4 T2,5 T2,6

Optimal Substructures
Problems should be divided into subproblems. Optimal solution : from optimal subproblem solutions One part of the optimal solution to the problem should be an optimal solution to the subproblem solutions to the subproblems should be independent

Optimal Substructures
1. Shortest Path Problem 2. Longest Simple Path Problem d d s s

Optimal Substructures
1. Shortest Path Problem 2. Longest Simple Path Problem d d s s w w

Memoization Ordinary - Bottom-up strategy Memoization
- Top-down strategy

Memoization Memoization Bottom Up T1,1 T1,2 T1,3 T1,4 T1,5 T1,6 - T2,1

Memoization Memoization T T1,6 T2,6 T1,5 T2,5 T1,4 T2,4 … … T1,1 T1,2
- T2,1 T2,2 T2,3 T2,4 T2,5 T2,6 T1,4 T2,4

Memoization Memoization T1,3 T1,2 T2,2 T1,1 T2,1 T1,1 T1,2 T1,3 T1,4
9 - T2,1 T2,2 T2,3 T2,4 T2,5 T2,6 12 T1,1 T2,1

Memoization Memoization T1,3 T1,2 T2,2 T1,1 T2,1 T1,1 T1,2 T1,3 T1,4
9 18 - T2,1 T2,2 T2,3 T2,4 T2,5 T2,6 12 T1,1 T2,1

Memoization Memoization T1,3 T1,2 T2,2 T1,1 T2,1 T1,1 T2,1 T1,1 T1,2
9 18 - T2,1 T2,2 T2,3 T2,4 T2,5 T2,6 12 16 T1,1 T2,1 T1,1 T2,1

Memoization Memoization T1,4 T1,3 T2,3 T1,2 T2,2 T1,2 T2,2 T1,1 T2,1
9 18 20 - T2,1 T2,2 T2,3 T2,4 T2,5 T2,6 12 16 T1,2 T2,2 T1,2 T2,2 T1,1 T2,1 T1,1 T2,1

Memoization Memoization T T1,6 T2,6 T1,5 T2,5 T2,4 T1,4 T1,4 T2,4 … …
9 18 20 24 - T2,1 T2,2 T2,3 T2,4 T2,5 T2,6 12 16 22 T1,4 T2,4 T1,3 T2,3

Memoization Memoization T T1,6 T2,6 T1,5 T2,5 T2,4 T1,4 T1,4 T2,4 … …
9 18 20 24 32 - T2,1 T2,2 T2,3 T2,4 T2,5 T2,6 12 16 22 25 T1,4 T2,4

Memoization Memoization T T1,6 T2,6 T2,5 T1,5 T1,5 T2,5 T2,4 T1,4 T1,4
9 18 20 24 32 35 T2,1 T2,2 T2,3 T2,4 T2,5 T2,6 12 16 22 25 30 - T1,4 T2,4

Memoization Memoization T = 38 T1,6 T2,6 T2,5 T1,5 T1,5 T2,5 T2,4 T1,4
9 18 20 24 32 35 T2,1 T2,2 T2,3 T2,4 T2,5 T2,6 12 16 22 25 30 37 T1,4 T2,4

Why Memoization? Ordinary Dynamic Programming (Bottom-Up strategy)
- when all subproblems need to be solved Memoization - when some subproblems do not need to be solved

Longest Common Subsequence
DNA sequences : composed of four components – {A, C, G, T} How similar are they? S1 = ACCGGTCGTGCGCGGAAGCCGGCCGAA S2 = GTCGTTCGGAATGCCGTTGCTCTGTAAA

Longest Common Subsequence
S1 = ACCGGTCGTGCGCGGAAGCCGGCCGAA S2 = GTCGTTCGGAATGCCGTTGCTCTGTAAA Longest Common Sequence : GTCGTCGGAAGCCGGCCGAA

Longest Common Subsequence
X = <x1, x2, …, xm>, Y = <y1, y2, …, yn> Xi = <x1, x2, …, xi> for i = 1 to m Yj = <y1, y2, …, yj> for j = 1 to n Zi,j = <z1, z2, …, zk> for i = 1 to m, j = 1 to n Longest common subsequence of Xi and Yj

Longest Common Subsequence
1. Analyze the problem. X = <x1, x2, …, xm>, Y = <y1, y2, …, yn> Xi = <x1, x2, …, xi> Yj = <y1, y2, …, yj> Zi,j = <z1, z2, …, zk> (Longest common subsequence) Zi-1,j = <z1, z2, …, zk-1> or <z1, z2, …, zk> when xi used as zk otherwise Zi,j-1 = <z1, z2, …, zk> or <z1, z2, …, zk-1>

Longest Common Subsequence
1. Analyze the problem. X = <x1, x2, …, xm>, Y = <y1, y2, …, yn> Xi = <x1, x2, …, xi> Yj = <y1, y2, …, yj> Zi,j = <z1, z2, …, zk> (Longest common subsequence) If xi = yj then zk = xi or zk = yj / / / Zi-1,j = <z1, z2, …, zk-1> or <z1, z2, …, zk> when xi used as zk otherwise

Longest Common Subsequence
1. Analyze the problem. X = <x1, x2, …, xm>, Y = <y1, y2, …, yn> Xi = <x1, x2, …, xi> Yj = <y1, y2, …, yj> Zi,j = <z1, z2, …, zk> (Longest common subsequence) If xi = yj then zk = xi or zk = yj / / / Zi,j = Zi-1,j or Zi,j-1

Longest Common Subsequence
1. Analyze the problem. X = <x1, x2, …, xm>, Y = <y1, y2, …, yn> Xi = <x1, x2, …, xi> Yj = <y1, y2, …, yj> Zi,j = <z1, z2, …, zk> (Longest common subsequence) If xi = yj then / Zi,j = Zi-1,j or Zi,j-1 Optimal If xi = yj then If xi = yj is not used as zk then Zi,j = Zi-1,j or Zi,j-1 If xi = yj is used as zk then Zi,j = Zi-1,j-1 + zk

Longest Common Subsequence
1. Analyze the problem. X = <x1, x2, …, xm>, Y = <y1, y2, …, yn> Xi = <x1, x2, …, xi> Yj = <y1, y2, …, yj> Zi,j = <z1, z2, …, zk> (Longest common subsequence) If xi = yj then / Zi,j = Zi-1,j or Zi,j-1 ci,j = max(ci-1,j, ci,j-1) ci,j = ci-1,j-1 + 1 If xi = yj then Zi,j = Zi-1,j-1 + zk

Longest Common Subsequence
2. Find a recursive solution. If i = 0 or j = 0 then ci,j = 0 Else If xi = yj then / ci,j = max(ci-1,j, ci,j-1) If xi = yj then ci,j = ci-1,j-1 + 1

Longest Common Subsequence
3. Compute the fastest time. C1,1 C1,2 C1,n C2,1 C2,2 C2,n . Cm,1 Cm,2 Cm,n If xi = yj then / ci,j = max(ci-1,j, ci,j-1) If xi = yj then ci,j = ci-1,j-1 + 1

Longest Common Subsequence
4. Construct the common subsequence. C1,1 C1,2 C1,n C2,1 C2,2 C2,n . Cm,1 Cm,2 Cm,n

Longest Common Subsequence
4. Construct the common subsequence. Ci-2,j-2 Ci-2,j-1 Ci-2,j Ci-1,j-2 Ci-1,j-1 Ci-1,j Ci,j-2 Ci,j-1 Ci,j If xi = yj then one element of The longest common subsequence move to ci-1,j-1 Else If ci,j = ci-1,j then move to ci-1,j If ci,j = ci,j-1 then If xi = yj then / ci,j = max(ci-1,j, ci,j-1) move to ci,j-1 If xi = yj then ci,j = ci-1,j-1 + 1

Dynamic Programming 1. Analyze the problem.
Dividing a problem into subproblems. For optimization problems. Optimal substructures / overlapping subproblems Process of dynamic programmings 1. Analyze the problem. 2. Find a recursive solution. 3. Compute the fastest time/cost. 4. Construct the fastest path.