【问题标题】:AVL tree rotation and red-black tree color flipsAVL 树旋转和红黑树颜色翻转
【发布时间】:2013-10-13 23:42:57
【问题描述】:

众所周知,插入和删除都需要O(log n)。 AVL 树需要 O(log n),因为它需要 O(log n) 插入和 O(log n) 旋转才能平衡。

RB 树需要 O(log n),因为它需要 O(log n) 才能插入,在第三版算法简介中,对于案例 1(颜色翻转),RB-INSERT-FIXUP 需要 O(log n),最多旋转2次。 所以看起来AVL需要2O(log n),但是RB树需要2O(log n)+C。

为什么我们认为 RB 树在插入方面比 AVL 更快?仅仅因为旋转比颜色翻转需要更多时间?旋转和颜色翻转都需要 O(1),为什么旋转比颜色翻转更耗时? 谢谢!:)

【问题讨论】:

    标签: algorithm avl-tree red-black-tree


    【解决方案1】:

    如果我正确理解您的问题,是的,RB-Trees 和 AVL-Trees 都在O(logn) 时间提供查找、插入、删除功能。

    AVL-Trees 比 RB-Trees 更严格地平衡。为了达到这个目的,需要大量的旋转,这很耗时。 RB-Trees 稍微不平衡,因为它们的平衡规则较弱,因此它们需要较少的插入和删除操作。因此,AVL-Trees 中的查找速度比 RB-Trees 快,但 RB-Trees 中的插入和删除速度更快。

    编辑

    请阅读this blog post。关键是RB树在插入后比AVL树平衡得更快。是的,在AVL树中,一次旋转确实需要O(1)时间,最多需要进行两次旋转,但仍然需要找到旋转点,旋转时间变为O(logn)。而在 RB 树中,插入后的重新平衡以摊销的常数时间运行。所以,O(1) 是颜色翻转的摊销时间,而不是 O(logn)

    【讨论】:

    • 插入需要 O(log n)。在 RB-INSERT-FIXUP 中,while 循环仅在 case 1 发生时重复,然后指针 z 将树向上移动两级。因此,while 循环可以执行的总次数为 O(lg n)。这是来自。所以整个RB树插入需要2O(log n)+C。 AVL 也需要 2O(log n)。
    猜你喜欢
    • 2016-03-18
    • 2019-07-09
    • 2012-11-30
    • 2013-04-21
    • 2012-11-21
    • 2012-11-22
    • 1970-01-01
    • 2015-03-06
    • 2018-11-07
    相关资源
    最近更新 更多