• 沒有找到結果。

Divide-and-Conquer v.s. Dynamic Programming

N/A
N/A
Protected

Academic year: 2021

Share "Divide-and-Conquer v.s. Dynamic Programming"

Copied!
58
0
0

加載中.... (立即查看全文)

全文

(1)

國立聯合大學

國立聯合大學 資訊管理學系資訊管理學系陳士杰老師陳士杰老師

Course 6

動態規劃

Dynamic Programming

(2)

‹本章重點

„

Divide-and-Conquer v.s. Dynamic Programming

„

Dynamic Programming v.s. Greedy Approach

„

Floyd's Algorithm for Shortest Paths

„

Chained Matrix Multiplication

„

Dynamic Programming and Optimization Problems

(3)

‹由前一單元得知,Divided-and-Conquer即為遞迴 解法。

‹以費氏數 (Fibonacci Number) 說明:

⎪ ⎩

⎪ ⎨

≥ +

=

=

=

, 2

1 ,

1

0 ,

0

2

1

F if n

F

n if

n if

F

n n

n

終止條件終止條件

遞迴關係遞迴關係

(4)

inputs

inputs: num identified the ordinal of the Fibonacci number

outputs

outputs: returns the nth Fibonacci number

void Fib(int n)

{

if (n is 0

OR n is 1)

return n;

else

return (Fib(n-1) + Fib(n-2));

}

(5)

‹

Based on recursive function, 求取Fib (8)的過程如下:

‹

Top-Down求算方式

‹

子問題重覆 (Overlapping Subproblem)

>是Divided-and-Conquer主要的問題所在

(6)

‹ 以人的方式求算:

‹ 求算F8和F7時,F6會被用到2次,但我們用表格表格記錄已算過的部份!!

‹ Bottom-Up求算方式

‹‹ 動態規劃動態規劃 (Dynamic Programming)

(Dynamic Programming)

是一種表格式的演算法設計原則。

„ 其精神是將一個較大的問題定義為較小的子問題組合,先處理較小的問題,

將其用表格儲存起來,再進一步地以較小問題的解逐步建構出較大問題的將其用表格儲存起來 解。

„„ ProgrammingProgramming: 用表格存起來,有 “以空間換取時間以空間換取時間”之涵意

{ 屬於作業研究 (OR)的技巧

n 0 1 2 3 4 5 6 7 8

F

n

0 1 1 2 3 5 8 13 21

(7)

‹

Divide-and-Conquer 和 Dynamic Programming都是將問題 切割再採用遞迴方式處理子問題,但是:

„ Divide-and-Conquer可能會對相同子問題進行重覆計算重覆計算

„ Dynamic Programming會使用表格表格將子問題的計算結果加以儲 存,在後面階段如果需要這個計算結果,再直接由表格中取出使 用,因此可以避免許多重覆的計算,以提高效率。

‹

Divide-and-Conquer v.s. Dynamic Programming

Divide-and-Conquer Dynamic Programming

額外記憶體空間 不需額外記憶體空間 需要額外記憶體空間

解題方式 Top-Down Bottom-Up

適用時機 適用non-overlap子問題 適用overlap子問題

(8)

‹ 對於具有限制的最佳化問題具有限制的最佳化問題,可以採用 “貪婪法則” 或 “動態規劃” 來設 計演算法則。

„ Greedy Approach:

{ 是一種階段性階段性 (Stage)(Stage)的方法

{ 具有一選擇程序選擇程序 (Selection Procedure)(Selection Procedure),自某起始點(值) 開始,在每一個階 段逐一檢查每一個輸入是否適合加入答案中,重複經過多個階段後,即可順利 獲得最佳解

{

{ 較為簡單較為簡單 (∴若遇最佳化問題,先思考可否用Greedy Approach解,若不行再考 慮用Dynamic Programming)

{ 如果所要處理的最佳化問題無法找到一個選擇程序來逐一檢查,則需要以一次 考慮所有的可能情況的方式來處理,就是屬於Dynamic Programming

„ Dynamic Programming

{ 先把所有的情況都看過一遍,才去挑出最佳的結果

{ 考慮問題所有可能的情況,將最佳化問題的目標函數表示成一個遞迴關係式,

結合Table的使用以找出最佳解

(9)

‹

Ex 1. 有一Graph如下,每一個邊都有一權重值,試找出 “具 最小權重值總合且不包含Cycle” 的 Graph。

‹

Sol: (選擇程序) 從最小的邊

最小的邊開始逐一選擇,挑選出來的邊

不能構成Cycle,直到所有的邊都被選完為止。

A B

C 2 D

1

4 3

2

A B

C

D 3 1

2

A B

C 2 D 3 1

(10)

‹

Ex 2. 一有向加權圖Graph如下,該圖可分成2個部份,請找 出由第一個部份的出發頂點到最後部份的目的地頂點的最 短距離路。

‹

Sol: 找不到一個選擇程序,可自某起始點(值) 開始逐一檢 查每一個輸入是否適合加入答案中。

A

B

C

D 2

4

3 2

A

B

C

D 2

4

3 2

(11)

‹使用Dynamic Programming解決問題的過程如下:

„

先找出問題的

遞迴式遞迴式

(遞迴關係式; Recurrence Relations)

„

接著,透過Forward Approach或是Backward Approach,

利用

迴圈與迴圈 表格來處理遞迴式,進而解決問題。表格

{ 假設有n個數值 (X1, X2, …, Xi-2, Xi-1, Xi, Xi+1, Xi+2, …, Xn-1, Xn)

{{ Forward Approach

Forward Approach

(前向法;順向法)

‡ 如果要計算出Xi的值,需要透過前方(Xi+1, …, Xn-1, Xn)等數值資料

‡ 由Xn向後求解問題的解答(Solved Backward)

{{ Backward Approach

Backward Approach

(後向法;逆向法)

‡ 如果要計算出Xi的值,需要透過後方(X1, X2, …, Xi-1)等數值資料

‡ 由X1向前求解問題的解答(Solved Forwards)

(12)

‹‹ 最短路徑最短路徑

(Shortest Path) (Shortest Path)

問題問題

„

„ 求單一頂點到其它頂點之最短路徑求單一頂點到其它頂點之最短路徑 (Single pair shortest path

Single pair shortest path)

{ 使用DijkstraDijkstra’s’s AlgorithmAlgorithm

‡ 採用 “貪婪演算法” 之解題策略

‡ 找出某一頂點到其它頂點之最短路徑之時間複雜度為O(n2)

„

„ 求所有頂點之間的最短路徑求所有頂點之間的最短路徑 (All pair shortest path

All pair shortest path)

{ 使用nnDijkstra’Dijkstra’ss AlgorithmAlgorithm

‡ 每一次帶不同的起始點

‡ 需要的時間複雜度 O(n3)

{ 使用Floyd’Floyd’s Algorithms Algorithm

‡ 採用 “動態規劃” 之解題策略

(13)

‹

最短路徑問題其實是

最佳化問題最佳化問題

(Optimization (Optimization problem)

problem)

„ 一個最佳化問題可能會有一個以上的候選解候選解

(Candidate (Candidate Solution)

Solution)

„ 每一個候選解都具有一個值

(Value) (Value)

,而該問題的解就是具有最 佳值的那個解。

„ 隨著問題的不同,最佳解可能是要求最小值,也可能是最大值。

‹

因此,在Shortest Paths problem中:

„ 一個

Candidate solution Candidate solution

就是從某個頂點到另一個頂點的路徑

„ 候選解的

value value

則是該條路徑的長度

„

„

Optimal value Optimal value

則是這些長度當中最小的值

(14)

‹

‹ All-

All

-pair Shortest Pathpair Shortest Path問題問題

„ 給定一個有向加權圖形 (Directed Weighted Graph),G=(V, E),找出任意任意 兩個頂點兩個頂點 (v1, v2 ∈ V) 之間的最短路徑

‹ 在Figure 3.2中,

v

1

v

3存在三條簡單路徑:[[

v v

11, ,

v v

22, ,

v v

33],] [[

v v

11, ,

v v

44, ,

v v

33]] [[

v v

11, ,

v v

22, ,

v v

44, ,

v v

33]] 。由於:

因此,[

v

1,

v

4,

v

3] 是

v

1

v

3的最短路徑。

簡單路徑(Simple path):該路徑 中,同一頂點不會出現兩次。

(15)

‹

佛洛依德最短路徑演算 法 (Floyd‘s Algorithm for Shortest Paths) :

„ Floyd-Warshall Algorithm

„ 假設G=(V, E),|V| = n

„„

D D

kk矩陣: 為一 n×n的矩矩陣 陣,其中Dk[i, j]表示自 vi vj (vi → vj )的最短路徑 長,且途中經過的頂點編 號均 kk (其中k≥0)

v1 v2

v3 6 11 4

3 2

D1[2, 1] = 6 2 → 1 (合法)

2 → 1 → 2 → 1 (不合法) 2 → 3 → 1 (不合法)

D2[2, 1] = 6 2 → 1 (合法)

2 → 1 → 2 → 1 (合法) 2 → 3 → 1 (不合法) D3[2, 1] = 5

2 → 1 (合法)

2 → 1 → 2 → 1 (合法) 2 → 3 → 1 (合法)

„ 範例:

∵節點個數為 3

D3[i, j]可得到總體最短路徑總體

(16)

‹

當k = 0時, 矩陣D

0[i, j]表示為Adjacency Matrix (

Adjacency Matrix (相鄰矩

相鄰矩

; W)。 ; W)

„ vi vj 途中不會經過其它頂點

‹

Floyd‘s Algorithm求解過程:

„ 找出相鄰矩陣 W

„ 逐步求出D1, D2, …, Dn矩陣

„ Dn矩陣即為結果

v1 v2

v3 6 11 4

3 2

⎥ ⎥

⎢ ⎢

=

=

0 3

2 0

6

11 4

0

3 2 1

3 2

1

v v v

v v

v W

D

0

(17)

‹

求解右圖的All-pair Shortest Path Sol:

„ 找出相鄰矩陣 W

„ 逐步求出D1, D2, D3矩陣

{ Step 1: 由 W 矩陣求出 D1 矩陣

⎥ ⎥

⎢ ⎢

=

=

0 3

2 0

6

11 4

0

3 2 1

3 2

1

v v v

v v

v W

D

0

v1 v2

v3 6 11 4

3 2

⎥ ⎥

⎢ ⎢

=

D

1

3 2 1

3 2

1

v v v

v v

v

⎥ ⎥

⎢ ⎢

=

0 3

2 0

6

11 4

0

3 2 1

3 2

1

v v v

v v

v W

0

0

0 4 11 6

3

⎩ ⎨

=

=

17 3

1 2

2 3

2

=

=

7 2 1

3

2

3 2

7

(18)

{ Step 2: 由 D1 矩陣求出 D2 矩陣

{ Step 3: 由 D2 矩陣求出 D3 矩陣

⎥ ⎥

⎢ ⎢

=

0 7 3

2 0 6

11 4

0

3 2 1

3 2

1

v v v

v v

v D

1

⎥ ⎥

⎢ ⎢

=

D

3

3 2 1

3 2

1

v v v

v v

v

⎥ ⎥

⎢ ⎢

=

0 7 3

2 0 6

6 4 0

3 2 1 2

3 2

1

v v v

v v

v D

0

0 3 7 0

6

2

⎩ ⎨ ⎧

=

=

2 3

1

4 2

1

=

=

5 1 3

2

6 1

2 4

5

⎥ ⎥

⎢ ⎢

=

D

2

3 2 1

3 2

1

v v v

v v

v

0

0

0

6 2

4

7

⎩ ⎨

=

=

6 3 2

1

11 3

1

=

=

1 2

3

3 1

3 6

3

(19)

//k為 Dk 的k值

Time Complexity: O(n

Time Complexity: O(n

33

) )

(20)

‹

Floyd‘s Algorithm觀念圖解:

„ 求矩陣Dk[i, j],是由矩陣Dk-1[i, j]而來

„ 遞迴式:

vi vj

vk Dk-1[i, j]

Dk-1[i, k] Dk-1[k, j]

⎩ ⎨

>

+

=

=

0 k

if

0 k

if

]), ,

[ ]

, [ ],

, [ min(

], , ] [

,

[

1 1 1

j k D

k i D

j i D

j i j W

i

D

k k k k

(21)

‹

Floyd‘s Algorithm的假設條件:

„

圖形中不得有

負長度的Cycle存在負長度

„

例 1: 1 →2的最短路徑為 -∞

„

例 2: 1 →2的最短路徑為 3

1 2 3

2 4

-4

1 2 3

3 4

-1

(22)

‹

假設我們要將一個 2 × 3 的矩陣乘上一個 3 × 4 的矩陣:

„ 所產生的結果為一個 2 × 4的矩陣

„ 結果矩陣中的每一個元素都必須經過3次乘法的運算

„ 因為結果矩陣中有 2 × 4 = 8個元素,因此總共需要的乘法次數為:

‹

一般來說,一個 i × j matrix 乘上一個 j × k matrix ,總共需

要的乘法次數為:

(23)

‹

Note: n個matrix相乘有 種可能的配對組合 (括號方式)

„ Ex: 以下有四個矩陣相乘:

由Note得知共有五種不同的相乘順序,不同的順序需要不同的乘法 次數:

其中,以第三組是最佳的矩陣相乘順序。

n n

Cn n ⎟⎟

⎜⎜

=

1

) 1 (

2

1

(24)

‹

Chained Matrix Multiplication:

„ Def: 給一Matrix Chain: A1, A2, …, An,求此Chain所需之乘法次數為 少之括號方式 (即: 最佳的矩陣乘法組合方式)。

‹

若A

i

, A

i+1

, …, A

j

在某組合方式所需的乘法次數為最小 (最

佳),則必存在一個k,使得A

i

, A

i+1

, …, A

k

和A

k+1

, A

k+2

, …, A

j

皆 為最佳。

((A

i

A

i+1

… A

k

)(A

k+1

A

k+2

…, A

j

))

最佳組合

最佳子組合 最佳子組合

(25)

‹

Matrix Chain的遞迴式

‹

此遞迴式涵蓋以下兩個規則:

„ M[i][j] = 矩陣Ai乘到Aj所需的最少乘法數 (其中 i < j)

„ M[i][i] = 0

⎪⎩

⎪ ⎨

<

+ +

+

= =

min {M[i, k] M[k 1, j] d d d } if i j j i if

j] 0 M[i,

j k 1 1 i

j k i

(26)

‹

Chained Matrix Multiplication 問題的演算法需有兩個表格和 一個主要變數:

„ M[i, j]

{ 記錄多個矩陣相乘 (e.g., Ai × … × Aj)時,所需的 “最少” 乘法次數

„ P[i, j]

{ 記錄多個矩陣相乘 (e.g., Ai × … × Aj) 所需最少乘法次數之 “最佳乘法順 序” 是由哪一個矩陣開始分割

„ diagonal

{ 主要指出在Matrix Chain中,每一次有多少個矩陣要相乘

‡ diagonal = 1 > 只有1個矩陣,∴不會執行乘法動作

‡ diagonal = 2 > 每一次有2個矩陣要相乘

‡ diagonal = 3 > 每一次有3個矩陣要相乘

‡ diagonal = 4 > 每一次有4個矩陣要相乘

‡

(27)
(28)

‹

六個矩陣相乘的最佳乘法順序可以分解成以下的其中一種 型式:

‹

第k個分解型式所需的乘法總數,為前後兩部份 (一為A

1

,

A

2

, …, A

k

和A

k+1

, …, A

6

) 各自所需乘法數目的最小值相加,再

加上相乘這前後兩部份矩陣所需的乘法數目。

(29)

‹

Matrix Chain的遞迴式

‹

Example: A

13×3

, A

23×7

, A

37×2

, A

42×9

, A

59×4

, 求此五矩陣的最小乘 法次數。

Sol:

建立兩陣列 M[1…5, 1…5]及P[1…4, 2…5]

⎪⎩

⎪ ⎨

<

+ +

+

= =

min {M[i, k] M[k 1, j] d d d } if i j j i if

j] 0 M[i,

j k 1 1 i

j k i

M 1 2 3 4 5 1

2 3 4 5

P 2 3 4 5 1

2 3 4

(30)

Case 1 (When diagonal = 1)

„ diagonal = 1,∵只有1個矩 陣,∴不會執行乘法動作

„ 陣列M的中間對角線為0,陣 列P則不填任何數值

Case 2 (When diagonal > 1)

„ diagonal = 2,有2個矩陣相乘

„ i = 1及 j = 2,為A1及A2矩陣 相乘,此時:

M[1, 2] = M[1,1]+M[2,2]+3×3×7 = 63,

其中 A1 及A2 的分割點 k 如下:

A1×A2

M 1 2 3 4 5

1 0

2 0

3 0

4 0

5 0

P 2 3 4 5 1

2 3 4

diagonal = 1

M 1 2 3 4 5

1 0 63

2 0 42

3 0 126

4 0 72

5 0

P 2 3 4 5 1 1

2 2

3 3

4 4

diagonal = 2 分割點k = 1

(31)

Case 2 (When diagonal > 1)

„ diagonal = 3,有3個矩陣相乘

„ i = 2及 j = i+diagnal-1 = 2+3-1=4,為A2至A4間的所有矩陣相乘,此時:

M 1 2 3 4 5

1 0 63 60

2 0 42 96

3 0 126 128

4 0 72

5 0

P 2 3 4 5 1 1 1

2 2 3

3 3 3

4 4

⎩ ⎨

=

=

×

× + +

=

=

×

× +

= +

3 k

96, 9

2 3 M[4,4]

M[2,3]

2 k

315, 9

7 3 M[3,4]

M[2,2]

min M[2,4]

分割點 分割點

diagonal = 3

(32)

Case 2 (When diagonal > 1)

„ diagonal = 4,有4個矩陣

„ i = 1及 j = 4,為A1至A4間的所有矩陣相乘,此時:

M 1 2 3 4 5

1 0 63 60 114

2 0 42 96 138

3 0 126 128

4 0 72

5 0

P 2 3 4 5 1 1 1 3

2 2 3 3

3 3 3

4 4

⎪ ⎩

⎪ ⎨

=

=

×

× + +

=

=

×

× + +

=

=

×

× + +

=

3 k

114, 9

2 3 M[4,4]

M[1,3]

2 k

378, 9

7 3 M[3,4]

M[1,2]

1 k

177, 9

3 3 M[2,4]

M[1,1]

min M[1,4]

分割點 分割點 分割點

diagonal = 4

(33)

Case 2 (When diagonal > 1)

„ diagonal = 5,有5個矩陣

„ i = 1及 j = 5,為A1至A5間所有矩陣相乘,此時:

M 1 2 3 4 5

1 0 63 60 114 156 2 0 42 96 138

3 0 126 128

4 0 72

5 0

P 2 3 4 5 1 1 1 3 3

2 2 3 3

3 3 3

4 4

⎪ ⎪

⎪ ⎪

=

=

×

× + +

=

=

×

× + +

=

=

×

× + +

=

=

×

× + +

=

4 分割點 k

222, 4

9 3 M[5,5]

M[1,4]

3 分割點 k

156, 4

2 3 M[4,5]

M[1,3]

2 分割點 k

275, 4

7 3 M[3,5]

M[1,2]

1 分割點 k

174, 4

3 3 M[2,5]

M[1,1]

min M[1,5]

diagonal = 5

(34)

‹[Note]此演算法的概念如下:

A

1

, A

2

, A

3

, A

4

, A

5

A

1

A

2

, A

2

A

3

, A

3

A

4

, A

4

A

5

A

1

A

2

A

3

, A

2

A

3

A

4

, A

3

A

4

A

5

A

1

A

2

A

3

A

4

, A

2

A

3

A

4

A

5

A

1

A

2

A

3

A

4

A

5

diagonal = 1

diagonal = 2

diagonal = 3

diagonal = 4

diagonal = 5

(35)

Case 1 (When diagonal > 1)

Case 2

(When diagonal > 1)

(36)
(37)

‹

Dynamic Programming 和 Greedy Approach看似可以處理 所有的最佳化問題,然而它們所能處理的最佳化問題需 滿足下列原則

„ 最佳化原則(Principle of Optimality): 當一個問題存在著最佳 解,則表示其所有子問題也必存在著最佳解

{ 以最短路徑問題來看,如果vk vi vj間最短路徑上的一個頂 點,則 vi vk 以及從 vk vj 這兩個子路徑也必定是最短路徑.

(38)

‹ 每一個輸入的計算都必須是根據先前輸入的最佳結果再進一步計算,

如此才能夠得到最佳解,同時可以將無法獲得最佳解的情況去除,以 避免需要將每一種可能情況都加以考慮。

„ 對於n個輸入的最佳化問題 (X1, X2, …, Xn):

{ 有些被歸類為 “部份集合” (Subset) 問題,會有2n種可能的情況

{ 有些被歸類為 “排列組合” (Permutation) 問題,會有n!種可能的情況

„ 因此皆屬指數複雜度的問題,若可採用最佳化原則通常可以將這 一些問題的複雜度由指數複雜度降為多項式複雜度。

‹

然而,並不是所有求最佳化的問題都合乎最佳化原則,此

時就只能用其它的方法求解了。

(39)
(40)

補 補 充充

(41)

‹ 假設有一條字串(String) S:

„

S = “a t g a t g c a a t”

„

Substrings of S: “g a t g c”, “t g c a a t”.

„

Subsequences of S: “a g g t”, “a a a a”.

‹

String

„

a segment of consecutive characters.

„

usually called sequence in Biology.

‹

Sequence

„

need not be consecutive.

‹ In Biology,

String String = Sequence = Sequence

.

(42)

‹ Common subsequences

of two string X = < B, C, B, A, C > and Y

= < B, D, A, B, C > :

„ BC, BA, BB, BAC, BBC, ...

„ The longest common subsequence (LCS)

longest common subsequence (LCS)

of X and Y = BAC or BBC

‹

[Note]

„ LCS可能不唯一

„ 若用暴力法來解,必須先產生字串X的所有子序列,再逐一檢查這 些子序列是否存在於字串Y中。如果字串X的長度為m,則X會產生

2 2

mm個子序列。因此,採用暴力法來解共同子序列問題的時間複雜個子序列 度會是指數等級,不適用於長的序列。指數等級

(43)

‹

求LCS 問題:

„ 給定兩個Sequence X=<x1, x2, …, xm>和Y=<y1, y2, …, yn>,求X和Y所構成 的最長共同子序列LCS(X, Y) = Z = < z1, z2, …, zk > 為何。

‹‹ LCS

LCS 問題的遞迴式

問題的遞迴式

„ 令c[i, j]表示為兩個序列 X = <x1, x2, …, xi> 和 Y = <y1, y2, …, yj> 所構成之最長共 同子序列的長度,則:

⎪ ⎩

⎪ ⎨

>

=

>

+

=

=

=

j i

j i

y x

0 j

i, if j]) 1, - c[i 1], - j Max(c[i,

y x

0 j

i, if

1 1]

- j 1, - c[i

0 j

or 0 i

if

0 j]

c[i,

(44)

‹‹ LCS

LCS 問題的遞迴式設計概念:

問題的遞迴式設計概念:

„ i 或 j 為 0,表示 X 或 Y 這兩條序列的其中一條為空序列。

„

x x

ii

= = y y

jj,則 c[i, j]所表示的序列長度,是由<x1, x2, …, xi-1>和<y1, y2, …, yj-1>兩序列所構成之最長共同子序列的長度(即: c[i-1, j-1])再加 1。

„

x x

ii

y y

jj,則 c[i, j]的序列長度,是由下列兩個不同的最長共同 子序列長度當中之最大值所構成:

{ <x1, x2, …, xi-1> 和 <y1, y2, …, yj> 兩序列所構成之最長共同子序列的長度 c[i-1, j]

{ <x1, x2, …, xi> 和 <y1, y2, …, yj-1> 兩序列所構成之最長共同子序列的長度 c[i, j-1]

(45)

‹

Ex. 1 (當 x x

ii

= = y y

jj

):

„ X = <A, B, C, D> Y = <A, C, D>

„ 共同子序列:<A>, <C>, <D>, <A, C>, <A, D>, <C, D>, <A, C, D>

„ 最長共同子序列 Z = <A, C, D>

{ 長度為3,此序列長度是由<A, B, C>和<A, C>所構成之最長共同子序列 的長度再加上1

‹

Ex. 2 (當 x x

ii

y y

jj

):

„ X = <A, B, C, D> Y = <D, B, C>

„ 共同子序列:<D>, <B>, <C>, <B, C>

„ 最長共同子序列 Z = <B, C>

{ 長度為2,序列長度是由下列兩個不同的最長共同子序列長度當中之 最大值所構成:

‡ <A, B, C> 和 <D, B, C> 兩序列所構成之最長共同子序列的長度: 2

‡ <A, B, C, D> 和 <D, B> 兩序列所構成之最長共同子序列的長度: 1

(46)

0 1 2 … j … 0

1 2

i

… …

c[i, j]

c[i-1, j-1] c[i-1, j]

c[i, j-1]

Time Complexity: O(mn)

Space Complexity: O(mn)

(47)

‹

Give two sequences X = <A, B, D, B, C> and Y = <B, A, D, C>.

Find the longest common subsequence of X and Y.

Ans:

„ 最長共同子序列的長度 = 3

„ 最長共同子序列:

{ <A, D, C>

{ <B, D, C>

Y0 Y1 Y2 Y3 Y4 B A D C

X0 0 0 0 0 0

X1 A 0 0 1 1 1

X2 B 0 1 1 1 1

X3 D 0 1 1 2 2

X4 B 0 1 1 2 2

X5 C 0 1 1 2 3

(48)

‹

Compare two or more sequences

‹

Some reasons to perform the sequence alignment operations

„

Measure the similarity of some sequences.

„

A DNA sequence X and a database containing a set of DNA sequences.

„

Data compression.

(49)

‹

We have two DNA sequences S

1

and S

2

:

‹

A scoring rule to measure the goodness of an alignment:

„ ai=bj, Score=2

„ ai or bj align with a blank, Score=-1

„ ai≠bj, Score=-1

Better

A A C T G ---

G --- ---

A --- C T G G --- --- G

S

1

S

2

A A C T G

G

A C T G

G G

S

1

S

2

+2

-1

2 +2 +2 +2

Score=9

+2

-1 -1 -1 -1

2

-1 -1

+2

Score=0

(50)
(51)

A

A C G T

--- G

--- A

C T G ---

G

--- G

S

1

S

2

Sequence A: GAACTG Sequence B: GAGCTG

An alignment of A and B:

Match

Deletion gap Mismatch

Insertion gap

(52)

‹

Find an alignment which has the highest score.

0 -1 -2 -3 -4 -5 -6

-1 -2 -3 -4

-1 -2 -3 -4 -5 -6

1 0 -1 -2 -2 -3

0 0 -1 1 0 -1

-1 2 2 1 0 -1

T T C A G A

S

1

S

2

G A C T

A T T C A G

0 1 2 3 4 5 6

i

a

i

G A C T 0

1 2 3 4 j

b

j A(i,j)=the score of optimal

alignment A(0,0)=0 A(i,0)= -i A(0,j)= -j

If ai =bj, then

A(i,j)= A(i-1,j-1) +2 Else

A(i,j)=Max(A(i-1,j) –1, A(i,j-1) –1, A(i-1,j-1) –1 )

(53)

0 -1 -2 -3 -4 -5 -6

-1 -1 -2 -3 -4 -5 -6

-2 1 0 -1 -2 -2 -3

-3 0 0 -1 1 0 -1

-4 -1 2 2 1 0 -1

A T T C A G

0 1 2 3 4 5 6

G A C T 0

1 2 3 4

i j

Tracing back the table T T C A G

A

A C T G

-

- - - T T C A G A

A C T

G -

- - -

T T C A G A

A C T

G -

- - -

T T C A G A

S

1

S

2

G A C T

0

2 1 0 -1 0

-1

1 0

-1

1 0 -1

1

0 0

-1

1 0 -1

1 0

(54)

‹

核酸是以核苷酸

核苷酸

(Nucleotide ) (Nucleotide ) 為單元體所聚成的巨分 子,乃細胞內分子量最鉅大的功能性分子,包括 :

„ 去氧核糖核酸 (Deoxyribonucleic acid,DNA)

„ 核糖核酸 (Ribonucleic acid,RNA)

‹

核酸主要功能為

遺傳訊息的遺傳訊息的貯存貯存傳遞傳遞 表現,是現代表現

分子生物學的主角。

‹

由於DNA與RNA是由許多個核苷酸連接而成;因此,我

們可以得知核酸是聚合物

聚合物,單體是核苷酸。

(55)

‹

核苷酸的概要結構:

„„ 磷酸根磷酸根 (phosphate group )

„

„ 戊糖戊糖 (pentose sugar;又稱五碳糖) -可以是 去氧核糖

(deoxyribose )

或者是核糖

(ribose)

,造成 DNA 與 RNA 的差別。

„„ 鹼基鹼基 (base;又稱含氮鹼基(nitrogenous base ))

‹ DNA是由A、T、G、C四個不同的鹼基組成。

‹ RNA是由A、U、G、C四個不同的鹼基組成。

(56)

(骨架)

5’ 3’

(57)

‹

給一數字序列 X = <x

1

, …, x

m

>,找出X之最長遞增子序列。

„ Ex: X = <5, 1, 4, 2, 3>,則 LIS(X) = <1, 2, 3>

‹

Algorithm:

c Y ← Sort(X); //Y具有遞增性

d Z ← LCS(X, Y); //找出X與Y之間的最長共同子序列,且具有遞增性。

e Return Z

(58)

‹

X = <5, 1, 4, 2, 3>,找出 LIS(X)。

<Ans>:

c Y ← Sort(X)。∴Y = <1, 2, 3, 4, 5>

d Z ← LCS(X, Y);

Z = <1, 2, 3>,LIS長度為3 e Return Z

Y0 Y1 Y2 Y3 Y4 Y5 1 2 3 4 5

X0 0 0 0 0 0 0

X1 5 0 0 0 0 0 1 X2 1 0 1 1 1 1 1 X3 4 0 1 1 1 2 2 X4 2 0 1 2 2 2 2 X5 3 0 1 2 3 3 3

參考文獻

相關文件

• 我們通常用 nD/mD 來表示一個狀態 O(N^n) ,轉移 O(N^m) 的 dp 演算法. • 在做每題

• 也就是 ”我的dp是n^3”這句話本身不夠表示你的dp演算法,必須 要說“我的dp是個狀態n^2,轉移n”才夠精確. •

[r]

[r]

• 有一個可以耐重 W 的背包,及 N 種物品,每種物品有各自的重量 w[i] 和價值 v[i] ,且數量為 k[i] 個,求在不超過重量限制的情 況下往背包塞盡量多的東西,總價值最大為多少?.

依賴背包問題 and

creted by howard41436 edited by

[r]