Transcript Document

Dynamic programming
Binhai Zhu
Computer Science Department, Montana State University
7/16/2015
1
Idea
 You have a large problem to solve, you can
divide the problem into smaller sub-problems
(1) Solution of a sub-problem might be
interrelated and might be re-used again (this is
different from Divide & Conquer.
(2) So it is better to store those smaller solutions
somewhere.
7/16/2015
2
Idea
 You have a large problem to solve, you can
divide the problem into smaller sub-problems
(1) Solution of a sub-problem might be
interrelated and might be re-used again (this is
different from Divide & Conquer.
(2) So it is better to store those smaller solutions
somewhere.
(3) Of course, sometimes it might not work.
7/16/2015
3
Example 1. World Series Odds
Two teams A and B play to see who is the first to win n
games. In world series games n=4.
Assumption: A and B are equally competent, each has a 50%
chance to win any particular game.
7/16/2015
4
Example 1. World Series Odds
P(i,j) --- the probability that A needs i extra games to win
and B needs j extra games to win.
7/16/2015
5
Example 1. World Series Odds
P(i,j) --- the probability that A needs i extra games to win
and B needs j extra games to win. (Assume that we talk
about team A is to win/lose.)
P(i,j) = 1,
if i = 0 and j > 0
P(i,j) = 0,
if i >0 and j =0
7/16/2015
6
Example 1. World Series Odds
P(i,j) --- the probability that A needs i extra games to win
and B needs j extra games to win. (Assume that we talk
about team A is to win/lose.)
P(i,j) = 1,
if i = 0 and j > 0
P(i,j) = 0,
if i >0 and j =0
P(i,j) = ( P(i-1,j) + P(i,j-1) ) /2, if i > 0 and j > 0
What is the cost to calculate P(i,j) recursively?
7/16/2015
7
Example 1. World Series Odds
P(i,j) = 1,
if i = 0 and j > 0
P(i,j) = 0,
if i >0 and j =0
P(i,j) = ( P(i-1,j) + P(i,j-1) ) /2, if i > 0 and j > 0
What is the cost to calculate P(i,j) recursively?
-Let i+j = n and T(n) be the cost for calculating P(i,j).
-T(1) = O(1) = c
-T(n) = 2T(n-1) + O(1) = 2T(n-1)+ d,
c,d are constants.
7/16/2015
8
Example 1. World Series Odds
-Let i+j = n and T(n) be the cost for calculating P[i,j].
-T(1) = O(1) = c
-T(n) = 2T(n-1) + O(1) = 2T(n-1)+ d,
c,d are constants.
T(n) = c2n-1 + d(2n-1-1) ε O(2n) = O(2i+j).
So when n is large, this is not an efficient solution.
7/16/2015
9
Example 1. World Series Odds
-How to solve this problem with dynamic programming?
-(1) Define a Table P[-,-]
Odds(i,j)
for t = 1 to i+j do
P[0,t] = 1
P[t,0] = 0
for k = 1 to t-1 do
P[k,t-k]=(P[k-1,t-k]+P[k,t-k-1])/2;
endfor
endfor
return P[i,j]
// running time?
7/16/2015
10
Example 1. World Series Odds
Odds(i,j)
for t = 1 to i+j do
4
1
3
1
↑
2
j
1
1
1
P[0,t] = 1
P[t,0] = 0
for k = 1 to t-1 do
P[k,t-k]=(P[k-1,t-k]+P[k,t-k-1])/2;
endfor
0
endfor
return P[i,j]
// running time?
0
0
0
0
0
1
2
3
4
i→
7/16/2015
11
Example 1. World Series Odds
Odds(i,j)
for t = 1 to i+j do
4
1
15/16
3
1
7/8
↑
2
j
1
3/4
1
1
1/2
P[0,t] = 1
P[t,0] = 0
for k = 1 to t-1 do
P[k,t-k]=(P[k-1,t-k]+P[k,t-k-1])/2;
endfor
0
endfor
return P[i,j]
// running time?
0
0
0
0
0
1
2
3
4
i→
7/16/2015
12
Example 1. World Series Odds
Odds(i,j)
for t = 1 to i+j do
4
1
3
1
7/8
11/16 1/2
↑
2
j
1
3/4
1/2
5/16 3/16
1
1
1/2
1/4
1/8
1/16
0
0
0
0
1
2
3
4
15/16 13/16 21/32 1/2
P[0,t] = 1
P[t,0] = 0
for k = 1 to t-1 do
P[k,t-k]=(P[k-1,t-k]+P[k,t-k-1])/2;
endfor
0
endfor
return P[i,j]
// running time?
0
11/32
i→
7/16/2015
13
Example 2. Matrix Chain
Multiplication
Given n matrices M1,M2,…,Mn, compute the product
M1M2M3…Mn, where Mi has dimension di-1 x di (i.e., with
di-1 rows and di columns), for i = 1,…,n.
Objective?
7/16/2015
14
Example 2. Matrix Chain
Multiplication
Given n matrices M1,M2,…,Mn, compute the product
M1M2M3…Mn, where Mi has dimension di-1 x di (i.e., with
di-1 rows and di columns), for i = 1,…,n.
Objective?
Fact 1. Given matrices A with dimension p x q and B
with dimension q x r, multiplication AB takes pqr scalar
multiplications (see handouts).
7/16/2015
15
Example 2. Matrix Chain
Multiplication
Given n matrices M1,M2,…,Mn, compute the product
M1M2M3…Mn, where Mi has dimension di-1 x di (i.e., with
di-1 rows and di columns), for i = 1,…,n.
Objective?
Fact 1. Given matrices A with dimension p x q and B with
dimension q x r, multiplication AB takes pqr scalar
multiplications (see handouts).
So the objective is to compute M1M2M3…Mn with the
minimum number of scalar multiplications.
7/16/2015
16
Example 2. Matrix Chain
Multiplication
Problem: Parenthesize the product M1M2…Mn in a way to
minimize the number of scalar multiplications.
Example.
M1 --- 20 x 10
M2 --- 10 x 50
M3 --- 50 x 5
M4 --- 5 x 30
(M1(M2(M3M4))) --- 28500 multiplications
(M1((M2M3)M4) --- 10000 multiplications
((M1M2)(M3M4)) --- 47500 multiplications
((M1(M2M3))M4) --- 6500 multiplications
(((M1M2)M3)M4) --- 18000 multiplications
7/16/2015
17
Example 2. Matrix Chain
Multiplication
Problem: Parenthesize the product M1M2…Mn in a way to
minimize the number of scalar multiplications.
However, exhaustive search is not efficient. Let P(n) be
the number of alternative parenthesizations of n matrices.
7/16/2015
18
Example 2. Matrix Chain
Multiplication
Problem: Parenthesize the product M1M2…Mn in a way to
minimize the number of scalar multiplications.
However, exhaustive search is not efficient. Let P(n) be
the number of alternative parenthesizations of n matrices.
P(n) = 1,
if n=1
P(n) = ∑k=1 to n-1 P(k)P(n-k), if n ≥ 2
7/16/2015
19
Example 2. Matrix Chain
Multiplication
Problem: Parenthesize the product M1M2…Mn in a way to
minimize the number of scalar multiplications.
However, exhaustive search is not efficient. Let P(n) be
the number of alternative parenthesizations of n matrices.
P(n) = 1,
if n=1
P(n) = ∑k=1 to n-1 P(k)P(n-k), if n ≥ 2
P(n) ≥ 4n-1/(2n2-n). Ex. n = 20, this is > 228.
7/16/2015
20
Example 2. Matrix Chain
Multiplication
So let’s use dynamic programming.
Let mij be the number of multiplications performed using
an optimal parenthesization of MiMi+1…Mj-1Mj.
7/16/2015
21
Example 2. Matrix Chain
Multiplication
So let’s use dynamic programming.
Let mij be the number of multiplications performed using
an optimal parenthesization of MiMi+1…Mj-1Mj.
•mii = 0
•mij = mink{mik + mk+1,j + di-1dkdj, 1 ≤ i ≤ k < j ≤ n}
7/16/2015
22
Example 2. Matrix chain
multiplication
j
1
i
1
2
3
4
0
2
3
4
10000 3500
0
2500
4000
0
7500
Now you see
another difference
between dynamic
programming and
Divide&Conquer --dynamic
programming is
always bottom-up!
Pass 2
0
Pass 1
•mii = 0
Pass 0
•mij = mink{mik + mk+1,j + di-1dkdj, 1 ≤ i ≤ k < j ≤ n}
7/16/2015
23
Example 2. Matrix chain
multiplication
j
1
i
1
2
3
4
0
2
3
10000 3500
0
4
6500
2500
4000
0
7500
m[1,4] contains the
value of the optimal
solution.
0
•mii = 0
•mij = mink{mik + mk+1,j + di-1dkdj, 1 ≤ i ≤ k < j ≤ n}
7/16/2015
24
Example 3. Optimal Polygon
Triangulation
Given a convex polygon P=< v0,v1,…,vn-1 >, a chord vivj
divides P into two polygons <vi,vi+1,…,vj> and
<vj,vj+1,…,vi> (assume vn=v0 or more generally,
vk=vk
mod n).
v5
v4
v6
v3
v2
v7
v1
v8
v0
7/16/2015
25
Example 3. Optimal Polygon
Triangulation
Given a convex polygon P=< v0,v1,…,vn-1 >, a chord vivj
divides P into two polygons <vi,vi+1,…,vj> and
<vj,vj+1,…,vi> (assume vn=v0 or more generally,
vk=vk
mod n).
v5
v4
v6
v3
v2
v7
v1
v8
v0
7/16/2015
26
Example 3. Optimal Polygon
Triangulation
Given a convex polygon P=< v0,v1,…,vn-1 >, it can always
be divided into n-2 non-overlapping triangles using n-3
chords.
v5
v4
v6
v3
v2
v7
v1
v8
v0
7/16/2015
27
Example 3. Optimal Polygon
Triangulation
Given a convex polygon P=< v0,v1,…,vn-1 >, it can always
be divided into n-2 non-overlapping triangles using n-3
chords.
v5
v4
v6
v3
v2
v7
v1
v8
v0
7/16/2015
28
Example 3. Optimal Polygon
Triangulation
Given a convex polygon P=< v0,v1,…,vn-1 >, there could be
a lot of triangulations (in fact, an exponential number of
them).
v5
v4
v6
v3
v2
v7
v1
v8
v0
7/16/2015
29
Example 3. Optimal Polygon
Triangulation
Given a convex polygon P=< v0,v1,…,vn-1 >, we want to
compute an optimal triangulation.
v5
v4
v6
v3
Optimal on
what?
v2
v7
v1
v8
v0
7/16/2015
30
Example 3. Optimal Polygon
Triangulation
Given a convex polygon P=< v0,v1,…,vn-1 >, we want to compute an
optimal triangulation whose weight is minimized.
The weight of a triangulation is the weight of all its triangles and the
weight of a triangle is the sum of its 3 edge lengths.
v5
v4
v6
v3
v2
v7
v1
v8
v0
7/16/2015
31
Example 3. Optimal Polygon
Triangulation
Given a convex polygon P=< v0,v1,…,vn-1 >, we want to compute an
optimal triangulation whose weight is minimized.
The weight of a triangulation is the weight of all its triangles and the
weight of a triangle is the sum of its 3 edge lengths.
v5
The weight of ∆v2v4v6 is
v4
v6
v3
|v2v4|+|v4v6|+|v2v6|
v2
v7
v1
v8
v0
7/16/2015
32
Example 3. Optimal Polygon
Triangulation
Dynamic Solution: Let t[i,j] be the weight of an optimal triangulation of
polygon <vi-1,vi,…,vj>.
vj
vk+1
vk
vi-1
vi
7/16/2015
33
Example 3. Optimal Polygon
Triangulation
Dynamic Solution: Let t[i,j] be the weight of an optimal triangulation of
polygon <vi-1,vi,…,vj>.
vj
t[i,j] = mink { t[i,k] + t[k+1,j] + w(∆vi-1vkvj) }, i<j
t[i,i] = 0
vk+1
vk
vi-1
vi
7/16/2015
34
Example 3. Optimal Polygon
Triangulation
Dynamic Solution: Let t[i,j] be the weight of an optimal triangulation of
polygon <vi-1,vi,…,vj>.
vj
t[i,j] = mink { t[i,k] + t[k+1,j] + w(∆vi-1vkvj) }, i<j
t[i,i] = 0
vk+1
Almost identical to the matrix chain
multiplication problem!
vk
vi-1
vi
7/16/2015
35
Example 4. Longest Common
Subsequence
Example.
X=<A,B,C,B,D>, Y<B,A,D,C>, then <B,C> is a common
subsequence of X and Y.
The problem has applications in bioinformatics and
communications.
7/16/2015
36
Example 4. Longest Common
Subsequence
Given a sequence X=<x1,x2,…,xm>, another sequence
Z=<z1,z2,…,zk> is a subsequence of X if there exists a
strictly increasing sequence <i1,i2,…,ik> such that xij=zj
for j =1,2,…,k.
Example. X=<A,B,C,B,D>, then Z=<A,D> is a
subsequence of X.
Choose i1=1,i2=5, then xi1=z1=A, xi2=z2=D.
7/16/2015
37
Example 4. Longest Common
Subsequence
Given a sequence X=<x1,x2,…,xm>, another sequence
Z=<z1,z2,…,zk> is a subsequence of X if there exists a
strictly increasing sequence <i1,i2,…,ik> such that xij=zj
for j =1,2,…,k.
Example. X=<A,B,C,B,D>, then Z=<A,D> is a
subsequence of X.
Choose i1=1,i2=5, then xi1=z1=A, xi2=z2=D.
•So by name, the LCS of X and Y is a common
subsequence of X and Y whose length is the largest.
7/16/2015
38
Example 4. Longest Common
Subsequence
Example. X=<A,B,C,B,D>, Y=<B,A,C,A,D> then
Z=<A,C,D> is a LCS of X and Y.
Can you find another LCS in this case?
7/16/2015
39
Example 4. Longest Common
Subsequence
Example. X=<A,B,C,B,D>, Y=<B,A,C,A,D> then
Z=<A,C,D> is a LCS of X and Y.
Can you find another LCS in this case?
Z’=<B,C,D> is another LCS, so longest common
subsequence is not unique!
7/16/2015
40
Example 4. Longest Common
Subsequence
Dynamic solution. (For simplicity, let’s say we are only interested in
finding the length.)
-Define table c[-,-]
-c[i,j] stores the length of an LCS of the sequences X[1..i]
and Y[1..j].
c[i,j] = 0,
c[i,j] = c[i-1,j-1] + 1,
c[i,j] = max{ c[i-1,j], c[i,j-1] },
if i=0 or j=0
if i,j>0 and xi = yj
if i,j>0 and xi ≠ yj
7/16/2015
41
Example 2. Matrix chain
multiplication
j
m ← length[X]
n ← length[Y]
For i = 1 to m
do c[i,0] ← 0
For j = 0 to n
do c[0,j] ← 0
For i = 1 to m
for j = 1 to n
if xi = yj
then c[i,j]←c[i-1,j-1]+1
else if c[i-1,j] ≥ c[i,j-1]
then c[i,j] ← c[i-1,j]
else c[i,j] ← c[i,j-1]
0
1
2
3
4
0
0
0
i
0
0
1
0
2
0
3
0
4
0
0
X=<A,C,B,D>
Y=<B,A,C,D>
7/16/2015
42
Example 2. Matrix chain
multiplication
j
m ← length[X]
n ← length[Y]
For i = 1 to m
do c[i,0] ← 0
For j = 0 to n
do c[0,j] ← 0
For i = 1 to m
for j = 1 to n
if xi = yj
then c[i,j]←c[i-1,j-1]+1
else if c[i-1,j] ≥ c[i,j-1]
then c[i,j] ← c[i-1,j]
else c[i,j] ← c[i,j-1]
0
1
2
3
4
i
0
0
0
0
0
0
1
0
0
1
1
1
2
0
3
0
4
0
X=<A,C,B,D>
Y=<B,A,C,D>
7/16/2015
43
Example 2. Matrix chain
multiplication
j
m ← length[X]
n ← length[Y]
For i = 1 to m
do c[i,0] ← 0
For j = 0 to n
do c[0,j] ← 0
For i = 1 to m
for j = 1 to n
if xi = yj
then c[i,j]←c[i-1,j-1]+1
else if c[i-1,j] ≥ c[i,j-1]
then c[i,j] ← c[i-1,j]
else c[i,j] ← c[i,j-1]
0
1
2
3
4
i
0
0
0
0
0
0
1
0
0
1
1
1
2
0
0
1
2
2
3
0
1
1
2
2
4
0
1
1
2
3
X=<A,C,B,D>
Y=<B,A,C,D>
7/16/2015
44