随机插入与红黑树的二叉搜索树

时间:2013-06-01 06:06:01

标签: tree binary-tree binary-search-tree red-black-tree

我读过红黑树,我明白他们试图解决树变得不平衡的问题。但是,如果你使用随机插入怎么办?例如:

考虑以下需要插入的已排序数字:

1,2,3,4,5,6,7,8,9,10

如果我们天真地插入BST,树会看起来像: 1  2   3    ..

在这种情况下,树将是超级不平衡的,搜索将是线性O(N)

但是,如果我们将插入随机化,它可能看起来更平衡(但在平均情况下可能不会像红黑树一样平衡?)。如果我们使用红黑树,它将保证近乎平衡的BST,但有一点开销。除了“在线算法”(self balancing binary search trees

之外,什么时候绘制想要额外开销以提高效率的线与使用随机插入BST?

2 个答案:

答案 0 :(得分:1)

有这样的路线。您始终记得使用任何类型的动态数据结构(如BST和红黑树)的动机。动机非常简单 - 将数据保持在某种形状(以BST为例)。所以,如果你不想保持它,你可能会使用像排序数组这样的东西。数组排序可以在O(n log n)上完成。您可以在固定时间内对排序数据(例如min / max / nth)执行任何操作!这非常快!但是,如果您计划将新值添加到已排序的数组中,该怎么办?这是事情变得有趣的地方。因此,您必须移动您的数组并在适当的位置插入新值。它需要O(n)。它听起来不是一个正确的方式。但是,好消息。在O(log n)时间内有树可以处理插入和移除。

那么行呢。我会说。如果您计划仅在树中插入新元素。输入值是随机的。所以,BST完全可以完成这项任务。但是,如果您计划进行一些删除,那么您应该像RBTree那样使用新的自平衡树,因为BST由于删除而导致不平衡(BST上的删除操作是非对称的,它会生成高度为{{1}的树})。

还有第三种情况。您可以尝试为BST找到对称删除算法(stil未解决50年),并成为计算机科学的摇滚明星。 Goog运气好!

答案 1 :(得分:0)

使用AVL TREE进行平衡.. AVL树是一个自平衡的二叉搜索树,它是第一个发明的数据结构。1在AVL树中,任意节点的两个子树的高度最多相差一个;如果它们在任何时候相差多于一个,则重新平衡以恢复此属性。查找,插入和删除都在平均和最差情况下都花费O(log n)时间,其中n是操作之前树中节点的数量。插入和删除可能需要通过一个或多个树旋转来重新平衡树。

维基百科有一篇文章here