众所周知,插入和删除都需要O(log n)。 AVL树需要O(log n),因为它需要插入O(log n)和O(log n)来进行平衡旋转。
RB树需要O(log n),因为它需要插入O(log n),在算法第三版中,RB-INSERT-FIXUP需要O(log n)用于案例1(颜色翻转),旋转最多2次。 所以似乎AVL需要2O(log n),但RB树需要2O(log n)+ C.
为什么我们认为RB树在插入时比AVL更快?仅仅因为旋转需要比彩色翻转更多的时间?旋转和颜色翻转都需要O(1),为什么旋转比彩色翻转更耗时? 感谢:!)
答案 0 :(得分:2)
如果我理解你的问题,是的,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)
。