• 沒有找到結果。

Greedy Algorithms

N/A
N/A
Protected

Academic year: 2022

Share "Greedy Algorithms"

Copied!
32
0
0

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

全文

(1)

Michael Tsai 2011/10/21

(2)

超級電腦排程問題

需要交給超級電腦的工作若干

每樣工作有選定的開始與結束時間

如何選出一組可以執行的工作(執行時 間不重疊), 使這些工作的數量最大?

時間

4

(3)

問題定義

(4)

先請出神聖的dynamic programming 尚方寶劍

(5)

Dynamic programming 尚方寶劍

(6)

Optimal Substructure

有Optimal substructure, 可以用DP解!

(7)

等等, 我們需要用到尚方寶劍嗎?

如果我們可以證明我們知道呢?

(8)

Greedy Algorithm

某些問題, 我們可以知道怎麼做選擇!

此稱為greedy choice

如果greedy choice為optimal choice, 再加上

optimal substructure, 我們就可以非常快速的得 到解!

Greedy choice

(9)

怎麼做出選擇? (創造力)

每次都選最早開始的工作

每次都選花最少時間的工作

每次都選跟其他最少衝突的工作

1

2 3

反例

反例

反例

(10)

Greedy choice

(11)

證明greedy choice是正確的!

其他的

(12)

結論: 有時候並不需要DP!

DP可以用, 但是慢很多. (殺雞不用尚方寶劍)

Greedy algorithm通常使用top-down 的方法:

1. 根據目前知道的事情選出最好的選擇

2. 繼續解用了這個選擇之後的subproblem

3. 重複以上一直到subproblem可以直接解掉

重點: 請確定(要證明)greedy choice一定會出現 在最佳解裡面!!!

(13)

來個pseudo-code

選完greedy choice以後只剩下

一個recursive call在最後: tail recursive

(14)

來個pseudo-code

(15)

什麼問題可以使用greedy algorithm來解?

1. 如果做出一個choice之後, 可以找到剩下要解 的單一個subproblem (定義好subproblem)

2. 有greedy property. (必須證明最佳解裡面一定 有greedy choice)

3. 有optimal substructure (必須證明大問題的最 佳解裡面有小問題的最佳解)

1.999. 決定要怎麼做greedy choice.

(16)

0-1背包問題

(17)

fractional背包問題

(18)

背包問題的optimal substructure

不比W重的最佳解 定理:

證明: (適用於0-1 & fractional 背包問題)

(19)

choice

(20)

證明fractional背包問題有 greedy property

其實就是要證明, (某些)最佳解裡面有greedy choice

通常使用的方法:

1. 假設可以拿到最佳解.

2. 最佳解裡面如果已經有greedy choice的話, 則得證.

3. 最佳解裡面如果沒有greedy choice的話, 則想辦法 把最佳解裡面的一些東西和greedy choice互換. 結 果發現這個新解跟greedy choice一樣好(也是一個 最佳解) 或者發現這個新解更好(矛盾, 所以最佳解 裡面不可能沒有greedy choice)

(21)

證明fractional背包問題有 greedy property

(22)

此一greedy choice不適用於0-1背包 問題!

反例:

10 20 30

50

$60 $100 $120

$6 $5 $4

單位重 量價值 總價值

50 30 20

50 10 20

$220 $160

50 10 30

$180

最佳解, 但是沒有greedy choice!

注意: 但是這不代表這個問題 一定沒有greedy property! 只 是表示這個greedy choice不是 正確的!

因為如果有空間沒有用到, 就 會使單位重量的價值下降!!

(23)

Huffman codes

a b c d e f

出現次數 45k 13k 12k 16k 9k 5k

Fixed- length codeword

000 001 010 011 100 101

Variable- length codeword

0 101 100 111 1101 1100

總共需要224 Kb 總共需要300 Kb

越不常出現的字, codeword應該越長! 再省25%

(24)

Prefix code

定義: 某個code中, 沒有任何一個codeword是另 外一個codeword的prefix, 則稱為prefix code.

Encode: “abc””0 101 100”

Decode: “0 101 100””abc”

使用右邊的decoding tree, 走到leaf就解出一個字母

Prefix code就不會有混淆的狀況 產生.

例: a=001 b=00 c=1

那看到001是 “a” or “bc”?

注意: 此非binary search tree!

a

c b d

f e

0 1

0 1

0 1

0 1

0 1

(25)

如何產生最佳的code呢?

a

c b d

f e

0 1

0 1

0 1

0 1

0 1

(26)

Huffman code

Huffman發明了一種使用greedy algorithm產生 optimal prefix code的方法, 稱為Huffman Code

f:5 e:9 d:16 c:12 b:13 a:45 14

0 1

25

0 1

30

0 1

0 55

1 0 100

1

(27)

Pseudo-code

Huffman(C) n=|C|

Q=C

for i=1 to n-1

allocate a new node z z.left=Extract_Min(Q) z.right=Extract_Min(Q)

z.freq=z.left.freq+z.right.freq Insert(Q,z)

return Extract_Min(Q)

(28)

證明最佳解裡面一定有greedy choice

(29)

choice

y

a b

x y

x b

a b

x y

a

T T’ T’’

(30)

y

a b

x y

x b

a

T T’

(31)

substructure

z為一新字元, z.freq=x.freq+y.freq

最佳解為T’

z T’

x y

T為C之最佳解

(32)

證明題目有optimal substructure

最佳解為T’

z T’

T

x y

T為C之最佳解

則有T’’為C 之最佳解 假設不是的話

將x,y替換成z

得到T’’’

參考文獻

相關文件

Greedy-Choice Property : making locally optimal (greedy) choices leads to a globally optimal

★【解析】 這三個圓弧看起來彎 曲度差別很大,但實際它們完全 一樣,只是下面兩個比上面那個

在這一節裡會提到,即使沒辦法解得實際的解函數,我們也 可以利用方程式藉由圖形(方向場)或者數值上的計算(歐拉法) 來得到逼近的解。..

推理論證 批判思辨 探究能力-問題解決 分析與發現 4-3 分析文本、數據等資料以解決問題 探究能力-問題解決 分析與發現 4-4

才有這樣的結果 ( idaṁ hoti ) 。累次有同樣的事實可現觀或驗證,由例 證推理,就可以記說:處於有這一些因緣具足時( imasmiṁ sati ),肯定 有這樣的結果(

最佳解裡面如果沒有greedy choice的話, 則想辦法 把最佳解裡面的一些東西和greedy choice互換. 結 果發現這個新解跟greedy choice一樣好

結 果發現這個新解跟 greedy choice 一樣好 ( 也是一個 最佳解 ) 或者發現這個新解更好 ( 矛盾 , 所以最佳 解裡面不可能沒有 greedy choice)... 證明

結 果發現這個新解跟greedy choice一樣好 (也是一個 最佳解) 或者發現這個新解更好 (矛盾, 所以最佳解 裡面不可能沒有greedy