动态规划(5)

最优二叉搜索树问题

        问题描述:给定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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值