Dynamic Programming KunMao Chao Department of Computer Science

  • Slides: 21
Download presentation
Dynamic Programming Kun-Mao Chao (趙坤茂) Department of Computer Science and Information Engineering National Taiwan

Dynamic Programming Kun-Mao Chao (趙坤茂) Department of Computer Science and Information Engineering National Taiwan University, Taiwan E-mail: kmchao@csie. ntu. edu. tw WWW: http: //www. csie. ntu. edu. tw/~kmchao

Dynamic Programming • Dynamic programming is a class of solution methods for solving sequential

Dynamic Programming • Dynamic programming is a class of solution methods for solving sequential decision problems with a compositional cost structure. • Richard Bellman was one of the principal founders of this approach. 2

Two key ingredients • Two key ingredients for an optimization problem to be suitable

Two key ingredients • Two key ingredients for an optimization problem to be suitable for a dynamicprogramming solution: 1. optimal substructures 2. overlapping subproblems Subproblems are dependent. Each substructure is optimal. (otherwise, a divide-andconquer approach is the (Principle of optimality) 3 choice. )

Three basic components • The development of a dynamicprogramming algorithm has three basic components:

Three basic components • The development of a dynamicprogramming algorithm has three basic components: – The recurrence relation (for defining the value of an optimal solution); – The tabular computation (for computing the value of an optimal solution); – The traceback (for delivering an optimal solution). 4

Fibonacci numbers The Fibonacci numbers are defined by the following recurrence: F =0 0

Fibonacci numbers The Fibonacci numbers are defined by the following recurrence: F =0 0 F =1 1 F = F - + F - for i>1. i i 1 i 2 5

How to compute F 10? F 10 F 9 F 8 F 7 ……

How to compute F 10? F 10 F 9 F 8 F 7 …… F 7 F 6 6

Tabular computation • The tabular computation can avoid recompuation. F 0 F 1 F

Tabular computation • The tabular computation can avoid recompuation. F 0 F 1 F 2 F 3 F 4 F 5 F 6 F 7 F 8 F 9 F 10 0 1 1 2 3 5 8 13 21 34 55 7

Longest increasing subsequence(LIS) • The longest increasing subsequence is to find a longest increasing

Longest increasing subsequence(LIS) • The longest increasing subsequence is to find a longest increasing subsequence of a given sequence of distinct integers a 1 a 2…an. e. g. 9 2 5 3 7 11 8 10 13 6 2 3 7 5 7 10 13 9 7 11 10 3 5 11 13 are increasing subsequences. We want to find a longest one. are not increasing subsequences. 8

A naive approach for LIS • Let L[i] be the length of a longest

A naive approach for LIS • Let L[i] be the length of a longest increasing subsequence ending at position i. L[i] = 1 + max j = 0. . i-1{L[j] | aj < ai} (use a dummy a 0 = minimum, and L[0]=0) 9 2 5 3 7 11 8 10 13 6 L[i] 1 1 2 2 3 4 ? 9

A naive approach for LIS L[i] = 1 + max j = 0. .

A naive approach for LIS L[i] = 1 + max j = 0. . i-1 {L[j] | aj < ai} 9 2 5 3 7 11 8 10 13 6 L[i] 1 1 2 2 3 4 4 5 6 3 The maximum length The subsequence 2, 3, 7, 8, 10, 13 is a longest increasing subsequence. This method runs in O(n 2) time. 10

An O(n log n) method for LIS • Define Best. End[k] to be the

An O(n log n) method for LIS • Define Best. End[k] to be the smallest number of an increasing subsequence of length k. 9 2 5 3 7 11 8 10 13 9 2 2 3 7 11 2 3 7 8 10 13 2 5 2 3 7 6 Best. End[1] Best. End[2] Best. End[3] Best. End[4] Best. End[5] Best. End[6] 11

An O(n log n) method for LIS • Define Best. End[k] to be the

An O(n log n) method for LIS • Define Best. End[k] to be the smallest number of an increasing subsequence of length k. 9 2 5 3 7 11 8 10 13 9 2 2 3 7 11 2 3 7 8 10 13 2 5 2 3 7 For each position, we perform a binary search to update Best. End. Therefore, the running time is O(n log n). 6 2 3 6 8 10 13 Best. End[1] Best. End[2] Best. End[3] Best. End[4] Best. End[5] Best. End[6] 12

Longest Common Subsequence (LCS) • A subsequence of a sequence S is obtained by

Longest Common Subsequence (LCS) • A subsequence of a sequence S is obtained by deleting zero or more symbols from S. For example, the following are all subsequences of “president”: pred, sdn, predent. • The longest common subsequence problem is to find a maximum-length common subsequence between two sequences. 15

LCS For instance, Sequence 1: president Sequence 2: providence Its LCS is priden. president

LCS For instance, Sequence 1: president Sequence 2: providence Its LCS is priden. president providence 16

LCS Another example: Sequence 1: algorithm Sequence 2: alignment One of its LCS is

LCS Another example: Sequence 1: algorithm Sequence 2: alignment One of its LCS is algm. a l g o r i t h m a l i g n m e n t 17

How to compute LCS? • Let A=a 1 a 2…am and B=b 1 b

How to compute LCS? • Let A=a 1 a 2…am and B=b 1 b 2…bn. • len(i, j): the length of an LCS between a 1 a 2…ai and b 1 b 2…bj • With proper initializations, len(i, j)can be computed as follows. 18

19

19

20

20

21

21

22

22

Longest Common Increasing Subsequence • Proposed by Yang, Huang and Chao – IPL 2005

Longest Common Increasing Subsequence • Proposed by Yang, Huang and Chao – IPL 2005 • Improvement for some special case: – Katriel and Kutz (March 2005) – Chan, Zhang, Fung, Ye and Zhu (ISAAC 2005) 23