文章目录
一、问题定义
1.1 二叉搜索树
二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉搜索树。
规定树根为第0层,圆结点为数据,方结点为数据之间的空隙。
1.2 概率分布
实际上每个数据出现的概率是不同的,给定序列
记
1.3 检索数据的平均时间
对于数据集
规定树根为第0层,结点
例如,给定树:
则平均检索时间为:
1.4 最优二叉搜索树问题
对于数据集
二、算法
2.1 分析问题结构
以
令
2.2 建立递推关系
假设以
左子树:
根:
右子树:
令
则可建立递推方程:
(1)为了不遗漏最优解,所以需要从
到 依次选取做根尝试,选出最小值 (2)
表示以 做根的最优左子树的比较次数 (3)
表示以 做根的最优右子树的比较次数 (4)对于给定的数据
,需要先与根 进行比较后才可以进入到左子树或右子树;而由于使用根 将左子树和右子树连接起来,子树的每个结点高度均增加了一层,所以在比较次数上也要加1,所以 是由增加的左子树的比较次数、增加的右子树的比较次数、和根的比较次数之和
由根
2.3 自底向上计算
初始化:当左子树或右子树为空时,其平均查找数为0
不妨以
0 | 1 | 2 | 3 | 4 | |
---|---|---|---|---|---|
0 | NULL | NULL | NULL | NULL | NULL |
1 | 0 √ | √ | √ | √ | ※ |
2 | NULL | 0 | √ | ||
3 | NULL | NULL | 0 | √ | |
4 | NULL | NULL | NULL | 0 | √ |
5 | NULL | NULL | NULL | NULL | √ |
显然,要计算一个值,我们需要计算它一行一列的数据,因此确定计算顺序:
2.4 追踪最优方案
构造追踪数组
在计算
追踪时,从
如此寻找直至对角线部分。
2.5 复杂度分析
时间复杂度
空间复杂度
版权声明:本文为博主作者:友人帐_原创文章,版权归属原作者,如果侵权,请联系我们删除!
原文链接:https://blog.csdn.net/m15253053181/article/details/128895617