算法导论:第15章 动态规划_5最优二叉搜索树

本文详细介绍了最优二叉搜索树的概念,给出了如何构造和分析这种树的动态规划方法。通过递归算法和递推公式计算包含不同关键字序列的最优二叉搜索树的期望搜索代价,最终给出一个示例计算过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*
最优二叉搜索树:给定一个n个不同关键字的已经排序的序列K=<k1,k2,...,kn>(因此k1<k2<...<kn),希望用这些关键字构造一颗二叉搜索树。
对每个关键字ki,都有一个概率pi表示其搜索频率。有些要搜索的值可能不在K中,因此我们还有n+1个“伪关键字”do,d1,d2,...,dn表示不
在K中的值。d0表示所有小于k1的值,dn表示所有大于kn的值,对i=1,2,...,n-1,伪关键字di表示所有在ki和ki+1之间的值。对于每个伪关
键字di,也都有一个概率pi表示对应的搜索频率。下图显示了n=5个关键字的集合构造的两颗二叉搜索树。每个关键字ki是一个内部结点,
而每个关键字di是一个叶结点。每次搜索要么成功(找到某个关键字ki),要么失败(找到某个伪关键字di),因此有如下公式:
i属于[1,n] pi的和 + i属于[0,n] qi的和 = 1
关键字ki的两个伪关键字为di-1,di
				k2
		k1						k4
	d0		d1			k3				k5
					d2		d3		d4		d5

动态规划分析:
S1:最优二叉搜索树的结构
二叉搜索树的任意子树,必须包含连续关键字ki,...,kj, 1<=i<=j<=n,而其叶节点必然是伪关键字di-1,...,dj。
最优子结构:如果一颗最优二叉搜索树T有一颗包含关键字ki,...,kj的子树T',那么T'必然是包含关键字ki,...,kj和伪关键字di-1,...,dj的
           子问题的最优解。
剪切-粘贴法证明:如果存在子树T'',使得T''的期望搜索代价比T'的期望搜索代价要小,那么将T'从T中删除,将T''粘贴到该位置,就得到一颗
                期望搜索代价比T的期望搜索代价更小的树,这与T是最优二叉搜索树矛盾,所以T'是子问题的最优解,即最优二叉搜索树有
				最优子结构
最优子结构---->可以用子问题的最优解构造原问题的最优解,给定关键字序列ki,...,kj,设其中某个关键字为kr(i<=r<=j),是这些关键字的最
				优子树的根节点。那么kr的左子树就包含关键字ki,...,kr-1(和伪关键字di-1,...,dr-1),而右子树包含关键字kr+1,...,kj
				(和伪关键字dr,...,dj)。只要我们检查所有可能的根节点kr(i<=r<=j),并对每种情况分别求解包含ki,...,kr-1及kr+1,...,
				kj的最优二叉搜索树,即可保证找到原问题的最优解
易错点:注意空子树。假设对于包含关键字ki,...,kj的子问题,我们选定ki为根节点,其实有一个伪关键字di-1,若kj为根节点,那
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值