用动态规划解决查找问题

本文探讨了动态规划在解决复杂查找问题中的应用,包括最优二叉查找树的构建及近似串匹配算法,深入解析状态转移方程,提供代码实现。

用动态规划解决查找问题

本章讲解的例题皆有一定的难度。关于最优性原理本文不给予证明。

一.最优二叉查找树问题

问题描述:

设{r1,r2,r3,…,rn}为一个有n个记录的集合,每股记录对应的查找的概率为{p1,p2,p3,…,pn},现在要求出这n个记录构成的最优二叉树。最有二叉树指的是这n个记录查找的平均次数最少。

分析问题:
假设C(i,j)表示{ri,ri+1,…,rj}的最优二叉查找树的平均查找次数,那么下面看一个推导
在这里插入图片描述
我们得到状态方程为:
C ( i , j ) {C(i,j)} C(i,j)= m i n i ≤ k ≤ j {min_{i\leq k \leq j}} minikj{ ∑ s = i j p s {\sum_{s=i}^{j}p_{s}} s=ijps+ C ( i , k − 1 ) {C(i,k-1)} C(i,k1)+ C ( k + 1 , j ) {C(k+1,j)} C(k+1,j)}
接下来为了可以让那个递推进行下去,我们需要定义最基本的子问题,对于求基本子问题的一般方式是根据递推方程把它的各个情况看一遍,可以直接得结果的就是子问题(一般都是在边界),根据这个方法我们可以很容易的得到:
C ( i , i − 1 ) = 0 {C(i,i-1)}=0 C(i,i1)=0
C ( i , i ) = p i {C(i,i)}=p_{i} C(i,i)=p<

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值