算法导论 — 15.5 最优二叉搜索树

本文探讨了如何构建期望搜索代价最小的二叉搜索树,即最优二叉搜索树,通过动态规划方法解决该问题,并提供了算法实现及优化策略。

###笔记

二叉搜索树满足如下性质:假设 x x x是二叉搜索树中的一个结点。如果 l l l x x x的左子树的一个结点,那么 l . k e y ≤ x . k e y l.key ≤ x.key l.keyx.key。如果 r r r x x x的右子树的一个结点,那么 r . k e y ≥ x . k e y r.key ≥ x.key r.keyx.key
  
  也就是说,二叉搜索树中的任意一个结点,它的左子树中的所有结点都不大于它,它的右子树中的所有结点都不小于它。下图给出了一个二叉搜索树的例子。
  这里写图片描述
  最优二叉搜索树(Optimal Binary Search Tree)问题描述如下。给定一个 n n n个不同关键字的已排序的序列 K [ 1.. n ] = &lt; k 1 , k 2 , … , k n &gt; K[1..n]= &lt;k_1, k_2, …, k_n&gt; K[1..n]=<k1,k2,,kn>(因此 k 1 &lt; k 2 &lt; … &lt; k n k_1 &lt; k_2 &lt; … &lt; k_n k1<k2<<kn),我们希望用这些关键字构造一个二叉搜索树。对每个关键字 k i k_i ki,都有一个概率 p i p_i pi表示其搜索概率。搜索过程中有可能遇到不在 K [ 1.. n ] K[1..n] K[1..n]中的元素,因此我们还有 n + 1 n+1 n+1个元素的“伪关键字”序列 D [ 0.. n ] = &lt; d 0 , d 1 , d 2 , … , d n &gt; D[0..n] = &lt;d_0, d_1, d_2, …, d_n&gt; D[0..n]=<d0,d1,d2,,dn>,表示搜索过程中可能遇到的所有不在 K [ 1.. n ] K[1..n] K[1..n]中的元素。 d 0 d_0 d0表示所有小于 k 1 k_1 k1的元素; d n d_n dn表示所有大于 k n k_n kn的元素;对 i = 1 , 2 , … , n − 1 i = 1, 2, …, n-1 i=1,2,,n1 d i d_i di表示所有在 k i k_i ki k i + 1 k_{i+1} ki+1之间的元素。对每个伪关键字 d i d_i di,也有一个概率 q i q_i qi表示对应的搜索概率。在二叉搜索树中,伪关键字 d i d_i di必然出现在叶结点上,关键字 k i k_i k

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值