【问题标题】:Why is avl tree faster for searching than red black tree?为什么 avl 树的搜索速度比红黑树快?
【发布时间】:2011-08-29 23:27:23
【问题描述】:

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

是因为AVL更短吗?

【问题讨论】:

  • 阅读一本关于数据结构的书。但是,如果我没记错的话,AVL 树比 RB 树更接近完美平衡,代价是插入 AVL 比插入 RB 要贵得多。跨度>
  • 是的,因为它更短,因此从上到下的节点更少。也许一张图片会有所帮助:en.wikipedia.org/wiki/File:AVL_Tree_Rebalancing.svg

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


【解决方案1】:

是的。

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

由于 AVL 树的包装更紧密(即它的最大高度更低),这意味着比红黑情况下更多的项目更靠近根。

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

【讨论】:

  • 一个很好的解释。我只能添加一些数字:AVL 树中节点深度之间的最大差异为 1,在 R-B 树中,一个节点可以比另一个节点深两倍(深度是节点与根之间的距离)。但是 R-B 树中的插入和删除最多需要 3 次旋转,而 AVL 树可能需要与树深度相等的旋转次数。 (旋转是平衡树的基本操作,这里不再赘述)
【解决方案2】:

如果输入键几乎是升/降,则 AVL 树比红黑树更好,因为这样我们就必须进行单次旋转(左-左或右-右大小写)来添加这个元素。此外,由于树将是紧密平衡的,因此搜索也会更快。

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

总体而言,它取决于输入序列,这将决定我们的树的倾斜程度以及执行的操作。对于插入密集型使用 Red-Black Tree,对于搜索密集型使用 AVL。

【讨论】:

    【解决方案3】:

    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。

    【讨论】:

      猜你喜欢
      • 2015-03-06
      • 2012-11-30
      • 2016-03-18
      • 2019-07-09
      • 2013-04-21
      • 2013-11-30
      • 2012-11-21
      • 1970-01-01
      • 2012-11-22
      相关资源
      最近更新 更多