Algorithm
Algorithm
Algorithm
Dynamic Programming
1
Algorithmic Paradigms
Greedy. Build up a solution incrementally, myopically optimizing some local
criterion.
The next time the same subproblem occurs, instead of recomputing its solution,
one simply looks up the previously computed solution, thereby saving computation
time at the expense of a (hopefully) modest expenditure in storage space. Each
of the subproblem solutions is indexed in some way, typically based on the values
of its input parameters, so as to facilitate its lookup. The technique of storing
solutions to subproblems instead of recomputing them is called memoization.
2
Dynamic Programming History
Etymology.
Dynamic programming = planning over time.
Secretary of Defense was hostile to mathematical research.
Bellman sought an impressive name to avoid confrontation.
3
Dynamic Programming Applications
Areas.
Bioinformatics.
Control theory.
Information theory.
Operations research.
Computer science: theory, graphics, AI, compilers, systems, ….
4
6.1 Weighted Interval Scheduling
Weighted Interval Scheduling
h
Time
0 1 2 3 4 5 6 7 8 9 10
6
Unweighted Interval Scheduling Review
weight = 999 b
weight = 1 a
Time
0 1 2 3 4 5 6 7 8 9 10 11
7
Weighted Interval Scheduling
8
Time
0 1 2 3 4 5 6 7 8 9 10 11
8
Dynamic Programming: Binary Choice
0 if j 0
OPT( j)
max v j OPT( p( j)), OPT( j 1) otherwise
9
Weighted Interval Scheduling: Brute Force
Brute force algorithm.
Compute-Opt(j) {
if (j = 0)
return 0
else
return max(vj + Compute-Opt(p(j)), Compute-Opt(j-1))
}
10
Weighted Interval Scheduling: Brute Force
1 4 3
2
3 2 2 1
3
4 2 1 1 0 1 0
5
1 0
p(1) = 0, p(j) = j-2
11
Weighted Interval Scheduling: Memoization
for j = 1 to n
M[j] = empty
M[0] = 0 global array
M-Compute-Opt(j) {
if (M[j] is empty)
M[j] = max(vj + M-Compute-Opt(p(j)), M-Compute-Opt(j-1))
return M[j]
}
12
Weighted Interval Scheduling: Running Time
13
Weighted Interval Scheduling: Finding a Solution
Run M-Compute-Opt(n)
Run Find-Solution(n)
Find-Solution(j) {
if (j = 0)
output nothing
else if (vj + M[p(j)] > M[j-1])
print j
Find-Solution(p(j))
else
Find-Solution(j-1)
}
14
Weighted Interval Scheduling: Bottom-Up
Iterative-Compute-Opt {
M[0] = 0
for j = 1 to n
M[j] = max(vj + M[p(j)], M[j-1])
}
15
6.3 Segmented Least Squares
Segmented Least Squares
Least squares.
Foundational problem in statistic and numerical analysis.
Given n points in the plane: (x1, y1), (x2, y2) , . . . , (xn, yn).
Find a line y = ax + b that minimizes the sum of the squared error:
n
y
SSE ( yi axi b)2
i1
x
n i xi yi (i xi ) (i yi ) i yi a i xi
a , b
n i xi (i xi )
2 2 n
17
Segmented Least Squares
number of lines
x
18
Segmented Least Squares
x
19
Dynamic Programming: Multiway Choice
Notation.
OPT(j) = minimum cost for points p1, pi+1 , . . . , pj.
e(i, j) = minimum sum of squares for points pi, pi+1 , . . . , pj.
To compute OPT(j):
Last segment uses points pi, pi+1 , . . . , pj for some i.
Cost = e(i, j) + c + OPT(i-1).
0 if j 0
OPT( j) min
e(i, j) c OPT(i 1) otherwise
1 i j
20
Segmented Least Squares: Algorithm
INPUT: n, p1,…,pN , c
Segmented-Least-Squares() {
M[0] = 0
for j = 1 to n
for i = 1 to j
compute the least square error eij for
the segment pi,…, pj
for j = 1 to n
M[j] = min 1 i j (eij + c + M[i-1])
return M[n]
}
21
6.4 Knapsack Problem
Knapsack Problem
Knapsack problem.
Given n objects and a "knapsack."
Item i weighs wi > 0 kilograms and has value vi > 0.
Knapsack has capacity of W kilograms.
Goal: fill knapsack so as to maximize total value.
# value weight
Ex: { 3, 4 } has value 40.
1 1 1
2 6 2
W = 11
3 18 5
4 22 6
5 28 7
23
Dynamic Programming: False Start
24
Dynamic Programming: Adding a New Variable
0 if i 0
OPT(i, w) OPT(i 1, w) if w i w
max OPT(i 1, w), v OPT(i 1, w w ) otherwise
i i
25
Knapsack Problem: Bottom-Up
for w = 0 to W
M[0, w] = 0
for i = 1 to n
for w = 1 to W
if (wi > w)
M[i, w] = M[i-1, w]
else
M[i, w] = max {M[i-1, w], vi + M[i-1, w-wi ]}
return M[n, W]
26
Knapsack Algorithm
W+1
0 1 2 3 4 5 6 7 8 9 10 11
0 0 0 0 0 0 0 0 0 0 0 0
{1} 0 1 1 1 1 1 1 1 1 1 1 1
n+1 { 1, 2 } 0 1 6 7 7 7 7 7 7 7 7 7
{ 1, 2, 3 } 0 1 6 7 7 18 19 24 25 25 25 25
{ 1, 2, 3, 4 } 0 1 6 7 7 18 22 24 28 29 29 40
{ 1, 2, 3, 4, 5 } 0 1 6 7 7 18 22 28 29 34 34 40
28
Dynamic Programming Summary
Recipe.
Characterize structure of problem.
Recursively define value of optimal solution.
Compute value of optimal solution.
Construct optimal solution from computed information.
29
6.6 Sequence Alignment
String Similarity
6 mismatches, 1 gap
o c - u r r a n c e
o c c u r r e n c e
1 mismatch, 1 gap
o c - u r r - a n c e
o c c u r r e - n c e
0 mismatches, 3 gaps
31
Edit Distance
Applications.
Basis for Unix diff.
Speech recognition.
Computational biology.
C T G A C C T A C C T - C T G A C C T A C C T
C C T G A C T A C A T C C T G A C - T A C A T
32
Sequence Alignment
Def. An alignment M is a set of ordered pairs xi-yj such that each item
occurs in at most one pair and no crossings.
Def. The pair xi-yj and xi'-yj' cross if i < i', but j > j'.
cost(M ) xi y j
(x i , y j ) M i : x i unmatched j : y j unmatched
mismatch gap
x1 x2 x3 x4 x5 x6
C T A C C - G
Ex: CTACCG vs. TACATG.
Sol: M = x2-y1, x3-y2, x4-y3, x5-y4, x6-y6.
- T A C A T G
y1 y2 y3 y4 y5 y6
33
Sequence Alignment: Problem Structure
j if i 0
x i y j OPT (i 1, j 1)
OPT (i, j) min OPT (i 1, j) otherwise
OPT (i, j 1)
i if j 0
34
Sequence Alignment: Algorithm
for i = 1 to m
for j = 1 to n
M[i, j] = min([xi, yj] + M[i-1, j-1],
+ M[i-1, j],
+ M[i, j-1])
return M[m, n]
}
35
6.7 Sequence Alignment in Linear Space
Sequence Alignment: Linear Space
37
Sequence Alignment: Linear Space
y1 y2 y3 y4 y5 y6
0-0
x1
xi y j
x2
i-j
x3 m-n
38
Sequence Alignment: Linear Space
y1 y2 y3 y4 y5 y6
0-0
x1
x2 i-j
x3 m-n
39
Sequence Alignment: Linear Space
y1 y2 y3 y4 y5 y6
0-0
x1 i-j
xi y j
x2
x3 m-n
40
Sequence Alignment: Linear Space
y1 y2 y3 y4 y5 y6
0-0
x1 i-j
x2
x3 m-n
41
Sequence Alignment: Linear Space
y1 y2 y3 y4 y5 y6
0-0
x1 i-j
x2
x3 m-n
42
Sequence Alignment: Linear Space
n/2
y1 y2 y3 y4 y5 y6
0-0
x1 i-j q
x2
x3 m-n
43
Sequence Alignment: Linear Space
Divide: find index q that minimizes f(q, n/2) + g(q, n/2) using DP.
Align xq and yn/2.
Conquer: recursively compute optimal alignment in each piece.
n/2
y1 y2 y3 y4 y5 y6
0-0
x1 i-j q
x2
x3 m-n
44
Sequence Alignment: Running Time Analysis Warmup
Remark. Analysis is not tight because two sub-problems are of size
(q, n/2) and (m - q, n/2). In next slide, we save log n factor.
45
Sequence Alignment: Running Time Analysis
Base cases: m = 2 or n = 2.
Inductive hypothesis: T(m, n)
2cmn.
46
Kleinberg 6.1 (HW)
47
Kleinberg 6.1 (HW)
(a) Give an example to show that the following algorithm doesn’t always
find an independent set of max total weight.
Algo: “heaviest-first”
{
S=empty set
while (some node remains in G)
{
Pick node with max weight and add it to S; delete this node and
its neighbors
}
}
48
Kleinberg 6.1 (HW)
(c) Give an algorithm that takes an n-node path G with weights and
returns an independent set of maximum total weight. The running time
should be polynomial in n, independent of the values of the weights.
49
Kleinberg 6.1 (HW)
(c) Give an algorithm that takes an n-node path G with weights and
returns an independent set of maximum total weight. The running time
should be polynomial in n, independent of the values of the weights.
50
Kleinberg 6.1 (HW)
#1: Goal: Find an independent set in a path G whose total weight is as
large as possible.
(c) Give an algorithm that takes an n-node path G with weights and
returns an independent set of maximum total weight. The running time
should be polynomial in n, independent of the values of the weights.
51
Kleinberg 6.1 (HW)
#1: Goal: Find an independent set in a path G whose total weight is as
large as possible.
(c) Give an algorithm that takes an n-node path G with weights and
returns an independent set of maximum total weight. The running time
should be polynomial in n, independent of the values of the weights.
52
Kleinberg 6.3 (HW)
#3: Let G=(V,E) be a directed graph with nodes v1,…,vn. We say that G
is an ordered graph if it has the following properties:
(i) Each edge goes from a node with a lower index to a node with a
higher index; i.e., each directed edge has the form (vi,vj) with i<j.
(ii) Each node expect vn has at least one edge leaving it. That is, for
every node vi, i=1,2,…,n-1 there is at least one edge of the form
(vi,vj).
Given an ordered graph G, find the length of the longest path that
begins at v1 and ends at vn.
53
Kleinberg 6.3 (HW)
#3:The length of a path is the number of edges it contains. The goal is
to solve:
Given an ordered graph G, find the length of the longest path that
begins at v1 and ends at vn.
54
Kleinberg 6.3 (HW)
#3:(b) Give an efficient algorithm that takes an ordered graph G and returns the length of
the lonest path that begins at v1 and end at vn.
Idea: Use DP structure; consider subproblems OPT[i], the length of the longest path from
v1 to vi in ordered graph, G. One caveat: not all nodes vi necessarily have a path from v1 to vi;
let’s use the value “-inf” in this case.
Define OPT[1]=0 (base case); use for loop:
M[1]=0
for i=2,..,n
{
M=-inf
for all edges (j,i) in G
{
if M[j]=!-inf && M<M[j]+1
then M=M[j]+1
/endif
} /end for
M[i]=M
} /endfor 55
Kleinberg 6.3 (HW)
#3:(b) Give an efficient algorithm that takes an ordered graph G and
returns the length of the lonest path that begins at v1 and end at vn.
58
Kleinberg 6.11 (HW)
#11: Suppose you’re consulting for a company that manufactures PC equipment
and ships it to distributors all over the country. For each of the next n weeks,
they have a projected supply si of equipment (measured in pounds), which has to
be shipped by an air freight carrier.
Each week’s supply can be carried by one of two air freight companies: A or B.
(*) Company A charges a fixed rate r per pound (so it costs r*si to ship a week’s
supply si).
(*) Company B makes contracts for a fixed amount c per week, independent of
the weight. However, contracts with company B must be made in blocks of four
consecutive weeks at a time.
59
Kleinberg 6.11 (HW)
#11: Suppose you’re consulting for a company that manufactures PC equipment
and ships it to distributors all over the country. For each of the next n weeks,
they have a projected supply si of equipment (measured in pounds), which has to
be shipped by an air freight carrier.
Each week’s supply can be carried by one of two air freight companies: A or B.
(*) Company A charges a fixed rate r per pound (so it costs r*si to ship a week’s
supply si).
(*) Company B makes contracts for a fixed amount c per week, independent of
the weight. However, contracts with company B must be made in blocks of four
consecutive weeks at a time.
Then the optimal schedule would be to choose company A for first three weeks,
then company B for a block of four consecutive weeks, and then company A for
the final three weeks.
61
Kleinberg 6.11 (HW)
#11: Give a polynomial-time algorithm that takes a sequence of supply
values s1, s2,….,sn and returns a schedule of minimum cost.
Let OPT[i] denote the minimum cost of a solution for weeks 1 through i. In an
optimal solution, we either use company A or B for the ith week.
If we use company A, we pay r*si and behave optimally up through week i-1; else
we use company B and pay 4c for this contract, and we behave optimally through
week i-4.
62
Kleinberg 6.11 (HW)
#11: Give a polynomial-time algorithm that takes a sequence of supply
values s1, s2,….,sn and returns a schedule of minimum cost.
Let OPT[i] denote the minimum cost of a solution for weeks 1 through i. In an
optimal solution, we either use company A or B for the ith week.
If we use company A, we pay r*si and behave optimally up through week i-1; else
we use company B and pay 4c for this contract, and we behave optimally through
week i-4.
63