Post on 14-Dec-2015
Dynamic Programming
• An algorithm design paradigm like divide-and-conquer• “Programming”: A tabular method (not writing computer
code)• Divide-and-Conquer (DAC): subproblems are independent• Dynamic Programming (DP): subproblems are not
independent• Overlapping subproblems: subproblems share sub-
subproblems• In solving problems with overlapping subproblems
• A DAC algorithm does redundant work– Repeatedly solves common subproblems
• A DP algorithm solves each problem just once– Saves its result in a table
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 1
Optimization Problems
• DP typically applied to optimization problems• In an optimization problem
– There are many possible solutions (feasible solutions)– Each solution has a value– Want to find an optimal solution to the problem
• A solution with the optimal value (min or max value)
– Wrong to say “the” optimal solution to the problem• There may be several solutions with the same optimal value
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 2
Development of a DP Algorithm
1. Characterize the structure of an optimal solution
2. Recursively define the value of an optimal solution
3. Compute the value of an optimal solution in a bottom-up fashion
4. Construct an optimal solution from the information computed in Step 3
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 3
Example: Matrix-chain Multiplication
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 4
Matrix-chain Multiplication: An ExampleParenthesization
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 5
Cost of Multiplying two Matrices
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 6
Matrix-chain Multiplication Problem
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 7
Counting the Number of Parenthesizations
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 8
Number of Parenthesizations
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 9
The Structure of an Optimal Parenthesization
Step 1: Characterize the structure of an optimal solution
•Ai..j : matrix that results from evaluating the product Ai Ai+1 Ai+2 Aj
•An optimal parenthesization of the product A1A2An
– Splits the product between Ak and Ak1, for some 1≤k<n
(A1A2A3 Ak) · (Ak+1Ak+2 ... An)
– i.e., first compute A1..k and Ak+1..n and then multiply these two
•The cost of this optimal parenthesizationCost of computing A1..k
+ Cost of computing Ak+1..n
+ Cost of multiplying A1..k · Ak+1..n
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 10
Step 1: Characterize the Structure of an Optimal Solution
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 11
The Structure of an Optimal Parenthesization
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 12
Step 2: Define Value of an Optimal Sol. Recursively(mij =?)
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 13
Step 2: Recursive Equation for mij
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 14
Step 2: mij = MIN{mik + mk+1, j +pi-1pk pj}
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 15
Computing the Optimal Cost (Matrix-Chain Multiplication)
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 16
Computing the Optimal Cost (Matrix-Chain Multiplication)
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 17
Algorithm for Computing the Optimal Costs
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 18
Algorithm for Computing the Optimal Costs
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 19
Algorithm for Computing the Optimal Costs
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 20
l 2for i 1 to n - 1m[i, i1] compute m[i, i1]for k i to i do {m[1, 2], m[2, 3], …, m[n-1, n]}
.
. (n-1) valuesl 3for i 1 to n - 2m[i, i2] compute m[i, i2]for k i to i1 do {m[1, 3], m[2, 4], …, m[n-2, n]}
.
. (n-2) valuesl 4for i 1 to n - 3m[i, i3] compute m[i, i3]for k i to i2 do {m[1, 4], m[2, 5], …, m[n-3, n]}
.
. (n-3) values
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 21
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 22
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 23
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 24
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 25
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 26
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 27
Constructing an Optimal Solution
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 28
Constructing an Optimal Solution
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 29
Constructing an Optimal Solution
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 30
Example: Recursive Construction of an Optimal Solution
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 31
Example: Recursive Construction of an Optimal Solution
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 32
Example: Recursive Construction of an Optimal Solution
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 33
return A6
Elements of Dynamic Programming
• When should we look for a DP solution to an optimization problem?
• Two key ingredients for the problem
– Optimal substructure
– Overlapping subproblems
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 34
Optimal Substructure
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 35
Optimal Substructure
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 36
Optimal Substructure
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 37
Overlapping Subproblems
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 38
Overlapping Subproblems
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 39
Overlapping Subproblems
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 40
Recursive Matrix-chain Order
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 41
Running Time of RMC
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 42
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 43
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 44
Memoized Recursive Algorithm
• Offers the efficiency of the usual DP approach while maintaining top-down strategy
• Maintains an entry in a table for the soln to each subproblem
• Each table entry contains a special value to indicate that the entry has yet to be filled in
• When the subproblem is first encountered its solution is computed and then stored in the table
• Each subsequent time that the subproblem encountered the value stored in the table is simply looked up and returned
• The approach assumes that– The set of all possible subproblem parameters are known– The relation between the table positions and subproblems is
establishedBIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 45
Memoized Recursive Algorithm
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 46
Elements of Dynamic Programming: Summary
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 47
Elements of Dynamic Programming: Summary
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 48
Longest Common Subsequence
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 49
Longest Common Subsequence
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 50
Longest Common Subsequence
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 51
Characterizing a Longest Common Subsequence
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 52
Longest Common Subsequence Algorithm
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 53
A Recursive Solution to Subproblems
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 54
A Recursive Solution to Subproblems
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 55
Computing the Length of an LCS
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 56
Computing the Length of an LCS
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I)57
Computing the Length of an LCS
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 58
Constructing an LCS
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 59
Constructing an LCS
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 60
Longest Common Subsequence
BIL741: Advanced Analysis of Algorithms I (İleri Algoritma Çözümleme I) 61
This improvement works if we only need the length of an LCS