问题定义
给定一个n个不同关键词的已排序的序列K=<k1,k2,...,kn>(k1<k2<...<kn)K=<k_1,k_2,...,k_n>(k_1<k_2<...<k_n)K=<k1,k2,...,kn>(k1<k2<...<kn),用这些关键字构建一棵二叉搜索树T。
- 对每个关键字kik_iki,都有一个频率pip_ipi表示其搜索频率
- 有n+1个**“伪关键字”d0,d1,d2...,dnd_0,d_1,d_2...,d_nd0,d1,d2...,dn表示不在K中的值**,每个值都有一个频率qiq_iqi表示对应的搜索频率
- d0d_0d0:所有小于k1k_1k1的值
- dnd_ndn:所有大于knk_nkn的值
- di(i=1,2,...n−1)d_i(i=1,2,...n-1)di(i=1,2,...n−1):所有介于(ki,ki+1)(k_i,k_{i+1})(ki,ki+1)之间的值
- 每个关键字kik_iki是一个内部节点
- 每个伪关键字did_idi是一个叶子节点
对于每次搜索,有两种情况:
- 成功:找到某个关键字kik_iki
- 失败:找到某个伪关键字$d_i $
所以:
∑i=1npi+∑i=0nqi=1 \sum_{i=1}^{n}p_i+\sum_{i=0}^{n}q_i=1 i=1∑npi+i=0

本文介绍了最优二叉搜索树的概念,它是最小化搜索代价的二叉搜索树。通过应用动态规划算法,讨论了最优二叉搜索树的结构、递归算法以及如何计算其期望搜索代价,并提供了构建最优解的思路。
最低0.47元/天 解锁文章
6293

被折叠的 条评论
为什么被折叠?



