软考
APP下载

最佳二叉排序树定义

最佳二叉排序树(Optimal Binary Search Tree,简称OBST)是一种特殊的二叉树,它具有最优查询效率的特点,通常用于对于大型数据集进行高效率查询的场景。

OBST 是一种二叉排序树,所以它的特点与一般的二叉排序树一样,即具备左小右大的特征。OBST 与一般的二叉排序树不同的是,通过精心构建节点的概率,可以使OBST 的查询次数最少,从而达到最优查询效率的目的。

OBST的节点构成

一个OBST 至少有一个节点,也有可能有很多节点。每一个节点有两个子节点:左边的子节点的键值小于该节点的键值,右边的子节点的键值大于该节点的键值。与其他的二叉排序树不一样的是:对于每一个节点,都含有一个权重值,该值是该节点被搜索到的概率。对于每一个查询,OBST都是按照该节点的权重值来进行查询的,因此OBST中的节点概率是必需的。

OBST节点概率的计算方法

在构建OBST时,需要计算每个节点的概率,即每个键值被查询到的概率。一般是基于历史数据来进行的。如果历史数据不可得,就可以用其他的方法来近似计算。

假设有 $n$ 个查询,并已知各个查询被搜索到的概率为 $p_1, p_2, …,p_n$,则每个查询在OBST 中的概率为 $q_i = \sum_{j=1}^{i}p_j$。这个概率式递归地从下往上计算得到。当搜索表中所有的查询都被计算完毕后,就可以确定对应的权重。

OBST 的构建方法

OBST的构建是一种动态规划的过程,首先确定 OBST 中键值的序列,然后用概率值来构建 OBST。设 OBST $($i, $j)$ 是 p($i$ ~ $j$) 中最佳二叉排序树,其成本为 c($i$, $j$), 则 OBST的最终成本产生于从 i 到 j 内任意节点产生成为根节点的成本之和。

对于 i ($i ≤ k ≤ j$),在OBST($i$, $j$)中,节点 $k$ 有可能成为树根,故其左右子树为 OBST($i$, $k-1$)和OBST($k+1$, $j$),其成本为:$w_{i,j} + c_{i,k-1} + c_{k+1,j}$。由此,可以得到递归式:

$c_{i,j} =

\begin{cases}

q_i+p_i+c_{i,i-1}, & j=i-1\\

\min\limits_{i \le k\le j}[k, j] + \min\limits_{1 \le k\le j}[i, k-1] + w_{i,j}, & i \le j

\end{cases}

$

其中 $w_{i,j}$ 为 $p_i$ 到 $p_j$ 的总权重值,也就是查询概率的总和。

OBST的查询效率

OBST的最优查询效率取决于构建该树的策略。OBST使用查找树法查询时,可以得到最佳查询效率。OBST 的内部节点数比叶结点数少1。在理想情况下,OBST 按照概率排列构建。这些概率反映了查询出现的频率,因此 OBST 能够使平均查询次数最少。

备考资料 免费领取:软件设计师报考指南+考情分析+思维导图等 立即下载
真题演练 精准解析历年真题,助你高效备考! 立即做题
相关阅读
软件设计师题库