演算法方式總覽 - mail.sju.edu.twmail.sju.edu.tw/ipinchen/algoy96ch05.pdf · algorithm design...

74
演算法方式總覽 1. The Divide-and-Conquer Strategy (各個擊破) (binary SearchingQuick Sort…. ) 2. The Greedy Method(貪婪演算法) (Prim MSTKruskal MSTDjikstra's algorithm) 3. Dynamic Programming(動態演算法) I-PIN CHEN 1 3. Dynamic Programming(動態演算法) (二項式係數、矩陣連乘、最佳二元搜尋樹…) 4. Trace Back (回溯) (圖形著色、漢米爾迴路…) 5. Branch-and-Bound (樹的追蹤)

Upload: truongtram

Post on 30-Mar-2018

214 views

Category:

Documents


2 download

TRANSCRIPT

演算法方式總覽

1. The Divide-and-Conquer Strategy (各個擊破)

(binary Searching、Quick Sort…. )

2. The Greedy Method(貪婪演算法)

(Prim MST、Kruskal MST、Djikstra's algorithm)

3. Dynamic Programming(動態演算法)

I-PIN CHEN1

3. Dynamic Programming(動態演算法)

(二項式係數、矩陣連乘、最佳二元搜尋樹…)

4. Trace Back (回溯)

(圖形著色、漢米爾迴路…)

5. Branch-and-Bound (樹的追蹤)

CH 5

動態規劃

I-PIN CHEN2

動態規劃Dynamic Programming

費氏數列(Fibonacci sequence)• Fibonacci sequence: 0 , 1 , 1 , 2 , 3 , 5 , 8 , 13 , 21 , …

Fi = i if i 1

Fi = Fi-1 + Fi-2 if i 2

• Solved by a recursive program: f5

I-PIN CHEN3

• Much replicated computation is done.

• It should be solved by a simple loop.

f2

f4 f3

f1

f3

f2 f1

f1 f0

f2

f1 f0

f1

f0

Dynamic Programming

Dynamic Programming is analgorithm design method that can beused when the solution to a problemmay be viewed as the result of a

I-PIN CHEN4

may be viewed as the result of asequence of decisions

動態規劃用於當ㄧ個問題的解決方式是根據ㄧ連串決定的結果而得到。

動態規劃介紹

1. 當ㄧ個問題可以被分解成數個的性質相同的小問題。

2. 先計算較小的問題的結果,並且存儲。

3. 如果有需要先前已經計算過的部份,就不需要重新計算,直接從先前存儲的結

I-PIN CHEN5

不需要重新計算,直接從先前存儲的結果中獲得。

4. 由最小的問題開始計算,循序向上求取最後整個問題的答案。

5. 是一種由下而上(bottom-up)的解決問題的方式。

動態規劃設計步驟

1. 建立一個遞迴機制,用它來求取ㄧ個問題經過切割後,所產生較小但性質相同的問題解。

I-PIN CHEN

的問題解。

2. 用Bottom-up的方式解題,首先由最小的問題開始,逐步向上求取最後整個問題的解。

動態規劃 VS 各個擊破• 相同

1. 將ㄧ個問題切成數個較小問題來解。

• 相異

1. 會先計算較小的問題並儲存計算結果(動態規

I-PIN CHEN7

劃)

2. 有計算過的小問題就無須重複計算(動態規劃)

3. Bottom-up的方式(動態規劃)

4. 盲目的遞迴計算(各個擊破)

最短路徑(The shortest path)

• To find a shortest path in a multi-stage graph

S A B T

3

4

2 7

1

I-PIN CHEN8

• Apply the greedy method :

the shortest path from S to T :

1 + 2 + 5 = 8

S A B T4

5

1

5 6

The shortest path in multistage graphs

• e.g.

S T132

B E

9

A D4

1

5

11

5

16

18

2

I-PIN CHEN9

• The greedy method can not be applied to this case:(S, A, D, T) 1+4+18 = 23.

• The real shortest path is:

(S, C, F, T) 5+2+2 = 9.

C F2

動態規劃 Forward approach• Dynamic programming approach:

S T2

B

A1

d (B , T )

d (A , T )

S T132

B E

9

A D4

111

5

16

18

2

I-PIN CHEN10

• d(S, T) = min{1+d(A, T), 2+d(B, T), 5+d(C, T)}

C5d (C , T )

A

T

4

E

D

11d(E, T)

d(D, T)

d(A,T) = min{4+d(D,T), 11+d(E,T)}

= min{4+18, 11+13} = 22.

C F2

5

16 2

• d(B, T) = min{9+d(D, T), 5+d(E, T), 16+d(F, T)}

= min{9+18, 5+13, 16+2} = 18.

B T5

E

D

F

9

16d(F, T)

d(E, T)

d(D, T)

S T132

B E

9

A D4

1

5

11

5

16

18

2

I-PIN CHEN11

• 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.

F16

C F2

5

Backward approach

• d(S, A) = 1

S T132

B E

9

A D4

C F2

1

5

11

5

16

18

2

I-PIN CHEN12

• 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,B)+d(B,F), d(S,C)+d(C,F)}

= min{ 2+16, 5+2 } = 7

C F2

• 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

I-PIN CHEN13

S T132

B E

9

A D4

C F2

1

5

11

5

16

18

2

練習

Find out the shortest path in the following graph.

I-PIN CHEN14

0-1 背包問題

假設有 n 個物品,令:S = {item1,item2,...,itemn}wi = itemi 的重量pi = itemi 的價值W = 背包的最大載重

I-PIN CHEN15

W = 背包的最大載重

其中,wi、Pi、W均為正整數,找出子集合 A 使得:

Aitem

iAitem

i

ii

pWw 為最大值的限制下,在

貪婪解法範例

(1) 先拿價值最高的。(2) 先拿重量最輕的。(3) 先拿「價值/重量」比率最高的。

浪費5磅空間

10$50$

:1 物品

I-PIN CHEN16

5磅10磅

20磅

最大載重

30磅

5磅

20磅

10磅

20磅

$50

$60

$140

貪婪解法

最佳解背包物品1 物品2 物品3

7$20

140$:3

6$10

60$:2

10$5

:1

物品

物品

物品

拿取順序:1,3,2。

Example• n objects , weight: W1, W2, ,Wn

profit: P1, P2, ,Pn

capacity: M

maximize:

subject to: M

ni

ii xP1

xW

I-PIN CHEN17

subject to: M

xi = 0 or 1, 1in

• The 0/1 knapsack problem can be described by amultistage graph.

ni

ii xW1

The multistage graph solution• The longest path represents the optimal solution:

• x1=0, x2=1, x3=1

• = 20+30 = 50

1 0

10 100

011

00

40x1=1

x2=0x3=0

x =1

ii xP

I-PIN CHEN18

S T

0

00

01 010

000

001

0

0

0

0

40

020

0

30

0

0

30

x1=1

x1=0x2=1

x2=0

x3=1

x3=0

x3=1

x3=0

i Wi Pi

1 10 402 3 203 5 30

M=10

練習0-1背包問題:求出下列最佳解

I-PIN CHEN19

i Wi Pi

1 8 402 4 203 5 304 2 5

背包重量=10

資源分配問題The resource allocation problem

• The resource allocation problem can be describedas a multistage graph.

• m resources, n projects

profit Pi, j : j resources are allocated to project i.

maximize the total profit.

I-PIN CHEN20

maximize the total profit.Resource

Project 1 個 2 個 3 個

1 號 2 8 9

2 號 5 6 7

3 號 4 4 4

4 號 2 4 5

The multistage graph solution

S T

6

0,1

1,1

2,1

0,2

1,2

2,2

0,3

1,3

2,3

A

7

6

44

4

B

C G

F

E I

J

K

0 5

8

0

0

0

5

5

0

0

0

4

442

2

I-PIN CHEN21

• (i, j) : i resources allocated to projects 1, 2, …, j

e.g. node H=(3, 2) : (#3, 1~2), 3 resources allocated to projects 1, 2.

2,1

3,1

2,2

3,2

2,3

3,3

D H L

9

0

5

0

40

• Find the largest path from S to T :

(S, C, H, L, T), 8+5+0+0=13

2 resources allocated to project 1.

I-PIN CHEN22

2 resources allocated to project 1.

1 resource allocated to project 2.

0 resource allocated to projects 3, 4.

練習

Resource

找出下列最佳的分配

I-PIN CHEN23

ResourceProject 1 2 3

1 2 2 92 5 6 73 4 4 44 2 4 55 3 3 2

準則

•In summary, if a problem can bedescribed by a multistage graph, thenit can be solved by dynamic

I-PIN CHEN

it can be solved by dynamicprogramming.

•如果一個問題可以轉成多階圖形問題,那ㄧ定可以用動態規劃解決

二項式係數

I-PIN CHEN25

分解

二項式係數(recursive版)

I-PIN CHEN26

}

遞迴推疊圖(The recursive stack)

呼叫過程:

B3,2B3,1

B4,2C4,2

I-PIN CHEN27

B2,1B2,0 B2,2

B1,1B2,0

B2,1

B1,1B2,0

設計動態規劃

I-PIN CHEN28

矩陣 B

I-PIN CHEN29

二項式係數(dynamic programming版)

I-PIN CHEN30

• 求B[4][2]

• 計算第0列:

• B[0][0]=1

• 計算第1列:

• B[1][0]=1

• B[0][1]=1

• 計算第2列:

• B[2][0]=1

• B[2][1]= B[1][0]+B[1][1] =1+1=2

I-PIN CHEN31

• B[2][2]=1

• 計算第3列:

• B[3][0]=1

• B[3][1]= B[2][0]+B[2][1] =1+2=3

• B[3][2]= B[2][1]+B[2][2] =2+1=3

• 計算第4列:

• B[4][0]=1

• B[4][1]= B[3][0]+B[3][1] =1+3=4

• B[4][2]= B[3][1]+B[3][2] =3+3=6

二項式係數時間複雜度

I-PIN CHEN32

練習

• 計算出(6,2)之矩陣 B的值。

I-PIN CHEN33

Dynamic programming VSDivide-and-conquer

•動態規劃與各個擊破

•相似:利用遞迴,將問題切成數個性質相同的較小問題,再處理.

•相異:動態規劃由最小的問題開始,逐

I-PIN CHEN34

步由下向上求最後解。

•各個擊破盲目地由上向下遞迴。

•(用到STACK,可能重複)

動態規劃和最佳化問題

•最佳化原則(principle of optimality):

•當一個問題存在著最佳解,則表示其所有的子問題也必存在著最佳解。

I-PIN CHEN35

•如果有存在最佳的連鎖矩陣相乘順序,則此最佳相乘順序的任一子集合,也是最佳的相乘順序。

•在一個最佳化二元搜尋樹中,任何一個子樹也必須是最佳化的.否則我們可以用另一個子樹代替它。

連鎖矩陣相乘• 矩陣相乘是與相乘順序無關

• 2x3矩陣乘 3x4矩陣

• 1 2 3 7 8 9 1 29 35 41 38

• 4 5 6 * 2 3 4 5 = 74 89 104 83

I-PIN CHEN36

• 6 7 8 9

• 29 = 1*7 + 2*2 + 3*6

• (ij)*(jk) → ijk

• 尺寸 乘法數量

• A B C D

• (202)*(230) *(3012) *(128)

• A(B(CD)) 30128 + 2308 + 2028 = 3,680

I-PIN CHEN37

• (AB)(CD) 20230 + 30128 + 20308 = 8,880

• A((BC)D) 23012 + 2128 + 2028 = 1,232

• ((AB)C)D 20230 + 203012 + 20128 = 10,320

• (A(BC))D 23012 + 20212 + 20128 = 3,120

問題分析

1. 使用暴力法(brute-force)

I-PIN CHEN38

1. 使用暴力法(brute-force)

2. 找出具有最少乘法的組合

3. 時間複雜度:指數(exponential)

問題分析

1. 連鎖矩陣相乘問題符合最佳化問題。

2. 最佳化原則:如果有存在最佳的連鎖矩陣相乘順序,則此最佳相乘順序的任一子集合,

I-PIN CHEN

也是最佳的相乘順序。

3. 假設下列為六個矩陣的最佳相乘順序

4. A1 ((((A2 A3)A4)A5)A6 )

5. 則子集合(A2 A3)A4 亦是最佳相乘順序.

6. 使用動態規劃找尋最佳化的組合

動態規劃

I-PIN CHEN40

• A1 A2 A3 A4 A5 A6

• (52)*(23)*(34)*(46)*(67) *(78)

• d0d1 d1d2 d2d3 d3d4 d4d5 d5d6

• M[i][j]=矩陣Ai乘到Aj所需的最少乘法數

I-PIN CHEN41

i j

• M[i][i]=0

• M[4][6]=min((A4A5)A6 ,A4(A5A6))

• =min(392, 528)

• 六個矩陣的最佳相乘順序可分解成:

• A1 (A2 A3 A4 A5 A6 )

• (A1 A2 )(A3 A4 A5 A6 )

• (A1 A2 A3 )(A4 A5 A6 )

• (A1 A2 A3 A4 )(A5 A6 )

• (A A A A A )A

I-PIN CHEN42

• (A1 A2 A3 A4 A5 )A6

• 第k個分解形式所需的乘法總數,為前後兩部分各自所需的乘法數目的最小值相加,再加上前後兩部分相乘所需的乘法數目。

• M[1][6]

• =min1≦k≦5(M[1][k]+M[k+1][6]+d0dkd6 )

1 2 3 4 5 61 0 30 64 132 226 348 對角線5

2 0 24 72 156 268 對角線4

3 0 72 198 366 對角線3

I-PIN CHEN43

4 0 168 392 對角線2

5 0 336 對角線1

6 0 對角線0

Fig. 3.8 Matrix of example 3.5. Arrows indicateM[1][4].

• d0 =5, d1 =2, d2 =3, d3 =4, d4 =6, d5 =7, d6 =8

• 對角線0

• M[i][i]=0

• 對角線1

• M[1][2]

• =min1≦k≦1 (M[1][k]+M[k+1][2]+d0dkd2 )

I-PIN CHEN44

1≦k≦1 0 k 2

• = M[1][1]+M[2][2]+d0d1d2 =30

• 對角線2

• M[1][3]

• =min1≦k≦2 (M[1][k]+M[k+1][3]+d0dkd3 )

• = min(M[1][1]+M[2][3]+d0d1d3 ,

• M[1][2]+M[3][3]+d0d2d3 ) = 64

• d0 =5, d1 =2, d2 =3, d3 =4, d4 =6, d5 =7, d6 =8

• 對角線3

• M[1][4]

• =min1≦k≦3 (M[1][k]+M[k+1][4]+d0dkd4 )

• = min(M[1][1]+M[2][4]+d0d1d4 ,

• M[1][2]+M[3][4]+d d d ,

I-PIN CHEN45

• M[1][2]+M[3][4]+d0d2d4 ,

• M[1][3]+M[4][4]+d0d3d4 ) = 132

• 對角線4

• 對角線5

• M[1][6]=348

最少乘法次數演算法

I-PIN CHEN46

I-PIN CHEN47

最少乘法次數的時間複雜度

I-PIN CHEN48

最佳乘法順序(P 矩陣)

1 2 3 4 5 61 1 1 1 1 12 2 3 4 53 3 4 54 4 5

• P[1,6]=1, A1 (A2 A3 A4 A5 A6 )

• P[2,6]=5, A1 ((A2 A3 A4 A5 )A6 )

• P[2,5]=4, A1 (((A2 A3 A4 )A5 )A6 )

• P[2,4]=3, A1 ((((A2 A3 )A4 )A5 )A6 )

I-PIN CHEN49

4 4 55 5

Fig. 3.9 P Matrixof example 3.5.

1 2 3 4 5 6

印出最佳順序

I-PIN CHEN50

練 習

• 矩陣相乘之最佳順序及乘法次數

• A1 A2 A3 A4 A5 A6

• (10 4)*( 4 5)*( 520)*(20 2)*( 250) *( )

• A1 A2 A3 A4 A5 A6

I-PIN CHEN51

• ( 520)*(20 2)*( 210)*(1010)*(1020) *( )

• A1 A2 A3 A4 A5 A6

• (10 2)*( 220)*(20 5)*( 550)*(50 4) *( )

最佳二元搜尋樹

定義:二元搜尋樹(binary search tree)

1.每個節點包含一個key

I-PIN CHEN52

2.節點N的左子樹中任一節點的key,必須小於或等於節點N的key

3.節點N的右子樹中任一節點的key,必須大於或等於節點N的key

二元搜尋樹50

40

30

65

6045

I-PIN CHEN53

45

40

30

65

60

60

40

30

65

45

兩個二元搜尋樹

I-PIN CHEN54

• 深度(depth):

• 從根節點到該節點所經過路徑的邊(edge)的數目。

I-PIN CHEN

的數目。

• 平衡(balanced):

• 在一個樹中的任何一節點,其左右子樹的深度相差不超過1。

55

搜尋二元樹演算法

I-PIN CHEN56

搜尋時間(search time)

在search()程序中搜尋一個key所需比較(comparison)指令的數目

I-PIN CHEN57

EX: depth(key)+1

depth(Ursula)+1=2+1=3

當Key值的搜尋機率不同

搜尋時間:

I-PIN CHEN58

其中pi為keyi的搜尋機率,

Ci 為keyi的搜尋指令總數(keyi的深度)

Example

I-PIN CHEN59

最佳二元搜尋樹目標

I-PIN CHEN60

Example

I-PIN CHEN61

最佳化原則

I-PIN CHEN62

動態規劃設計

I-PIN CHEN63

動態規劃設計

I-PIN CHEN64

動態規劃設計

I-PIN CHEN65

最佳二元搜尋樹演算法

I-PIN CHEN66

I-PIN CHEN67

最佳二元搜尋樹所有情況的時間複雜度

I-PIN CHEN68

建立最佳二元搜尋樹演算法

I-PIN CHEN69

I-PIN CHEN70

Example

I-PIN CHEN71

A 與 R 陣列

I-PIN CHEN72

最佳二元樹

I-PIN CHEN73

I-PIN CHEN74