JX8NET 小游戏 上图中的三棵 BST 树中

来源:互联网 发布:mac无法读取u盘 编辑:程序博客网 时间:2024/05/17 21:40

来源:JX8NET 小游戏 上图中的三棵 BST 树中

如果树中节点的数量为 n,则一棵满足O(log2n) 渐进运行时间的 BST 树的高度应接近于比 log2n 小的最大整数。

JX8NET 小游戏 上图中的三棵 BST 树中,树(b)拥有最好的高度与节点数量的比例。树(b)的高度为 3 ,节点数量为 8,所以 log28 = 3,结果正好与树的高度相等。

树(a)的节点数量为 10,而高度为 4,log210 = 3.3219,比 3.3219 小的最大整数是 3,所以树(a)最理想的高度应该为 3。我们可以通过移动距离最远的节点到中间的某个非叶子节点,以减少数的高度,以使该树的高度与节点数量的比例达到最优。

树(c)的情况是最差的,它的节点数量是 5,所以log25 = 2.3219,则理想高度为 2,但实际上是 4。

实际上我们真正面对的问题是如何保证 BST 的拓扑结构始终保持树高度与节点数量的最佳比例。因为 BST 的拓扑结构与节点的插入顺序息息相关,一种方式是通过数据的乱序来保证。如果在向树中插入节点前就可以得到数据还好说,而如果我们无法掌控数据的来源呢?比如,数据来自用户的输入,或者来自传感器的实时数据等,基本上要保证数据乱序是没希望了。那么,另一种方案就是在不试图让数据源决定数据顺序的情况下,新的节点插入后仍然可以保持 BST 树的平衡(balanced)。这种能够始终维持树平衡状态的数据结构称为自平衡二叉查找树(self-balancing binary search tree)。

一棵平衡树指的是树能够保持其高度与广度能够保持预先定义的比例。不同的数据结构可以定义不同的比例以保持平衡,但所有的比例都趋向于log2n。那么,一颗自平衡的 BST 也同样呈现出 O(log2n) 的渐进运行时间。

有许多种不同的自平衡 BST 数据结构,例如 AVL 树、红黑树(Red-Black Tree)、2-3 树、2-3-4 树、伸展树(Splay Tree)、B 树等等。本文中我们将简要介绍其中的两种:AVL 树和红黑树。


0 0