3. Compute the value of an optimal solution
4. Construct an optimal solution from computed information
▪
Step 1-Q1: What can be the subproblems?
▪
Step 1-Q2: Does it exhibit optimal structure? (an optimal solution can be represented by the optimal solutions to subproblems)
▪ Yes. continue
▪ No. go to Step 1-Q1 or there is no DP solution for this problem Rod Cutting Problem
Input: a rod of length 𝑛 and a table of prices 𝑝𝑖 for 𝑖 = 1, … , 𝑛 Output: the maximum revenue 𝑟𝑛 obtainable
▪
Step 1-Q1: What can be the subproblems?
▪ Subproblems: Cut-Rod(0), Cut-Rod(1), …, Cut-Rod(n-1)
▪ Cut-Rod(i): rod cutting problem with length-i rod
▪ Goal: Cut-Rod(n)
▪ Suppose we know the optimal solution to Cut-Rod(i), there are i cases:
▪ Case 1: the first segment in the solution has length 1
▪ Case 2: the first segment in the solution has length 2
:
▪ Case i: the first segment in the solution has length i 39 Rod Cutting Problem
Input: a rod of length 𝑛 and a table of prices 𝑝𝑖 for 𝑖 = 1, … , 𝑛 Output: the maximum revenue 𝑟𝑛 obtainable
從solution中拿掉一段長度為1的鐵條, 剩下的部分是Cut-Rod(i-1)的最佳解 從solution中拿掉一段長度為2的鐵條, 剩下的部分是Cut-Rod(i-2)的最佳解
▪
Step 1-Q2: Does it exhibit optimal structure? (an optimal solution can be represented by the optimal solutions to subproblems)
▪
Yes. Prove by contradiction.
Rod Cutting Problem
Input: a rod of length 𝑛 and a table of prices 𝑝𝑖 for 𝑖 = 1, … , 𝑛 Output: the maximum revenue 𝑟𝑛 obtainable
▪ Suppose we know the optimal solution to Cut-Rod(i), there are i cases:
▪ Case 1: the first segment in the solution has length 1
▪ Case 2: the first segment in the solution has length 2
:
▪ Case i: the first segment in the solution has length i
▪ Recursively define the value Rod Cutting Problem
Input: a rod of length 𝑛 and a table of prices 𝑝𝑖 for 𝑖 = 1, … , 𝑛 Output: the maximum revenue 𝑟𝑛 obtainable
從solution中拿掉一段長度為1的鐵條, 剩下的部分是Cut-Rod(i-1)的最佳解
從solution中拿掉一段長度為2的鐵條, 剩下的部分是Cut-Rod(i-2)的最佳解
從solution中拿掉一段長度為i的鐵條, 剩下的部分是Cut-Rod(0)的最佳解
▪ Bottom-up method: solve smaller subproblems first
42
Rod Cutting Problem
Input: a rod of length 𝑛 and a table of prices 𝑝𝑖 for 𝑖 = 1, … , 𝑛 Output: the maximum revenue 𝑟𝑛 obtainable
i 0 1 2 3 4 5 … n
r[i]
Bottom-Up-Cut-Rod(p, n) r[0] = 0
for j = 1 to n // compute r[1], r[2], ... in order q = -∞
for i = 1 to j
q = max(q, p[i] + r[j - i]) r[j] = q
return r[n]
▪ Bottom-up method: solve smaller subproblems first Rod Cutting Problem
Input: a rod of length 𝑛 and a table of prices 𝑝𝑖 for 𝑖 = 1, … , 𝑛 Output: the maximum revenue 𝑟𝑛 obtainable
i 0 1 2 3 4 5 … n
r[i] 0
cut[i] 0 1
1
2 5
3 8
2 10
length 𝑖 1 2 3 4 5
price 𝑝𝑖 1 5 8 9 10
Cut-Rod(p, n) r[0] = 0
for j = 1 to n // compute r[1], r[2], ... in order q = -∞
for i = 1 to j
if q < p[i] + r[j - i]
q = p[i] + r[j - i]
cut[j] = i // the best first cut for len j rod r[i] = q
return r[n], cut
Print-Cut-Rod-Solution(p, n) (r, cut) = Cut-Rod(p, n) while n > 0
print cut[n]
n = n – cut[n] // remove the first piece
45
▪ Input: the postage 𝑛 and the stamps with values 𝑣
1, 𝑣
2, … , 𝑣
𝑘▪ Output: the minimum number of stamps to cover the postage
▪
The optimal solution 𝑆
𝑛can be recursively defined as
Stamp(v, n) r_min = ∞
if n == 0 // base case return 0
for i = 1 to k // recursive case r[i] = Stamp(v, n - v[i])
if r[i] < r_min r_min = r[i]
return r_min + 1
▪
Subproblems
▪ S(i): the min #stamps with postage i
▪ Goal: S(n)
▪
Optimal substructure: suppose we know the optimal solution to S(i), there are k cases:
▪ Case 1: there is a stamp with v1 in OPT
▪ Case 2: there is a stamp with v2 in OPT
:
▪ Case k: there is a stamp with vk in OPT
48
Stamp Problem
Input: the postage 𝑛 and the stamps with values 𝑣1, 𝑣2, … , 𝑣𝑘 Output: the minimum number of stamps to cover the postage
從solution中拿掉一張郵資為v1的郵票, 剩下的部分是S(i-v[1])的最佳解
從solution中拿掉一張郵資為v2的郵票, 剩下的部分是S(i-v[2])的最佳解
從solution中拿掉一張郵資為v 的郵票, 剩下的部分是S(i-v[k])的最佳解
▪ Suppose we know the optimal solution to S(i), there are k cases:
▪ Case 1: there is a stamp with v1 in OPT
▪ Case 2: there is a stamp with v2 in OPT
:
▪ Case k: there is a stamp with vk in OPT
▪
Recursively define the value
Stamp Problem
Input: the postage 𝑛 and the stamps with values 𝑣1, 𝑣2, … , 𝑣𝑘 Output: the minimum number of stamps to cover the postage
從solution中拿掉一張郵資為v1的郵票, 剩下的部分是S(i-v[1])的最佳解
從solution中拿掉一張郵資為v2的郵票, 剩下的部分是S(i-v[2])的最佳解
從solution中拿掉一張郵資為vk的郵票, 剩下的部分是S(i-v[k])的最佳解
▪ Bottom-up method: solve smaller subproblems first
50
Stamp Problem
Input: the postage 𝑛 and the stamps with values 𝑣1, 𝑣2, … , 𝑣𝑘 Output: the minimum number of stamps to cover the postage
i 0 1 2 3 4 5 … n
S[i]
Stamp(v, n) S[0] = 0
for i = 1 to n // compute r[1], r[2], ... in order r_min = ∞
for j = 1 to k
if S[i - v[j]] < r_min r_min = 1 + S[i – v[j]]
return S[n]
Stamp(v, n) S[0] = 0
for i = 1 to n r_min = ∞
for j = 1 to k
if S[i - v[j]] < r_min r_min = 1 + S[i – v[j]]
B[i] = j // backtracking for stamp with v[j]
return S[n], B
Print-Stamp-Selection(v, n) (S, B) = Stamp(v, n)
while n > 0 print B[n]
n = n – v[B[n]]
Textbook Chapter 15.2 – Matrix-chain multiplication
52
▪
Input: a sequence of n matrices 𝐴
1, … , 𝐴
𝑛▪
Output: the product of 𝐴
1𝐴
2… 𝐴
𝑛𝐴1 𝐴2 𝐴3 𝐴4 …… 𝐴𝑛
𝐴1.cols=𝐴2.rows
𝐴1and 𝐴2are compatible.
54
▪
Each entry takes 𝑞 multiplications
▪
There are total 𝑝𝑟 entries
A B C
Matrix multiplication is associative: 𝐴 𝐵𝐶 = (𝐴𝐵)𝐶. The time required by obtaining 𝐴 × 𝐵 × 𝐶 could be affected by which two matrices multiply first .
▪
Overall time is
= =
▪
Overall time is
= =
▪
Input: a sequence of integers 𝑙
0, 𝑙
1, … , 𝑙
𝑛▪ 𝑙𝑖−1 is the number of rows of matrix 𝐴𝑖
▪ 𝑙𝑖 is the number of columns of matrix 𝐴𝑖
▪
Output: a order of performing 𝑛 − 1 matrix multiplications in the minimum number of operations to obtain the product of 𝐴
1𝐴
2… 𝐴
𝑛𝐴1 𝐴2 𝐴3 𝐴4 …… 𝐴𝑛
𝐴1.cols=𝐴2.rows
𝐴1and 𝐴2are compatible.
Do not need to compute the result but find the fast way to get the result!
▪
𝑃
𝑛: how many ways for 𝑛 matrices to be multiplied
▪
The solution of 𝑃
𝑛is Catalan numbers, Ω
4𝑛𝑛
3 2
, or is also Ω 2
𝑛 Exercise 15.2-3▪
Subproblems
▪ M(i, j): the min #operations for obtaining the product of 𝐴𝑖 … 𝐴𝑗
▪ Goal: M(1, n)
▪
Optimal substructure: suppose we know the OPT to M(i, j) , there are k cases:
▪ Case k: there is a cut right after Ak in OPT Matrix-Chain Multiplication Problem
Input: a sequence of integers 𝑙0, 𝑙1, … , 𝑙𝑛indicating the dimensionality of 𝐴𝑖
Output: a order of matrix multiplications with the minimum number of operations
左右所花的運算量是M(i, k)及M(k+1, j)的最佳解
𝐴𝑖𝐴𝑖+1… 𝐴𝑘 𝐴𝑘+1𝐴𝑘+2 … 𝐴𝑗 𝑖 ≤ 𝑘 < 𝑗
▪ Suppose we know the optimal solution to M(i, j), there are k cases:
▪ Case k: there is a cut right after Ak in OPT
▪
Recursively define the value
左右所花的運算量是M(i, k)及M(k+1, j)的最佳解
Matrix-Chain Multiplication Problem
Input: a sequence of integers 𝑙0, 𝑙1, … , 𝑙𝑛indicating the dimensionality of 𝐴𝑖
Output: a order of matrix multiplications with the minimum number of operations
𝐴𝑘+1..𝑗 𝐴𝑖.rows
=𝑙𝑖−1
𝐴𝑘.cols=𝑙𝑘
𝐴𝑘+1.rows=𝑙𝑘
𝐴𝑗.cols=𝑙𝑗 𝐴𝑖𝐴𝑖+1… 𝐴𝑘 𝐴𝑘+1𝐴𝑘+2… 𝐴𝑗 =
▪ Bottom-up method: solve smaller subproblems first
▪ How many subproblems to solve
▪ #combination of the values 𝑖 and 𝑗 s.t. 1 ≤ 𝑖 ≤ 𝑗 ≤ 𝑛
Matrix-Chain Multiplication Problem
Input: a sequence of integers 𝑙0, 𝑙1, … , 𝑙𝑛indicating the dimensionality of 𝐴𝑖
Output: a order of matrix multiplications with the minimum number of operations
Matrix-Chain(n, l)
initialize two tables M[1..n][1..n] and B[1..n-1][2..n]
for i = 1 to n
M[i][i] = 0 // boundary case
for p = 2 to n // p is the chain length
for i = 1 to n – p + 1 // all i, j combinations j = i + p – 1
M[i][j] = ∞
for k = i to j – 1 // find the best k
q = M[i][k] + M[k + 1][j] + l[i - 1] * l[k] * l[j]
if q < M[i][j]
M[i][j] = q return M
How to decide the order of the matrix
multiplication?
1 2 3 4 5 6 … n
1 0
2 0
3 0
4 0
5 0
6 0
: 0
n 0
64
Matrix-Chain(n, l)
initialize two tables M[1..n][1..n] and B[1..n-1][2..n]
for i = 1 to n
M[i][i] = 0 // boundary case
for p = 2 to n // p is the chain length
for i = 1 to n – p + 1 // all i, j combinations j = i + p – 1
M[i][j] = ∞
for k = i to j – 1 // find the best k
q = M[i][k] + M[k + 1][j] + l[i - 1] * l[k] * l[j]
if q < M[i][j]
M[i][j] = q
B[i][j] = k // backtracking return M and B
Print-Optimal-Parens(B, i, j) if i == j
print 𝐴𝑖 else
print “(”
Print-Optimal-Parens(B, i, B[i][j]) Print-Optimal-Parens(B, B[i][j] + 1, j) print “)”
Matrix 𝑨𝟏 𝑨𝟐 𝑨𝟑 𝑨𝟒 𝑨𝟓 𝑨𝟔 Dimension 30 x 35 35 x 15 15 x 5 5 x 10 10 x 20 20 x 25
1 2 3 4 5 6
1 0
2 0
3 0
4 0
5 0
6 0
15,750
2,625 750
1,000
5,000 7,875
4,375
2,500
3,500 9,375
7,125
53,75 11,875
10,500 15,125
1 2 3 4 5 6
1 2 3 4 5 6
1
2
3
4
5 1
3
3
5 3
3
3 3
3 3
Textbook Chapter 15.4 – Longest common subsequence Textbook Problem 15.5 – Edit distance
66
▪
猴子們各自講話,經過語音辨識系統後,哪一支猴子發出最接近英 文字”banana”的語音為優勝者
▪
How to evaluate the similarity between two sequences?
aeniqadikjaz
svkbrlvpnzanczyqza
banana
▪
Input: two sequences
▪
Output: longest common subsequence of two sequences
▪ The maximum-length sequence of characters that appear left-to-right (but not necessarily a continuous string) in both sequences
X = banana
Y = svkbrlvpnzanczyqza X → ---ba---n-an---a Y → svkbrlvpnzanczyqza X = banana
Y = aeniqadikjaz X → ba-n--an---a-Y → -aeniqadikjaz
The infinite monkey theorem: a monkey hitting keys at random for an infinite amount of time will almost surely type a given text
4 5
▪
Input: two sequences
▪
Output: the minimum cost of transformation from X to Y
▪ Quantifier of the dissimilarity of two strings
X = banana
Y = svkbrlvpnzanczyqza X → ---ba---n-an---a Y → svkbrlvpnzanczyqza X = banana
Y = aeniqadikjaz X → ba-n--an---a-Y → -aeniqadikjaz
1 deletion, 7 insertions, 1 substitution 12 insertions, 1 substitution
9 13
▪
Input: two sequences
▪
Output: the minimal cost 𝑀
𝑚,𝑛for aligning two sequences
▪ Cost = #insertions × 𝐶INS + #deletions × 𝐶DEL + #substitutions × 𝐶𝑝,𝑞
▪ Subproblems
▪ SA(i, j): sequence alignment between prefix strings 𝑥1, … , 𝑥𝑖 and 𝑦1, … , 𝑦𝑗
▪ Goal: SA(m, n)
▪ Optimal substructure: suppose OPT is an optimal solution to SA(i, j), there are 3 cases:
▪ Case 1: 𝑥𝑖 and 𝑦𝑗 are aligned in OPT (match or substitution)
▪ OPT/{𝑥𝑖, , 𝑦𝑗} is an optimal solution of SA(i-1, j-1)
▪ Case 2: 𝑥𝑖 is aligned with a gap in OPT (deletion)
▪ OPT is an optimal solution of SA(i-1, j)
▪ Case 3: 𝑦𝑗 is aligned with a gap in OPT (insertion)
▪ OPT is an optimal solution of SA(i, j-1)
Sequence Alignment Problem Input: two sequences
Output: the minimal cost 𝑀𝑚,𝑛 for aligning two sequences
▪
Suppose OPT is an optimal solution to SA(i, j), there are 3 cases:
▪ Case 1: 𝑥𝑖 and 𝑦𝑗 are aligned in OPT (match or substitution)
▪ OPT/{𝑥𝑖, , 𝑦𝑗} is an optimal solution of SA(i-1, j-1)
▪ Case 2: 𝑥𝑖 is aligned with a gap in OPT (deletion)
▪ OPT is an optimal solution of SA(i-1, j)
▪ Case 3: 𝑦𝑗 is aligned with a gap in OPT (insertion)
▪ OPT is an optimal solution of SA(i, j-1)
▪
Recursively define the value
Sequence Alignment Problem Input: two sequences
Output: the minimal cost 𝑀𝑚,𝑛 for aligning two sequences
▪ Bottom-up method: solve smaller subproblems first
X\Y 0 1 2 3 4 5 … n
0 1 : m
Sequence Alignment Problem Input: two sequences
Output: the minimal cost 𝑀𝑚,𝑛 for aligning two sequences
▪ Bottom-up method: solve smaller subproblems first
74
X\Y 0 1 2 3 4 5 6 7 8 9 10 11 12
0 0 4 8 12 16 20 24 28 32 36 40 44 48
1 4 7 11 15 19 23 27 31 35 39 43 47 51
2 8 4 8 12 16 20 23 27 31 35 39 43 47
3 12 8 12 8 12 16 20 24 28 32 36 40 44
4 16 12 15 12 15 19 16 20 24 28 32 36 40 5 20 16 19 15 19 22 20 23 27 31 35 39 43 6 24 20 23 19 22 26 22 26 30 34 38 35 39
Sequence Alignment Problem Input: two sequences
Output: the minimal cost 𝑀𝑚,𝑛 for aligning two sequences
a e n i q a d i k j a z
b a n a n a
Seq-Align(X, Y, CDEL, CINS, Cp,q) for j = 0 to n
M[0][j] = j * CINS // |X|=0, cost=|Y|*penalty for i = 1 to m
M[i][0] = i * CDEL // |Y|=0, cost=|X|*penalty for i = 1 to m
for j = 1 to n
M[i][j] = min(M[i-1][j-1]+Cxi,yi, M[i-1][j]+CDEL, M[i][j-1]+CINS)
▪ Bottom-up method: solve smaller subproblems first Sequence Alignment Problem
Input: two sequences
Output: the minimal cost 𝑀𝑚,𝑛 for aligning two sequences
76
▪ Bottom-up method: solve smaller subproblems first Sequence Alignment Problem
Input: two sequences
Output: the minimal cost 𝑀𝑚,𝑛 for aligning two sequences
X\Y 0 1 2 3 4 5 6 7 8 9 10 11 12
0 0 4 8 12 16 20 24 28 32 36 40 44 48
1 4 7 11 15 19 23 27 31 35 39 43 47 51
2 8 4 8 12 16 20 23 27 31 35 39 43 47
3 12 8 12 8 12 16 20 24 28 32 36 40 44
4 16 12 15 12 15 19 16 20 24 28 32 36 40 5 20 16 19 15 19 22 20 23 27 31 35 39 43 6 24 20 23 19 22 26 22 26 30 34 38 35 39
a e n i q a d i k j a z
b a n a n a
▪ Bottom-up method: solve smaller subproblems first Sequence Alignment Problem
Input: two sequences
Output: the minimal cost 𝑀𝑚,𝑛 for aligning two sequences
Find-Solution(M) if m = 0 or n = 0
return {}
v = min(M[m-1][n-1] + Cxm,yn, M[m-1][n] + CDEL, M[m][n-1] + CINS) if v = M[m-1][n] + CDEL // ↑: deletion
return Find-Solution(m-1, n)
if v = M[m][n-1] + CINS // ←: insertion return Find-Solution(m, n-1)
78
Find-Solution(M) if m = 0 or n = 0
return {}
v = min(M[m-1][n-1] + Cxm,yn, M[m-1][n] + CDEL, M[m][n-1] + CINS) if v = M[m-1][n] + CDEL // ↑: deletion
return Find-Solution(m-1, n)
if v = M[m][n-1] + CINS // ←: insertion return Find-Solution(m, n-1)
return {(m, n)} ∪ Find-Solution(m-1, n-1) // ↖: match/substitution Seq-Align(X, Y, CDEL, CINS, Cp,q)
for j = 0 to n
M[0][j] = j * CINS // |X|=0, cost=|Y|*penalty for i = 1 to m
M[i][0] = i * CDEL // |Y|=0, cost=|X|*penalty for i = 1 to m
for j = 1 to n
M[i][j] = min(M[i-1][j-1]+Cxi,yi, M[i-1][j]+CDEL, M[i][j-1]+CINS) return M[m][n]