为什么avl树比红黑树更快搜索?

时间:2011-05-20 21:12:36

标签: c++ data-structures atl red-black-tree avl-tree

我已经在几个地方阅读了它,可以更快地搜索树,但无法理解。我认为 : 红黑树的最大高度= 2 * log(N + 1) AVL树的高度= 1.44 * logo(N + 1)

是因为AVL更短吗?

3 个答案:

答案 0 :(得分:15)

查找项目所需的步骤数取决于项目与根目录之间的距离。

由于AVL树被打包得更紧(即它的最大高度更低),这意味着更多的物品更接近根,而不是红黑的情况。

额外的紧密包装也意味着AVL树在插入元素时需要更多的工作。 任何应用程序的最佳选择取决于它是插入密集型还是搜索密集型......

答案 1 :(得分:5)

如果输入键几乎是上升/下降,则AVL树优于红黑树,因为那时我们必须进行单次旋转(左 - 左或右 - 右)以添加此元素。此外,由于树将紧密平衡,搜索也会更快。

但是对于随机选择的输入键,RBTree更好,因为与AVL相比,它们需要更少的旋转插入。

总的来说,它取决于输入序列,它将决定树的倾斜程度以及执行的操作。对于插入密集型使用红黑树和搜索密集型使用AVL。

答案 2 :(得分:1)

AVL树和RBTree确实各有优点和缺点。如果你已经了解它们是如何工作的,你会感觉更好。

AVL在插入操作中比RBTree略快,因为插入时最多只有一次旋转,而RBTree可能有两次旋转。

RBTree在删除时最多只需要三次旋转,但在AVL中无法保证这一点。因此它可以比AVL更快地删除节点。

然而,最重要的是,它们都具有严格的对数树高度。

选择任何子树,使AVL“平衡”的属性保证两个子子树之间的高度差最多为1,也就是说,直观地说,整棵树都是严格平衡的。

但是当谈到RBTree时,规则变得“松散”,因为RBTree的属性只能保证树的深度不大于节点总数的对数的两倍。

以下是一些可能更精确的事实:

  

AVL树的高度严格小于:1.44log(n + 2)-0.328   (约)

     

红黑树的高度最多为2log(n + 1)

有关详细信息,请参阅https://en.wikipedia.org/wiki/AVL_tree#Comparison_to_other_structures

相关问题