我读过红黑树,我明白他们试图解决树变得不平衡的问题。但是,如果你使用随机插入怎么办?例如:
考虑以下需要插入的已排序数字:
1,2,3,4,5,6,7,8,9,10
如果我们天真地插入BST,树会看起来像: 1 2 3 ..
在这种情况下,树将是超级不平衡的,搜索将是线性O(N)
但是,如果我们将插入随机化,它可能看起来更平衡(但在平均情况下可能不会像红黑树一样平衡?)。如果我们使用红黑树,它将保证近乎平衡的BST,但有一点开销。除了“在线算法”(self balancing binary search trees )
之外,什么时候绘制想要额外开销以提高效率的线与使用随机插入BST?答案 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)