红黑树和AVL树之间的差异(Difference between red-black trees a

2019-09-01 07:22发布

有人可以请解释一下这两个数据结构之间的主要区别是? 我一直试图找到一个源网络,突出的差异/相似之处,但我还没有发现什么太丰富。 在什么情况下会一个比其他是首选? 使一个“更好”比其他使用什么样的实际情况?

Answer 1:

AVL树比保持红黑树更刚性的平衡。 从根到最深的叶在AVL树的路径为至多〜1.44 LG(N + 2),而在红黑树它至多〜2 LG(N + 1)。

其结果是,在查找AVL树通常更快,但这是以较慢的插入和删除成本由于更多的旋转操作。 所以,如果你希望查找的数量主宰更新到树的数量使用AVL树。



Answer 2:

对于小数据

插入 :RB树与AVL树有最大旋转,但RB树的常数会更快,因为平均RB树使用更少的转动。

查询 :AVL树更快,因为AVL树具有较小的深度。

删除 :RB树有最大的旋转,但是AVL树的恒定数量可以为O(log N)旋转倍最差。 和平均RB树还具有较少的旋转数从而RB树更快。

大数据

插入 :AVL树更快。 因为你需要查找的插入之前的特定节点。 因为你有更多的数据对查找的特定节点的时间差的增长比例为O(log N)。 但AVL树和RB树仍然只需要在最坏的情况下常数旋转。 因此,瓶颈将成为你查找的特定节点的时间。

查询 :AVL树更快。 (同小数据的情况下)

删除 :AVL树是平均水平,但在最坏的情况下RB树更快。 因为你还需要查找了很深刻的节点删除(类似于插入的原因)之前互换。 平均两个树都具有转动的常数。 但RB树具有恒定的上限旋转。



Answer 3:

:从这个报价AVL和红黑树之间的差异

RB-树木是,还有AVL树,自我平衡。 他们都提供O(log n)的查找和插入性能。 不同的是,RB-树保证O(1)每插入操作旋转。 这是实际成本实际实现的性能。 简化,RB-树从概念上是2-3树周围没有动态节点结构的开销携带获得这种优势。 物理RB-树被实现为二叉树,红色/黑色旗帜模拟2-3行为。

根据定义,每一个AVL因此是红黑色的子集。 每个人都应该能够任何颜色的AVL树,没有重组或旋转,将其改造成一个红黑树。



Answer 4:

AVL树往往与红黑树比较,因为两者都支持相同的一组操作的,并采取O(log n)时间为基本操作。 对于查询密集型应用程序,AVL树比红黑树,因为它们更牢固地平衡速度更快。 类似红黑树,AVL树的高度平衡。 两者都是在一般不重量平衡也不μ-均衡任何μ≤½; 也就是说,兄弟节点可以有后代的巨大不同数量。

从维基百科的文章AVL树



Answer 5:

树的最大高度是首要重要的是保持平衡。 它几乎等于1.44 * log(n)的AVL,但RB树,它是2 * log(n) 因此,我们可以得出结论,最好是使用AVL当问题是搜索激励。 要紧的是AVL和RB树的另一个问题。 面临着旋转的成本较低的随机插入,但是这是一个好插入升序或降序DATAS的AVL当RB树比AVL更好。 因此,如果这个问题是插入的激励,我们可以使用RB树。



Answer 6:

这RedBlack树木较少的旋转可以使它们在插入/删除更快,但是....事实。 由于它们通常是深一点,还可以在插入和删除慢。 每次你从一个水平走在树的下一个时间,有一个大的变化所请求的信息不在缓存中,必须从RAM中检索。 因此获得了在较少的循环的时间已经可以丢失,因为它具有导航更深,因此必须经常更新其缓存。 能够从高速缓存操作与否产生很大的差别。 如果相关信息是在高速缓存中,那么你可以做多次旋转操作,在导航附加水平所需的时间和下一级的信息不在缓存中。 因此,在案件RedBlack在理论上是更快,只需要在操作看,它可能在实践中会比较慢,由于高速缓存未命中。



Answer 7:

从我所看到的似乎是需要得到AVL树(log n)的期望的高度AVL树做尽可能多的旋转(递归起来有时树)。 这使得它更牢固地平衡。

对于红黑树有规则5设置您需要通过插入和拔出确保住宿,你可以在这里找到http://en.wikipedia.org/wiki/Red-black_tree 。

可以帮助你的红黑树的主要事情是,根据这五个规则,你可以递归色树到根,如果叔叔是红色的。 如果叔叔是黑色的,你将需要做的最大的两个旋转解决您有任何问题,但这些一个或两个旋转之后就大功告成了。 在收拾它,并说晚安,因为这是你需要做的操纵结束。

大规则是5号......“从给定节点到任何其后代的叶子每一个简单路径包含相同数量的黑色结点”。

这将导致大部分的旋转youll需要做树工作,使树不要走得太远失去平衡。



Answer 8:

总结:AvlTrees比RedBlackTrees略好平衡。 这两种树木O(log n)的进行查找,插入和删除时间的整体,但插入和删除前需要O(log n)的旋转,而后者只需要O(1)旋转。

由于旋转平均写入内存,并写入内存价格昂贵,RedBlackTrees在实践中快于AvlTrees更新



Answer 9:

要获得的AVL树是如何工作的想法, 这种交互式可视化帮助。

AVL以及RedBlack树木是高度平衡树的数据结构。 他们是非常相似,真正的区别在于不对任何附加进行旋转操作的数量/删除操作 - 在AVL的情况下走高,保持一个整体的更加均匀平衡。

这两种方案的规模为O(lg N)其中N是叶数,但在实践中,AVL树是查询密集型任务速度快:以更好的平衡优势,树遍历是平均缩短。 在另一方面,插入和删除明智的,AVL树是较慢:在修改正确重新平衡数据结构需要转较高数量。

对于通用的实现(即先验目前尚不清楚,如果查找是操作的主要),RedBlack树木是优选的:它们更容易实现,更快的在常见的情况 - 无论该数据结构是一样频繁修改找遍。 一个例子, TreeMapTreeSet在Java中使用一个支持RedBlack树。



文章来源: Difference between red-black trees and AVL trees