最优二叉查找树
2012-02-09 15:12
225 查看
给定一个由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
一颗最优二叉查找树就是期望代价最小的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
OPTIMAL-BST(p,q,n) for(i=1;i<=n+1;++i) e[i][i-1]=q[i-1] w[i][i-1]=q[i-1] for(l=1;l<=n;++i) for(i=1;i<=n-l+1;++i) j=i+l-1 w[i][j]=w[i][j-1]+p[j]+q[j] e[i][j]=INFINITY for(r=i;r<=j;++r) if(e[i][r-1]+e[r+1][j]+w[i][j]<e[i][j]) e[i][j]=e[i][r-1]+e[r+1][j]+w[i][j] root[i][j]=r
相关文章推荐
- 动态规划方法生成最优二叉查找树
- 最优二叉查找树的期望搜索代价(动态规划)C++实现
- 算法笔记_053:最优二叉查找树(Java)
- 【算法导论】动态规划之最优二叉查找树
- 最优二叉查找树
- 动态规划方法生成最优二叉查找树
- 最优二叉查找树
- 动态规划——最优二叉查找树
- 动态规划--最优二叉查找树(转载小妞滴。。。)
- 【算法导论】动态规划之最优二叉查找树
- 最优二叉查找树详解(算法导论学习笔记)
- DP之最优二叉查找树
- 最优二叉查找树(动态规划算法实现) 算法导论216
- 【算法学习】最优二叉查找树(动态规划)
- 动态规划--最优二叉查找树
- 算法导论学习笔记(10)——动态规划之最优二叉查找树
- 算法导论15.5 最优二叉查找树
- 《算法导论》笔记 第15章 15.5 最优二叉查找树
- 动态规划4-最优二叉查找树
- 【算法学习】最优二叉查找树(动态规划)