8 -1 Chapter 8 Dynamic Programming
8 -2 Fibonacci sequence Fibonacci sequence: 0, 1, 1, 2, 3, 5, 8, 13, 21, … F i = i if i 1 F i = F i-1 + F i-2 if i 2 Solved by a recursive program: Much replicated computation is done. It should be solved by a simple loop.
8 -3 Dynamic Programming Dynamic Programming is an algorithm design method that can be used when the solution to a problem may be viewed as the result of a sequence of decisions
8 -4 The shortest path To find a shortest path in a multi-stage graph Apply the greedy method : the shortest path from S to T : = 8
8 -5 The shortest path in multistage graphs e.g. The greedy method can not be applied to this case: (S, A, D, T) = 23. The real shortest path is: (S, C, F, T) = 9.
8 -6 Dynamic programming approach Dynamic programming approach (forward approach): d(S, T) = min{1+d(A, T), 2+d(B, T), 5+d(C, T)} d(A,T) = min{4+d(D,T), 11+d(E,T)} = min{4+18, 11+13} = 22.
8 -7 Dynamic programming d(B, T) = min{9+d(D, T), 5+d(E, T), 16+d(F, T)} = min{9+18, 5+13, 16+2} = 18. d(C, T) = min{ 2+d(F, T) } = 2+2 = 4 d(S, T) = min{1+d(A, T), 2+d(B, T), 5+d(C, T)} = min{1+22, 2+18, 5+4} = 9. The above way of reasoning is called backward reasoning.
8 -8 Backward approach (forward reasoning) d(S, A) = 1 d(S, B) = 2 d(S, C) = 5 d(S,D)=min{d(S, A)+d(A, D),d(S, B)+d(B, D)} = min{ 1+4, 2+9 } = 5 d(S,E)=min{d(S, A)+d(A, E),d(S, B)+d(B, E)} = min{ 1+11, 2+5 } = 7 d(S,F)=min{d(S, A)+d(A, F),d(S, B)+d(B, F)} = min{ 2+16, 5+2 } = 7
8 -9 d(S,T) = min{d(S, D)+d(D, T),d(S,E)+ d(E,T), d(S, F)+d(F, T)} = min{ 5+18, 7+13, 7+2 } = 9
8 -10 Principle of optimality Principle of optimality: Suppose that in solving a problem, we have to make a sequence of decisions D 1, D 2, …, D n. If this sequence is optimal, then the last k decisions, 1 k n must be optimal. e.g. the shortest path problem If i, i 1, i 2, …, j is a shortest path from i to j, then i 1, i 2, …, j must be a shortest path from i 1 to j In summary, if a problem can be described by a multistage graph, then it can be solved by dynamic programming.
8 -11 Forward approach and backward approach: Note that if the recurrence relations are formulated using the forward approach then the relations are solved backwards. i.e., beginning with the last decision On the other hand if the relations are formulated using the backward approach, they are solved forwards. To solve a problem by using dynamic programming: Find out the recurrence relations. Represent the problem by a multistage graph. Dynamic programming
8 -12 The resource allocation problem m resources, n projects profit p(i, j) : j resources are allocated to project i. maximize the total profit.
8 -13 The multistage graph solution The resource allocation problem can be described as a multistage graph. (i, j) : i resources allocated to projects 1, 2, …, j e.g. node H=(3, 2) : 3 resources allocated to projects 1, 2.
8 -14 Find the longest path from S to T : (S, C, H, L, T), =13 2 resources allocated to project 1. 1 resource allocated to project 2. 0 resource allocated to projects 3, 4.
8 -15 The traveling salesperson (TSP) problem e.g. a directed graph : Cost matrix:
8 -16 A multistage graph can describe all possible tours of a directed graph. Find the shortest path: (1, 4, 3, 2, 1) =17 The multistage graph solution
8 -17 The representation of a node Suppose that we have 6 vertices in the graph. We can combine {1, 2, 3, 4} and {1, 3, 2, 4} into one node. (3),(4,5,6) means that the last vertex visited is 3 and the remaining vertices to be visited are (4, 5, 6).
8 -18 The dynamic programming approach Let g(i, S) be the length of a shortest path starting at vertex i, going through all vertices in S and terminating at vertex 1. The length of an optimal tour : The general form: Time complexity: ( ),( ) (n-k) (n-1)
8 -19 The longest common subsequence (LCS) problem A string : A = b a c a d A subsequence of A: deleting 0 or more symbols from A (not necessarily consecutive). e.g. ad, ac, bac, acad, bacad, bcd. Common subsequences of A = b a c a d and B = a c c b a d c b : ad, ac, bac, acad. The longest common subsequence (LCS) of A and B: a c a d.
8 -20 The LCS algorithm Let A = a 1 a 2 a m and B = b 1 b 2 b n Let L i,j denote the length of the longest common subsequence of a 1 a 2 a i and b 1 b 2 b j. L i,j = L i-1,j if a i =b j max{ L i-1,j, L i,j-1 } if a i b j L 0,0 = L 0,j = L i,0 = 0 for 1 i m, 1 j n.
8 -21 The dynamic programming approach for solving the LCS problem: Time complexity: O(mn)
8 -22 Tracing back in the LCS algorithm e.g. A = b a c a d, B = a c c b a d c b After all L i,j ’ s have been found, we can trace back to find the longest common subsequence of A and B.
课堂练习 设有 n 种不同面值的硬币,各硬币的面值 存在于数足 T[n] 中。现要用这些面值的 硬币来找钱。可以使用的各种面值的硬 币个数存于数组 Coins[n] 中。对任意钱数 0<=m<=2010 ,设计一个用最少硬币找 钱 m 的方法。 8 -23
Description 在 Mars 星球上,每个 Mars 人都随身佩带着一串 能量项链。在项链上有 N 颗能量珠。能量珠是一 颗有头标记与尾标记的珠子,这些标记对应着 某个正整数。并 且,对于相邻的两颗珠子,前 一颗珠子的尾标记一定等于后一颗珠子的头标 记。因为只有这样,通过吸盘(吸盘是 Mars 人 吸收能量的一种器官)的作用,这两颗 珠子才 能聚合成一颗珠子,同时释放出可以被吸盘吸 收的能量。如果前一颗能量珠的头标记为 8 -24
尾标记为 r ,后一颗能量珠的头标记为 r ,尾标记 为 n ,则聚合后 释放的能量为 m*r*n ( Mars 单位 ),新产生的珠子的头标记为 m ,尾标记为 n 。 需要时, Mars 人就用吸盘夹住相邻的两颗珠 子,通过聚合得到能量,直到项链上只剩下一颗 珠子为止。显然,不同的聚合顺序得到的总能量 是不同的,请你设计一个聚合顺序,使一串项链 释放出的总能量最大。 例如:设 N=4 , 4 颗珠子的头标记与尾标记依 次为 (2 , 3) (3 , 5) (5 , 10) 8 -25
(10 , 2) 。我们用记号⊕表示两颗珠子的聚合操 作, (j ⊕ k) 表示第 j , k 两颗珠子聚合后所释放的 能量。则第 4 、 1 两颗珠子聚合后释放的能量为: (4 ⊕ 1)=10*2*3=60 。 这一串项链可以得到最优值的一个聚合顺序所释 放的总能量为 ((4 ⊕ 1) ⊕ 2) ⊕ 3 ) =10*2*3+10*3*5+10*5*10=710 。 Input 输入的第一行是一个正整数 N ( 4≤N≤100 ),表 示项链上珠子的个数。第二行是 N 个用空格隔开 的正整数,所有的数均不超过 1000 。第 i 个数为 第 i 颗珠子的头标 8 -26
/1 knapsack problem n objects, weight W 1, W 2, ,W n profit P 1, P 2, ,P n capacity M maximize subject to M x i = 0 or 1, 1 i n e. g.
8 -28 The multistage graph solution The 0/1 knapsack problem can be described by a multistage graph.
8 -29 The dynamic programming approach The longest path represents the optimal solution: x 1 =0, x 2 =1, x 3 =1 = = 50 Let f i (Q) be the value of an optimal solution to objects 1,2,3, …,i with capacity Q. f i (Q) = max{ f i-1 (Q), f i-1 (Q-W i )+P i } The optimal solution is f n (M).
8 -30 Optimal binary search trees e.g. binary search trees for 3, 7, 9, 12;
8 -31 Optimal binary search trees n identifiers : a 1 <a 2 <a 3 < … < a n P i, 1 i n : the probability that a i is searched. Q i, 0 i n : the probability that x is searched where a i < x < a i+1 (a 0 =- , a n+1 = ).
8 -32 Identifiers : 4, 5, 8, 10, 11, 12, 14 Internal node : successful search, P i External node : unsuccessful search, Q i The expected cost of a binary tree: The level of the root : 1
8 -33 The dynamic programming approach Let C(i, j) denote the cost of an optimal binary search tree containing a i, …,a j. The cost of the optimal binary search tree with a k as its root :
8 -34 General formula
8 -35 Computation relationships of subtrees e.g. n=4 Time complexity : O(n 3 ) when j-i=m, there are (n-m) C(i, j) ’ s to compute. Each C(i, j) with j-i=m can be computed in O(m) time.
8 -36 Matrix-chain multiplication n matrices A 1, A 2, …, A n with size p 0 p 1, p 1 p 2, p 2 p 3, …, p n-1 p n To determine the multiplication order such that # of scalar multiplications is minimized. To compute A i A i+1, we need p i-1 p i p i+1 scalar multiplications. e.g. n=4, A 1 : 3 5, A 2 : 5 4, A 3 : 4 2, A 4 : 2 5 ((A 1 A 2 ) A 3 ) A 4, # of scalar multiplications: 3 * 5 * * 4 * * 2 * 5 = 114 (A 1 (A 2 A 3 )) A 4, # of scalar multiplications: 3 * 5 * * 4 * * 2 * 5 = 100 (A 1 A 2 ) (A 3 A 4 ), # of scalar multiplications: 3 * 5 * * 4 * * 2 * 5 = 160
8 -37 Let m(i, j) denote the minimum cost for computing A i A i+1 … A j Computation sequence : Time complexity : O(n 3 )