最优二叉搜索树问题
问题描述:给定n个互异的关键字组成的序列K=<k1,k2,...,kn>,且关键字有序(k1<k2<...<kn),我们想从这些关键字中构造一棵二叉查找树。对每个关键字ki,一次搜索搜索到的概率为pi。可能有一些搜索的值不在K内,因此还有n+1个“虚拟键”d0,d1,...,dn,他们代表不在K内的值。具体:d0代表所有小于k1的值,dn代表所有大于kn的值。而对于i = 1,2,...,n-1,虚拟键di代表所有位于ki和ki+1之间的值。对于每个虚拟键,一次搜索对应于di的概率为qi。要使得查找一个节点的期望代价最小,就需要建立一棵最优二叉查找树。
根据题意可建立如图所示的二叉树n=5(不止2个)
搜索概率如下:
i | 0 | 1 | 2 | 3 | 4 | 5 |
pi | 0.15 | 0.10 | 0.05 | 0.10 | 0.20 | |
qi | 0.05 | 0.10 | 0.05 | 0.05 | 0.05 | 0.10 |
期望代价的计算公式:
代价=(深度+1)×概率
最终将每个节点的代价相加即为二叉树的总代价。其中代价最小的树即为最优二叉搜索树。
利用动态规划思想求解此问题:
步骤一:最优二叉搜索树的结构
我们需要利用最优子结构性质来证明,我们可以用子问题的最优解构造原问题的最优解。给定关键字ki,...,kj&#x