Ruby 数据结构与算法:二叉搜索与 AVL 树详解
1. 二叉搜索算法
二叉搜索是一种用于搜索有序列表的高效算法。通过考虑每个顶点成为二叉搜索目标的可能性相同,并计算到达每个顶点的平均路径长度,我们可以得出在成功和不成功搜索的情况下,平均复杂度约为 $O(\lg n)$。这意味着在平均情况和最坏情况下,二叉搜索进行的比较次数为 $O(\lg n)$,表现非常出色。
下面我们来看一下不同情况下搜索百万元素数组时,二叉搜索所需的比较次数:
| 情况 | 比较次数 |
| ---- | ---- |
| 最好情况 | 1 次 |
| 最坏情况 | $\lfloor\lg 1000000\rfloor + 1 = 20$ 次 |
| 平均情况 | 约 $\lfloor\lg 1000000\rfloor = 19$ 次 |
2. 二叉搜索树
2.1 定义
二叉搜索树是一种特殊的二叉树,其每个顶点的值都大于其左子树中的所有值,并且小于其右子树中的所有值。这种特性使得我们可以按顺序遍历二叉搜索树,从而以排序顺序访问顶点中的值。
不过,二叉搜索树可能并不平衡,其高度可能大于 $\lfloor\lg n\rfloor$。例如,除了一个顶点外,每个顶点都只有一个子节点的二叉搜索树,其高度为 $n - 1$。
2.2 操作
与大多数集合不同,二叉搜索树在插入、删除和搜索元素方面都非常快速(前提是树不会变得过高过瘦)。以下是二叉搜索树的两个基本操作:
- add(t, v) :将值 $v$ 放入一个新的顶点,并将
超级会员免费看
订阅专栏 解锁全文

362

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



