• 沒有找到結果。

問題定義

N/A
N/A
Protected

Academic year: 2022

Share "問題定義"

Copied!
34
0
0

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

全文

(1)

Algorithms

Michael Tsai 2011/4/15

(2)

這次作業…

有還沒有教但是讓同學自己讀的部分

這次希望給同學們”重拾課本”的動力

期中考前作業潮的問題有沒有解決方式?

請發表意見XD

The importance of time managing

作業一、二、三解答會在今天晚上前上線

批改完的作業 會在下禮拜放在204給同學認領

(3)

期中考

Close‐book exam

大抄: 單張A4紙, 可以雙面利用

主要題型: 是非+解釋, 填空, 問答

範圍: 考到今天教的東西

(Divide & Conquer, Dynamic Programming, 

Probabilistic Analysis & Randomized Algorithm,  Greedy Algorithm)

180 minutes

難度: 一半跟作業一樣難, 一半比作業簡單

作弊=當掉+送校處分

演算法!? 演算法!?

演算法!? 演算法!?

(4)

超級電腦排程問題

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

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

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

時間 4

(5)

問題定義

集合 , , … ,

每一個工作 有開始時間 及結束時間

0 ∞

每個工作執行時間為 ,

可以選兩個工作, 其中一個工作的結束時間和另 外一個工作的開始時間一樣

當s f 或 時 和 可以被同時選入

工作已經照結束時間排好了:

(6)

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

定義子問題: 

為 完成後, 開始前的所有工作集合

要找出 中的最大可執行集合, 假設其中包含

所以假設 為 的最佳解, 則 1

S

S S

(7)

Dynamic programming 尚方寶劍

Optimal Substructure:

證明 中包含S 與 的最佳解(即欲證明 為 之 最佳解, 或 為 之最佳解)

S S

最佳解? 最佳解

(8)

Optimal Substructure

假設 不是 的最佳解, 則表示有一 使

但如果這樣

則此解之工作數目為 1

1 , 表示 不是最佳解 (矛盾)

因此 為 的最佳解

S S

最佳解? 最佳解

有Optimal substructure, 可以用DP解!

(9)

接下來怎麼解呢?

, 代表 最佳解的工作數目

則 , , 1 ,

k是我們的選擇 (不知道選哪一個)

, 0

max , 1 ,

接著使用top‐down or bottom‐up方法填表即可

if  if 

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

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

(10)

Greedy Algorithm

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

此稱為greedy choice

如果greedy choice為optimal choice, 再加上

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

Greedy choice

S S

不需要考慮所有 的選擇!

只需要直接解選擇 之後的subproblem!

(11)

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

每次都選最早開始的工作

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

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

1

2 3

反例

反例

反例

(12)

Greedy choice

正確的greedy choice(之一): 選最早結束的.

原因: 越早結束, 後面就越多時間讓其他工作執行.

因為原本已經照 排序好了, 每次我們都選

接下來只需考慮 結束以後才開始的所有工作

因為其他 的結束時間 ,  要大於 才不會重疊.

(13)

證明greedy choice是正確的!

定理: 在某subproblem 中 的完成時間最早,  則 的某些最佳解(如果有很多個)中一定有

證明:  假設 是 的某個最佳解, A 裡面完成時 間最早的是 .

1. 如果 就是 , 則得證.

2. 如果 不是 , 則

所以可以把 中的 換成 .

更換後工作數目不變, 和 一樣多, 因此為另 外一個最佳解, 得證.

其他的

(14)

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

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

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

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

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

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

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

(15)

來個pseudo‐code

Recursive_Activity_Selector(s,f,k,n) m=k+1

while m<=n and s[m]<f[k]

m=m+1 if m<=n

return ∪

Recursive_Activity_Selector(s,f,m,n) else

return ∅

Θ 選完greedy choice以後只剩下

一個recursive call在最後: tail recursive

(16)

來個pseudo‐code

Greedy_Activity_Selector(s,f) n=s.length

A={}

k=1

for m=2 to n

if s[m]>=f[k]

A= ∪ k=m return A

Θ

(17)

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

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

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

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

1.999. 決定要怎麼做greedy choice.

(18)

0‐1背包問題

某店面有n個物品 item , item , … , item

各價值 , , … , , 各重 , , … ,

小偷有一個可以裝W這麼重的背包

請問要偷走哪些東西可以使小偷拿走的東西總 價值最高?

(19)

fractional背包問題

某店面有n個物品 item , item , … , item

各價值 , , … , , 各重 , , … ,

小偷有一個可以裝W這麼重的背包

可以拿走”部分物品” (切物品的一部分)

請問要偷走哪些東西可以使小偷拿走的東西總 價值最高?

(20)

背包問題的optimal substructure

不比W重的最佳解

拿掉

此為不比W‐ 重, 

使用除了 外的物品的最佳解

定理:

證明: (適用於0‐1 & fractional 背包問題) 1. 假設右邊的不是最佳解的話, 

2. 則可以找到一最佳解, 價值更高且不比W‐ 重.

3. 此解加上 以後也還沒有超過W, 

4. 而且此解加上 後總價值比左邊的價值還高 (矛盾)

(21)

Fractional 背包問題的greedy  choice

把物品按照單位重量的價值來排序 (也就是 )

1. 選出單位重量價值最高的(greedy choice). 

2. 如果可用重量(W)比物品重量 小, 則把背包填滿, 把 物品多餘的部分捨棄. 

3. 如果可用重量比物品重量 大, 則繼續解子問題: 可用 重量剩下W‐ , 把已放入的物品從物品集合中去除.

(22)

證明fractional背包問題有 greedy property

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

通常使用的方法:

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

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

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

(23)

證明fractional背包問題有 greedy property

1. 假設可以拿到可用重量為W最佳解. 假設 為 單位重量價值最高者.

2. 如果 , 則將最佳解之所有東西都換成 .

3. 如果 , 則將最佳解中的物品按照單位重量 價值排序,取其中重 之最高價值物品(可能包含

部分 )與剩餘之 交換.

4. 因為 為單位重量價值最高者, 因此作了以上 交換以後得到之解, 總價值只可能上升或相等. 但 原來已經為最佳解, 因此總價值只可能相等

交換過後的解也是最佳解

因此至少部分最佳解中有greedy choice.

(24)

此一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不是 正確的!

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

(25)

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%

(26)

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

(27)

如何產生最佳的code呢?

想要產生一棵decode tree, 使得檔案大小能最小.

檔案大小(cost):

. ∙

Full binary tree 

(跟上學期定義不同!):

每個non‐leaf node都有兩個children

一個optimal code畫成的decode tree一定是full binary tree.

a

c b d

f e

0 1

0 1

0 1

0 1

0 1

(28)

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

(29)

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)

在Priority Queue Q插入z:  log

在Priority Queue Q拿出item: 

log 起始Priority queue: 

(30)

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

定理: 假設所有的字都在集合C裡面. 每個字 ∈ , 出現 的頻率為c.freq. 假設x和y為C中頻率最低的. 則一定有 一組最佳的code是使得x和y的codeword長度一樣且只 有最後一個bit不同.

證明: 

1. 假設有T代表任一的最佳code. 在其中假設a 和 b在T中 為depth最大且為sibiling的兩個字元. 我們可以假設

. . 及 . . .

2. 因為” x和y為C中頻率最低的”, 所以 .

. 及 . . .

(31)

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

3. 如果x.freq=b.freq, 則

x.freq=a.freq=y.freq=b.freq. 如此的話可以直接 得證 (可以把x和a交換, y和b交換, 則得到另一 optimal code, x和y的codeword長度一樣且只 有最後一個bit不同)

4. 如果 . . , 則先將a, x交換(得到T’), 再將y, b交換(得到T’’)

y

a b

x y

x b

a b

x y

a

T T’ T’’

(32)

. ∙ . ∙

. ∙ + . ∙ . ∙

. ∙

. ∙ + . ∙ . ∙

. ∙

. .

0

類似方法可得到 ′ 0, 因此 .

但因T已為最佳解, 所以只可能 , ′′也是最 佳解 (得證)

y

a b

x y

x b

a

T T’

(33)

證明題目有optimal  substructure

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

最佳解為T’

z T’

T

x y

. . .

. . . ∙ 1 .

1

. .

T為C之最佳解

(34)

證明題目有optimal substructure

, 最佳解為T’

z T’

T

x y

T為C之最佳解

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

將x,y替換成z

得到T’’’

B . .

. .

矛盾!

參考文獻

相關文件

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

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

亮亮水果行欲將 348 顆芒果分裝成禮盒,若每個禮盒最多裝 12 顆芒果且每盒芒果數一樣多,則 至少需要多少個禮盒?. 一個面積為

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

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

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

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

● 應用 Greedy choice,將問題劃分成子問題,根據 optimal. substructure,可以持續應用