最优二叉查找树是什么书的问题

给定一个由n个互异的关键字组成嘚序列K={k1,k2,...,kn}且关键字有序,对于每一个关键字ki一次搜索为ki的概率是pi。某些搜索的值可能不在K内因此还有n+1个虚拟键d0,d1,...,dn代表不再K内的值。d0代表所有小于k1的值dn代表所有大于kn的值,对于i=1,2,...,n-1di代表所有位于ki和ki+1之间的值。对每个虚拟键di一次搜索对应于di的概率是qi。定义在T内一次搜索的期朢代价为E=∑(depth(ki)+1)*pi+∑(depth(di)+1)*qi=1+∑depth(ki)*pi+∑depth(di)*qi

一棵最优二叉查找树是什么树就是期望代价最小的BST

1)一颗最优二叉树不一定是一颗整体高度最小的树;也不一定总把具有最大概率的关键字作为根节点。
2)二叉查找树的子树必定包含连续范围内的关键字
3)当一颗树成为一个节点的子树时,它的期望代價增加值为该树中所有概率的总和

}

给定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要使得查找一个节点的期望代价(代价可以定义为:比如从根节点到目标节点的路径上節点数目)最小,就需要建立一棵最优二叉查找树是什么树

                     

已知每个关键字以及虚拟键被搜索到的概率,可以计算出一个给定二叉查找树内一次搜索的期望代价假设一次搜索的实际代价为检查的节点的个数,即所发现的节点嘚深度加1.计算一次搜索的期望代价等式为:

                   

 建立一棵二叉查找树期望搜索代价最小,那么这棵二叉查找树就是最优二叉查找树是什么树

                    

如果一棵最优二叉查找树是什么树T有一棵包含關键字ki,..,kj的子树T',那么这可子树T'对于关键字Ki,...,kj和虚拟键di-1,...dj的子问题也必定是最优的

给定关键字ki,...,kj,假设kr(i<=r<=j)是包含这些键的一棵最优子树的根其左孓树包含关键字ki,...,kr-1和虚拟键di-1,...,dr-1,右子树包含关键字kr+1,...,kj和虚拟键dr,...dj我们检查所有的候选根kr,就保证可以找到一棵最优二叉查找树是什么树。

定义e[i,j]为包含关键字ki,...,kj的最优二叉查找树是什么树的期望代价最终要计算的是e[1,n]。

当j >= i时需要从ki,...,kj中选择一个根kr,然后分别构造其左子树和右子树下面需要计算以kr为根的树的期望搜索代价。然后选择导致最小期望搜索代价的kr做根

子树中每个节点深度都增加1.期望搜索代价增加量为子树中所有概率的总和。

对一棵关键字ki,...,kj的子树所有概率之和为:

                    

以kr为根的子树的期望搜索代价为:

                    

                     

因此e[i][j]可以重写为:

                      

                    

将e,w,root对角线旋转到水平方向。如下图:

                  

}

我要回帖

更多关于 最优二叉查找树是什么 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信