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