1. 介紹
給予n個內部節點加權值 pi 、n+1個外部節點加權值 qi ,在 n+11(n2n) 個不同的Binary Search Trees中,具有最小的搜尋總成本的稱為最佳化二元搜尋樹(Optimal Binary Search Tree);可能大於一棵。
搜尋總成本=成功搜尋成本+失敗搜尋成本
成功搜尋成本=∑i=1n(內部節點i的level值)∗pi
失敗搜尋成本=∑j=0n(外部節點i的level值)∗qi
其中,level值即是比較次數。
2. 使用Dynamic Programing解OBST
內部節點: ai+1, ai+2, ...,aj 且 ai+1<ai+2<...<aj
內部節點加權值: pi+1, pi+2, ...,pj
外部節點加權值: qi, qi+1, ...,qj
Ti,j: 由 ai+1, ai+2, ...,aj所組成的OBST
Ci,j: 表示Ti,j的總成本
Ri,j: 表示Ti,j的Root
Wi,j: 表示Ti,j的內、外部節點加權值總和
Ti,i代表空樹,Ci,j=0,Ri,j為NULL
,Wi,j=qi
從內部節點中ai+1, ai+2, ...,aj,挑選出一個節點 ak 作為Root,則其左子樹有ai+1, ...,ak−1,最佳二元搜尋數樹為 Ti, k−1 ;右子樹有ak+1, ...,aj,最佳二元搜尋數樹為 Tk+1, j
Ci,j=pk+(Ci, k−1+Wi, k−1)+(Ck, j+Wk+1, j) =Wi,j+Ci,k−1+Ck,j
min{Ci,j}=Wi,j+mini+1≤k≤j{Ci,k−1+Ck,j}
3. 範例
4個內部節點: a1, a2, a3, a4 且 a1<a2<a3<a4
內部節點加權值: (p1, p2, p3, p4)=(3,3,1,1)
外部節點加權值: q0, q1, q2, q3, q4=(2,3,1,1,1)
空樹(外部節點是2, 3, 1, 1, 1以此類推)
R0,1=1,W0,1=a1+q0+q1=3+2+2=8,C0,1=8
R1,2=2,W1,2=a2+q1+q2=3+3+1=7,C1,2=7
R2,3=3,W2,3=a3+q2+q3=1+1+1=3,C2,3=3
R3,4=4,W3,4=a4+q3+q4=1+1+1=3,C3,4=3
W0,2=a1+a2+q0+q1+q2=3+3+2+3+1=12C0,2=W0,2+min1≤k≤2{C0,k−1+Ck,2}=W0,2+(C0,0+C1,2)=12+0+5=17R0,2=1
W1,3=a2+a3+q1+q2+q3=3+1+3+1+1=9C1,3=W1,3+min2≤k≤3{C1,k−1+Ck,3}=W1,3+(C1,1+C2,3)=9+0+3=12R1,3=2
W2,4=a3+a4+q2+q3+q4=1+1+1+1+1=5C2,4=W2,4+min3≤k≤4{C2,k−1+Ck,4}=W2,4+(C2,2+C3,4)=5+0+3=8R2,4=3
W0,3=a1+a2+a3+q0+q1+q2+q3=3+3+1+2+3+1+1=14C0,3=W0,3+min1≤k≤3{C0,k−1+Ck,3}=W0,3+(C0,1+C2,3)=14+8+3=25R0,3=2
W1,4=a2+a3+a4+q1+q2+q3+q4=3+1+1+3+1+1+1=11C1,4=W1,4+min2≤k≤4{C1,k−1+Ck,4}=W1,4+(C1,1+C2,4)=11+8=19R1,4=2
W0,4=a1+a2+a3+a4+q0+q1+q2+q3+q4=3+3+1+1+2+3+1+1+1=16C0,4=W0,4+min1≤k≤4{C0,k−1+Ck,4}=W0,4+(C0,1+C2,4)=16+8+8=32R0,4=2