• 沒有找到結果。

III Dynamic Programming

N/A
N/A
Protected

Academic year: 2022

Share "III Dynamic Programming"

Copied!
16
0
0

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

全文

(1)

III

Michael Tsai 2013/10/11

(2)

 最笨翻譯機:

每個英文單字直接翻成法文單字

 做法: 建一棵balanced binary search tree (例如紅黑樹), 裡面用英文單字當 key, 法文單字當作對應的資料

 則每個字平均花𝑂 log 𝑛 的時間

 假設我們知道每個字出現的頻率(或機 率), 可以做得更好嗎?

 答: 可以! 把常用的字放離root近一點.

the

machicolation

(3)

Tree

 問題:

給一個序列𝐾 = 𝑘1, 𝑘2, … , 𝑘𝑛 共n個排好序的key (𝑘1 <

𝑘2 < ⋯ < 𝑘𝑛 ). 我們要用這些key建立一棵binary search tree.

𝑘𝑖出現的機率為𝑝𝑖.

另外我們也有n+1個”假key”代表沒有出現在K中的值, 可用 𝑑0, 𝑑1, 𝑑2, … , 𝑑𝑛來表示. 𝑑0代表小於𝑘1的值, 𝑑1代表介於𝑘1 和𝑘2的值,…,𝑑𝑛代表大於𝑘𝑛的值.

假key 𝑑𝑖出現的機率為𝑞𝑖.

則目標是找出一棵binary search tree使得Expected cost最小.

𝑘1 𝑘2 …… 𝑘𝑛 𝑑0 𝑑1 𝑑2 ……𝑑𝑛−1 𝑑𝑛

(4)

 𝐸 𝑠𝑒𝑎𝑟𝑐ℎ 𝑐𝑜𝑠𝑡 = 𝑖=1𝑛 (𝑑𝑒𝑝𝑡ℎ𝑇 𝑘𝑖 + 1) ∙ 𝑝𝑖+ 𝑖=0𝑛 (𝑑𝑒𝑝𝑡ℎ𝑇 𝑑𝑖 + 1) ∙ 𝑞𝑖

= 1 + 𝑖=1𝑛 𝑑𝑒𝑝𝑡ℎ𝑇 𝑘𝑖 ∙ 𝑝𝑖+ 𝑖=0𝑛 𝑑𝑒𝑝𝑡ℎ𝑇 𝑑𝑖 ∙ 𝑞𝑖

 since 𝑖=1𝑛 𝑝𝑖 + 𝑖=0𝑛 𝑞𝑖 = 1

 使得以上E[search cost]最小的binary search tree稱為 optimal binary search tree.

𝑘1 𝑘5 𝑘4 𝑘3 𝑑0 𝑑1

𝑑2 𝑑3 𝑑4

𝑑5

(5)

i 0 1 2 3 4 5 𝒑𝒊 0.15 0.10 0.05 0.10 0.20 𝒒𝒊 0.05 0.10 0.05 0.05 0.05 0.10 𝑘1 𝑘5

𝑘4 𝑘3 𝑑0 𝑑1

𝑑2 𝑑3 𝑑4

𝑑5

 假設給定的key的出現機率為右上表格所顯示, 則左上圖 為optimal binary search tree (expected cost=2.75)

 觀察: 機率最大的key不見得在root (𝑘5不在root)

(6)

暴力法有多暴力?

 n個node的binary search tree總共有Ω(4𝑛

𝑛

3 2

)個 (Catalan number)

(7)

 小觀察: binary search tree的subtree必包含一段連續的 key 𝑘𝑖, 𝑘𝑖+1, … , 𝑘𝑗及𝑑𝑖−1, … , 𝑑𝑗, 1 ≤ 𝑖 ≤ 𝑗 ≤ 𝑛.

 小定理: 假設T為𝐾 = 𝑘1, 𝑘2, … , 𝑘𝑛 之optimal binary search tree. 則T之subtree 𝑇,包含𝑘𝑖, … , 𝑘𝑗這些key, 也 必定是𝐾′ = 𝑘𝑖, 𝑘𝑖+1, … , 𝑘𝑗 這些key的optimal binary search tree.

 證明: 如果𝑇′找出的不是optimal binary search tree, 則 表示可以找出一個更好的binary search tree 𝑇′′,

expected cost比𝑇更好, 則可以用𝑇′′取代T中的𝑇, 得 到一個比T cost更低的binary search tree (矛盾)

Dynamic Programming出招

1. 找出Optimal Substructure

(8)

𝑇′′

𝑇 𝑇

𝑘𝑖, 𝑘𝑖+1, … , 𝑘𝑗

𝑚=1(𝑑𝑒𝑝𝑡ℎ𝑇 𝑘𝑚 + 1) ∙ 𝑝𝑚 + 𝑚=0𝑛 (𝑑𝑒𝑝𝑡ℎ𝑇 𝑑𝑚 + 1) ∙ 𝑞𝑚

𝐸𝑖𝑗 = 𝑚=𝑖𝑗 (𝑑𝑒𝑝𝑡ℎ𝑇 𝑘𝑚 + 1) ∙ 𝑝𝑚 + 𝑚=𝑖−1𝑗 (𝑑𝑒𝑝𝑡ℎ𝑇 𝑑𝑚 + 1) ∙ 𝑞𝑚

= 𝐸𝑖𝑗 + 𝐶

𝐸𝑖𝑗 < Eij

𝐸𝑖𝑗 + 𝐶 < 𝐸𝑖𝑗 + 𝐶

矛盾!

(9)

Dynamic Programming出招

 如何用小問題的答案組出大問題的答案?

𝑘𝑖, 𝑘𝑖+1, … , 𝑘𝑟−1 𝑘𝑟

𝑘𝑟+1, 𝑘𝑟+2, … , 𝑘𝑗 𝑑𝑖−1, 𝑑𝑖, … , 𝑑𝑟−1 𝑑𝑟, 𝑑𝑟+1, … , 𝑑𝑗

選出一r, 𝑖 ≤ 𝑟 ≤ 𝑗

𝑘𝑖, … , 𝑘𝑖−1 𝑘𝑖

𝑘𝑖+1, 𝑘𝑖+2, … , 𝑘𝑗 𝑑𝑖−1, … , 𝑑𝑖−1 𝑑𝑖, 𝑑𝑖+1, … , 𝑑𝑗

null 𝑑𝑖−1

(10)

Dynamic Programming出招

2. 列出遞迴式子 (表示花費)

𝑇𝐿

𝑘𝑖, 𝑘𝑖+1, … , 𝑘𝑟−1

𝑇𝑅 𝑘𝑟

𝑘𝑟+1, 𝑘𝑟+2, … , 𝑘𝑗 𝑑𝑖−1, 𝑑𝑖, … , 𝑑𝑟−1 𝑑𝑟, 𝑑𝑟+1, … , 𝑑𝑗 𝑒 𝑖, 𝑟 − 1

=

𝑚=𝑖 𝑟−1

(𝑑𝑒𝑝𝑡ℎ𝑇𝐿 𝑘𝑚 + 1) ∙ 𝑝𝑚

+

𝑚=𝑖−1 𝑟−1

(𝑑𝑒𝑝𝑡ℎ𝑇𝐿 𝑑𝑚 + 1) ∙ 𝑞𝑚

𝑒 𝑟 + 1, 𝑗

=

𝑚=𝑟+1 𝑗

(𝑑𝑒𝑝𝑡ℎ𝑇𝑅 𝑘𝑚 + 1) ∙ 𝑝𝑚

+

𝑚=𝑟+1 𝑗

(𝑑𝑒𝑝𝑡ℎ𝑇𝑅 𝑑𝑚 + 1) ∙ 𝑞𝑚

𝑑𝑒𝑝𝑡ℎ𝑇 ∙ = 𝑑𝑒𝑝𝑡ℎ𝑇𝐿 ∙ + 1 = 𝑑𝑒𝑝𝑡ℎ𝑇𝑅 ∙ + 1 𝑇

(11)

𝑙=𝑖 𝑙 𝑙=𝑖−1 𝑙

 𝑒 𝑖, 𝑗 = 𝑝𝑟 + 𝑒 𝑖, 𝑟 − 1 + 𝑤 𝑖, 𝑟 − 1 + 𝑒 𝑟 + 1, 𝑗 +

,if 𝑗 = 𝑖 − 1 ,if 𝑗 ≠ 𝑖 − 1 包含𝑘𝑖, … , 𝑘𝑗的subtree

所發生的機率

r有多種選擇

條件不同, 使用的subproblem不同

(12)

Dynamic Programming出招

 填表: e & w

e[i,j]: i=1 to n+1, j=0 to n

w[i,j]: i=1 to n+1, j=0 to n

 為什麼w要填表? 不然計算每個e[i,j]都需要做Θ(𝑗 − 𝑖)次 加法

3. 計算花費

w 0 1 2 3 4 5

1 2 3 4 5 6

w 0 1 2 3 4 5

1 2 3 4 5 6

Θ 𝑛2 i

j

𝑤 𝑖, 𝑗

= 𝑞

𝑖−1

𝑤 𝑖, 𝑗 − 1 + 𝑝

𝑗

+ 𝑞

𝑗

,if 𝑗 = 𝑖 − 1 ,if 𝑗 ≠ 𝑖 − 1

(13)

e 0 1 2 3 4 5 1

2 3 4 5 6

e 0 1 2 3 4 5

1 2 3 4 5 6

橘色是會用到的subproblem i

j

一次填一條對角線 Θ 𝑛3

(14)

大家來練習

𝒊 0 1 2 3 4 5

𝑝𝑖 0.15 0.10 0.05 0.10 0.20

𝑞𝑖 0.05 0.10 0.05 0.05 0.05 0.10

𝑤 𝑖, 𝑗

= 𝑞

𝑖−1

𝑤 𝑖, 𝑗 − 1 + 𝑝

𝑗

+ 𝑞

𝑗

,if 𝑗 = 𝑖 − 1 ,if 𝑗 ≠ 𝑖 − 1

𝑒 𝑖, 𝑗

=

𝑞

𝑖−1

𝑖≤𝑟≤𝑗

min {𝑒 𝑖, 𝑟 − 1 + 𝑒 𝑟 + 1, 𝑗 + 𝑤 𝑖, 𝑗 }

,if 𝑗 = 𝑖 − 1 ,if 𝑗 ≠ 𝑖 − 1

(15)

root[1..n,1..n] be new tables for i=1 to n+1

e[i,i-1]=𝑞𝑖−1 w[i,i-1]=𝑞𝑖−1 for l=1 to n

for i=1 to n-l+1 j=i+l-1

e[i,j]=∞

w[i,j]=w[i,j-1]+𝑝𝑗+𝑞𝑗 for r=i to j

t=e[i,r-1]+e[r+1,j]+w[i,j]

if t<e[i,j]

e[i,j]=t

root[i,j]=r return e and root

邊界起始值

填表: 兩層迴圈, 對角線順序

e紀錄expected cost, root紀錄選擇結果

Θ(𝑛3)

(16)

Dynamic Programming出招

 自己回家研究一下 15.5-1 on p. 403

4. 印出Optimal Binary Search Tree結果

參考文獻

相關文件

• 我們通常用 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]