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

Tree 随机插入二叉搜索树与红黑树,tree,binary-tree,binary-search-tree,red-black-tree,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,但有一点开销。除了“在线算法”(online algorithm

我读过关于红黑树的书,我知道他们试图解决树变得不平衡的问题。但是,如果使用随机插入,该怎么办。例如:

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

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

如果我们天真地将树插入到BST中,该树将如下所示: 1. 2. 3.

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


然而,如果我们随机插入,它可能看起来更平衡(但在一般情况下可能不像红黑树那样平衡?)。如果我们使用红黑树,它将保证接近平衡的BST,但有一点开销。除了“在线算法”(online algorithms)之外,我们什么时候能得出这样的结论:为了提高效率,我们需要额外的开销,而不是使用随机插入BST(

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


维基百科有一篇文章。

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

那线条呢。我会说。如果您只计划在树中插入新元素。输入值是随机的。因此,BST完全可以完成这项任务。但是,如果您计划执行一些删除操作,那么您应该创建一个新的自平衡树,如RBTree,因为BST由于删除而不平衡(BST上的删除操作是非对称的,它会生成高度为
sqrt(n)
)的树)

还有第三种情况。你可以尝试为BST找到一个对称删除算法(50年来仍然没有解决),成为计算机科学的摇滚明星。祝你好运