Dynamic Programming III
description
Transcript of Dynamic Programming III
Dynamic Programming IIIMichael Tsai2013/10/11
2
翻譯機問題 最笨翻譯機 : 每個英文單字直接翻成法文單字 做法 : 建一棵 balanced binary
search tree ( 例如紅黑樹 ), 裡面用英文單字當 key, 法文單字當作對應的資料 則每個字平均花的時間 假設我們知道每個字出現的頻率 ( 或機率 ), 可以做得更好嗎 ? 答 : 可以 ! 把常用的字放離 root 近一點 . the
machicolation
3
翻譯機問題 Optimal Binary Search Tree
問題 : 給一個序列共 n 個排好序的 key (). 我們要用這些 key 建立一棵 binary search tree. 出現的機率為 . 另外我們也有 n+1 個”假 key” 代表沒有出現在 K 中的值 , 可用來表示 . 代表小於的值 , 代表介於和的值 ,…,代表大於的值 . 假 key 出現的機率為 . 則目標是找出一棵 binary search tree 使得 Expected
cost 最小 .
𝑘1 𝑘2 𝑘𝑛……𝑑0 𝑑1 𝑑2 ……
𝑑𝑛𝑑𝑛− 1
4
++
since 使得以上 E[search cost] 最小的 binary search tree稱為 optimal binary search tree.
𝑘2𝑘1 𝑘5
𝑘4𝑘3
𝑑0 𝑑1
𝑑2 𝑑3
𝑑4
𝑑5
5
i 0 1 2 3 4 50.15
0.10
0.05
0.10
0.20
0.05
0.10
0.05
0.05
0.05
0.10
𝑘2𝑘1 𝑘5
𝑘4𝑘3
𝑑0 𝑑1
𝑑2 𝑑3
𝑑4
𝑑5
假設給定的 key 的出現機率為右上表格所顯示 , 則左上圖為 optimal binary search tree (expected cost=2.75)
觀察 : 機率最大的 key 不見得在 root ( 不在 root)
6
暴力法有多暴力 ? n 個 node 的 binary search tree 總共有個
(Catalan number)
7
小觀察 : binary search tree 的 subtree 必包含一段連續的 key 及 . 小定理 : 假設 T 為之 optimal binary search tree. 則 T 之 subtree 包含這些 key, 也必定是這些 key的 optimal binary search tree. 證明 : 如果找出的不是 optimal binary search
tree, 則表示可以找出一個更好的 binary search tree , expected cost 比更好 , 則可以用取代中的 , 得到一個比 T cost 更低的 binary search tree ( 矛盾 )
Dynamic Programming 出招1. 找出 Optimal Substructure
8
𝑇 ′ ′ 𝑇 ′
𝑇
𝑘𝑖 ,𝑘𝑖+1 ,…,𝑘 𝑗
+
+
¿𝐸 𝑖𝑗+𝐶
𝐸𝑖𝑗′ <E ij
𝐸𝑖𝑗′ +𝐶<𝐸 𝑖𝑗+𝐶矛盾 !
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
(𝑑𝑒𝑝𝑡 h𝑇 𝐿 (𝑘𝑚 )+1) ∙𝑝𝑚 + ∑𝑚=𝑖− 1
𝑟 −1
(𝑑𝑒𝑝𝑡 h𝑇 𝐿 (𝑑𝑚 )+1) ∙𝑞𝑚 𝑒 [𝑟 +1 , 𝑗 ]= ∑𝑚=𝑟+1
𝑗
(𝑑𝑒𝑝𝑡 h𝑇 𝑅 (𝑘𝑚 )+1) ∙𝑝𝑚 + ∑𝑚=𝑟+1
𝑗
(𝑑𝑒𝑝𝑡 h𝑇 𝑅 (𝑑𝑚 )+1)∙𝑞𝑚
𝑑𝑒𝑝𝑡 h𝑇 ( ∙ )=𝑑𝑒𝑝𝑡 h𝑇 𝐿(∙ )+1=𝑑𝑒𝑝𝑡 h𝑇 𝑅
(∙ )+1
𝑇
11
,if ,if
包含的 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 5123456
w 0 1 2 3 4 5123456
Θ (𝑛2 )i
j
𝑤 [ 𝑖 , 𝑗 ]={ 𝑞𝑖−1
𝑤 [𝑖 , 𝑗−1 ]+𝑝 𝑗+𝑞 𝑗
,if ,if
13
e 的填表順序
e 0 1 2 3 4 5123456
e 0 1 2 3 4 5123456
橘色是會用到的 subproblem
ij
一次填一條對角線Θ (𝑛3 )
14
大家來練習0 1 2 3 4 5
0.15 0.10 0.05 0.10 0.200.05 0.10 0.05 0.05 0.05 0.10
𝑤 [ 𝑖 , 𝑗 ]={ 𝑞𝑖−1
𝑤 [𝑖 , 𝑗−1 ]+𝑝 𝑗+𝑞 𝑗
,if ,if
𝑒 [𝑖 , 𝑗 ]={ 𝑞𝑖− 1
min𝑖≤ 𝑟≤ 𝑗
{𝑒 [ 𝑖 ,𝑟 −1 ]+𝑒 [𝑟+1, 𝑗 ]+𝑤 (𝑖 , 𝑗 )},if ,if
15
Optimal_BST(p,q,n)let e[1..n+1,0..n],w[1..n+1,0..n],and root[1..n,1..n] be new tablesfor i=1 to n+1e[i,i-1]=w[i,i-1]=for l=1 to nfor i=1 to n-l+1j=i+l-1e[i,j]=w[i,j]=w[i,j-1]++for r=i to jt=e[i,r-1]+e[r+1,j]+w[i,j]if t<e[i,j]e[i,j]=troot[i,j]=rreturn e and root
邊界起始值填表 : 兩層迴圈 , 對角線順序
e 紀錄 expected cost, root 紀錄選擇結果
Θ(𝑛3)
16
Dynamic Programming 出招 自己回家研究一下 15.5-1 on p. 403
4. 印出 Optimal Binary Search Tree 結果