博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
最优二叉查找树
阅读量:5143 次
发布时间:2019-06-13

本文共 1347 字,大约阅读时间需要 4 分钟。

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

 

一颗最优二叉查找树就是期望代价最小的BST。

 

如果一颗最优二叉查找树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。特别的,当r=i时,左子树包含ki,...,ki-1,di-1,...,di-1,此时左子树只包含di-1;当r=j时,右子树包含kj+1,...,kj,dj,...dj,此时右子树只包含dj

 

定义e[i][j]为搜索一颗包含关键字ki,...,kj的最优二叉查找树的期望代价,其中1=<i,j<=n,j>=i-1(当j=i-1时子树只有虚拟键di-1),因此1=<i<=n+1,0=<j<=n.

 

 定义w[i][j]=∑pl+∑ql

以r为子树的根,有公式:

e[i][j]=pr+e[i][r-1]+e[r+1][j]+w[i][r-1]+w[r+1][j]=e[i][r-1]+e[r+1][j]+w[i][j]

所以,递归公式有:

e[i][j]=qi-1(if j=i-1)      or     min{e[i][r-1]+e[r+1][j]+w[i][j]}(if i<=j)

w[i][j]=qi-1(if j=i-1)   or    w[i][j-1]+pj+qj(if i<=j)

 

optimal bst
1 OPTIMAL-BST(p,q,n)  2      for(i=1;i<=n+1;++i)  3           e[i][i-1]=q[i-1]  4           w[i][i-1]=q[i-1]  5     for(l=1;l<=n;++i)  6        for(i=1;i<=n-l+1;++i)  7             j=i+l-1  8             w[i][j]=w[i][j-1]+p[j]+q[j]  9             e[i][j]=INFINITY 10             for(r=i;r<=j;++r) 11                   if(e[i][r-1]+e[r+1][j]+w[i][j]

转载于:https://www.cnblogs.com/daniagger/archive/2012/02/09/2343990.html

你可能感兴趣的文章
数组元素的引用
查看>>
hdu6440 Dream 2018CCPC网络赛C 费马小定理+构造
查看>>
codeforces1073d Berland Fair 思维(暴力删除)
查看>>
架构师速成6.6-知识的收集整理学习
查看>>
git分支
查看>>
Missing URI template variable 'id' for method parameter of type long
查看>>
JS类与对象/构造函数/对象模型[回顾]
查看>>
2-1aabb
查看>>
matlab第一个小应用
查看>>
Lucene简单介绍
查看>>
OAuth2 .net MVC实现获取token
查看>>
java中XML操作:xml与string互转、读取XML文档节点及对XML节点增删改查
查看>>
Nginx多域名配置
查看>>
使用Reporting Services时遇到的小问题
查看>>
传递事件和传递命令系统···
查看>>
约瑟夫问题
查看>>
Arduino 报错总结
查看>>
树莓派Android Things物联网开发:树莓派GPIO引脚图
查看>>
Database、User、Schema、Tables、Col、Row
查看>>
ckplayer网页播放器简易教程
查看>>