最优二叉搜索树问题
山椒π 2009-09-16 09:12:45 最优二叉搜索树(Optimal BST,Optimal Binary Search Tree)
二叉搜索树是一颗满足如下条件的树:
1.每个节点包含一个键值
2.每个节点有最多两个孩子
3.对于任意两个节点x和y,它们满足下述搜索性质:
a)如果y在x 的左子树里,则key[y]<=key[x]
b)如果y在x的右子树里,则key[y]>=key[x]
而最优二叉搜索树则整个搜索成本最低的二叉搜索树。具体来说就是:给定键值序列 K = <k1, k2, . . . , kn>,k1 < k2 <· · · < kn,其中键值ki,被搜索的概率为pi,要求以这些键值构建一颗二叉搜索树T,使得搜索的期望成本最低(搜索成本为检查的节点数)。
对于键值ki, 如果其在构造的二叉搜索树里的深度(离开树根的分支数)为depthT(ki),则搜索该键值的成本= depthT(ki) +1(需要加上深度为0的树根节点)。由于每个键值被搜索的概率分别为pi,i=1,2,3…,n。我们有:
E[T的搜索成本] = Si=1, n(depthT(ki) +1) · pi
假定每次搜索都是针对二叉搜索树里面存在的某个节点,请:
1.证明用穷举法构造最优二叉搜索树的时间成本为W(4n/n3/2)。
2.假定我们有6个键值:k1、k2、k3、k4、k5、k6,它们被搜索的概率分别如下:
节点
k1
k2
k3
k4
k5
k6
被搜概率
0.24
0.18
0.09
0.13
0.3
0.06
请使用动态规划算法,编写程序计算w、e和root三张表,打印在屏幕上,并在屏幕上画出最优二叉搜索树。下面是我们的动态规划算法的伪代码实现:
OPTIMAL-BST (p, q, n)
1.for i ←1 to n+1 do
2. e[i, i−1]←0; w[i, i−1]←0
3.for l←1 to n do
4. for i←1 to n−l+1 do
5. j←i+l−1
6. e[i, j]←∞
7. w[i, j]← w[i, j−1] + pj
8. for r←i to j do
9. t←e[i, r−1] + e[r+1, j] + w[i, j]
10. if t < e[i, j] then e[i, j]←t; root[i, j] ←r
11.return e and root
3.证明最优BST的动态规划解法的时间复杂性为W(n3)。
4.如每个键值被访问的概率相等,请改良第2问里面的算法以降低BST构造成本。
5.如果给定的键值序列是完全无序的,请设计一个成本更低的构造最优BST算法。
希望大家能给予具体或者思想理论性的指导,谢谢。