演算法方式總覽 - mail.sju.edu.twmail.sju.edu.tw/ipinchen/algoy96ch05.pdf · algorithm design...
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 (樹的追蹤)
費氏數列(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
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
資源分配問題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.
準則
•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.
•如果一個問題可以轉成多階圖形問題,那ㄧ定可以用動態規劃解決
遞迴推疊圖(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
• 求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
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. 使用動態規劃找尋最佳化的組合
• 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
最佳乘法順序(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
練 習
• 矩陣相乘之最佳順序及乘法次數
• 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
• 深度(depth):
• 從根節點到該節點所經過路徑的邊(edge)的數目。
I-PIN CHEN
的數目。
• 平衡(balanced):
• 在一個樹中的任何一節點,其左右子樹的深度相差不超過1。
55
搜尋時間(search time)
在search()程序中搜尋一個key所需比較(comparison)指令的數目
I-PIN CHEN57
EX: depth(key)+1
depth(Ursula)+1=2+1=3