红黑树比起AVL树具体更高效在什么地方呢?

作者&投稿:雷羽 (若有异议请与网页底部的电邮联系)
红黑树比 AVL 树具体更高效在哪里?~

红黑树插入效率比AVL树高,因为rebalance操作O(1)比AVL树O(logn)快,但是以牺牲search效率为代价的

sbt 最好写 效率最高
这篇论文将展现一个独特巧妙的策略,动态地维护二叉搜索树(Binay Search Trees,缩写为BST),并且它在最坏的情况下也有
着良好的期望运行速度。Size Balanced Tree,顾名思义,这是一棵通过大小(Size)域来维持平衡的二叉搜索树。
这是一种简单、高效并且在各方面都通用的数据结构。
这也是一种很容易被语言工具表述的数据结构,它有着简单明了的定义,和令人惊叹的运行速度,而且你会惊讶于它简单的证明。
这是目前为止速度最快的高级二叉搜索树[1]。
此外,它比其它一些知名的高级二叉搜索树要快得多,并且在实践中趋于完美。
它不仅支持典型的二叉搜索树操作,而且也支持Select和Rank。
摘自Size Balanced Tree陈启峰 (Farmer John)中国广东纪念中学

优化了我的avl实现,AVL插入和删除并不像教科书上说的,需要回溯到根节点,两种情况下可以直接退出向上回溯:

插入更新时:如果当前节点的高度没有改变,则停止向上回溯父节点。

删除更新时:如果当前节点的高度没有改变,且平衡值在[-1,1]区间则停止回溯。

最终结论,优化过的avl和linux的rbtree放在一起,avl真的和rbtree差不多,avl也并不总需要回溯到根节点,虽然旋转次数多于rbtree,但是rbtree保持平衡除了旋转外还有重新着色的操作,即便不旋转也在拼命的重新着色,且层数较高,1百万个节点的rbtree层数和1千万个节点的avl相同。

所以查询,删除,插入全部放在一起来看,avl树和rbtree差不多。

红黑树属于平衡二叉树。
说它不严格是因为它不是严格控制左、右子树高度或节点数之差小于等于1。
但红黑树高度依然是平均log(n),且最坏情况高度不会超过2log(n),这有数学证明。所以它算平衡树,只是不严格。不过严格与否并不影响数据结构的复杂度。
不用严格控制高度,使得插入效率更高。

1.查找

显然,avl树要比红黑树更平衡,因此avl树的查找效率更高。

2.插入

不论是avl树还是红黑树,旋转的时间复杂度都是O(1)

对于avl树,旋转的时候,需要找到第一个不平衡节点,这就需要我们维护一个平衡因子,每一次插入,旋转,删除等操作,都要更新从跟节点到被修改节点这个路径上的平衡因子。。。最差情况下,需要O(logn)的时间复杂度。。。



对于红黑树,除了旋转外,最差情况下也需要O(logn)的时间复杂度来调整平衡,注意这只是极端情况下,比如父节点和伯父节点都是红色,曾祖父节点也是红色,这个时候,就要递归的去平衡父节点,然而,采用自顶向下的方法(就是如果一个节点的两个子节点都是红色,就把这个节点变成红色,它的两个子节点变成黑色),减少了多次旋转操作,但也使得调整颜色的操作时间复杂度最差情况下是O(logn)。但这仅仅是很少的情况,所以红黑树的插入操作统计上比avl树要好。。。



对于avl树,删除意味着某个子树深度减少,这个时候,我们找到第一个不平衡的点,像插入操作那样进行旋转,使得子树平衡,然后,递归的使它的祖先节点也平衡。。。

对于红黑树,也是只有个别情况才会递归平衡父节点,它发生在:兄弟节点是黑色,两个侄儿也是黑色。当兄弟节点是红色的时候,转化为兄弟节点是黑色的情况处理,当两个侄儿有红色节点的时候,则在常数时间内就可以达到平衡。所以,删除操作红黑树的平均效率也比avl树高。




红黑树比起AVL树具体更高效在什么地方呢?
1.查找 显然,avl树要比红黑树更平衡,因此avl树的查找效率更高。2.插入 不论是avl树还是红黑树,旋转的时间复杂度都是O(1)对于avl树,旋转的时候,需要找到第一个不平衡节点,这就需要我们维护一个平衡因子,每一次插入,旋转,删除等操作,都要更新从跟节点到被修改节点这个路径上的平衡因子。。。

为什么HashMap使用红黑树而不使用AVL树?
红黑树适用于大量插入和删除;因为它是非严格的平衡树;只要从根节点到叶子节点的最长路径不超过最短路径的2倍,就不进行平衡调节 AVL树是严格的平衡树,上述的最短路径与最长路径的差不能超过|1|,AVL允许的差值小;在进行大量插入和删除操作时,频繁地进行平衡调整会严重降低效率;红黑树虽然不是严格...

为什么HashMap使用红黑树而不使用AVL树?
(1)AVL树是更加严格的平衡,因此可以提供更快的查找速度,一般读取查找密集型任务,适用AVL树。(2)红黑树更适合于插入修改密集型任务。(3)通常,AVL树的旋转比红黑树的旋转更加难以平衡和调试。总结:(1)AVL以及红黑树是高度平衡的树数据结构。它们非常相似,真正的区别在于在任何添加\/删除操作时...

avl树和红黑树的特点比较
由于AVL树种类较少所以比红黑树实际上更容易实现而且ALV树在旋转插入所需要的复杂度为0(1),而红 黑树则需要的复杂度为0(lgn) 实际上插入AVL树和红黑树的速度取决于你所插入的数据如果你的数据分布较好,则比较宜于采用AVL树(例如随机产生系列avl树和红黑树的特点比较 ...

avl树和红黑树的特点比较
由于AVL树种类较少所以比红黑树实际上更容易实现.而且ALV树在旋转插入所需要的复杂度为0(1),而红 黑树则需要的复杂度为0(lgn).实际上插入AVL树和红黑树的速度取决于你所插入的数据.如果你的数据分布较好,则比较宜于采用AVL树(例如随机产生系列数),但是如果你想处理比较杂乱的情况,则红黑树是比较快...

红黑树,b+树分别用于什么场景,为什么
1. 红黑树是一种自平衡的二叉查找树,它在保证树的高度平衡方面做出了一些妥协,但这样可以提高插入和删除操作的效率。在某些情况下,红黑树的平均性能优于AVL树,这是因为红黑树在插入和删除操作的平均时间复杂度上更优。在Java中,TreeSet和TreeMap类使用的底层数据结构就是红黑树。2. B+树是一种...

【高阶数据结构】红黑树详解
根节点黑色: 建立基础的平衡结构。红色节点的子节点皆黑: 保证路径上的黑色节点数量平衡。所有路径相同数的黑色节点: 黑平衡性确保复杂度稳定。叶子节点为黑色: 作为树的终点,区分路径。红黑树的特性赋予了它独特的优势,尽管查找时间复杂度为O(log2N),略高于严格平衡的AVL树,但实际应用中,两者性能...

总结下各种常见树形结构的定义及特点(二叉树、AVL树、红黑树、Trie树...
总结起来,AVL树的平衡性、红黑树的弱平衡性,Trie树的快速检索,以及B树和B+树对磁盘IO的优化,每一种树形结构都在它们各自的领域里展现出独特的魅力。理解这些树的定义和特点,不仅有助于我们更好地设计和优化数据结构,还能为实际应用提供强大的理论支持。在数据结构的森林中,每一种树都有其独特的...

红黑树数据结构上的红黑树
红黑树相较于平衡二叉树(如AVL树)在统计性能上更优,例如C++ STL中的set、multiset、map和multimap等数据结构使用了红黑树的变体。其他常见的平衡树还有AVL、SBT、SPLAY和TREAP等。红黑树的特点是每个节点都有颜色属性,可以是红色或黑色,并遵循五个性质,确保树的平衡性,使得在最坏情况下操作效率依然...

最透彻的红黑树详解(图文并茂,一文全解)
添加图片注释,不超过 140 字(可选)可以看到AVLTree在最坏的情况下,依然保持了“绝对的平衡”:左右两个子树的高度差的绝对值不超过1。那么AVL Tree是如何保证平衡的呢,是通过旋转,可以看到,无论是插入还是删除元素,都要去通过旋转维护整个树的平衡。  我们发现,AVL树未免太严格...

东区14751515735: 红黑树比 AVL 树具体更高效在哪里? -
晏胃塞而: 红黑树插入效率比AVL树高,因为rebalance操作O(1)比AVL树O(logn)快,但是以牺牲search效率为代价的

东区14751515735: avl树和红黑树的特点比较 -
晏胃塞而: 由于AVL树种类较少所以比红黑树实际上更容易实现而且ALV树在旋转插入所需要的复杂度为0(1),而红 黑树则需要的复杂度为0(lgn) 实际上插入AVL树和红黑树的速度取决于你所插入的数据如果你的数据分布较好,则比较宜于采用AVL树(例如随机产生系列avl树和红黑树的特点比较

东区14751515735: 红黑树和平衡二叉树 区别 -
晏胃塞而: 红黑树和之前所讲的AVL树类似,都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能.自从红黑树出来后,AVL树就被放到了博物馆里,据说是红黑树有更好的效率,更高的统计性能. 红黑树和AVL树的区别在于它使用颜色来标识结点的高度,它所追求的是局部平衡而不是AVL树中的非常严格的平衡.AVL树的复杂比起红黑树来说简直是小巫见大巫.红黑树是真正的变态级数据结构.

东区14751515735: 为什么工程中都用红黑树,而不是其他平衡二叉树 -
晏胃塞而: 红黑树和平衡二叉树区别如下:1、红黑树放弃了追求完全平衡,追求大致平衡,在与平衡二叉树的时间复杂度相差不大的情况下,保证每次插入最多只需要三次旋转就能达到平衡,实现起来也更为简单.2、平衡二叉树追求绝对平衡,条件比较...

东区14751515735: AVL树,红黑树,B树,B+树,Trie树都分别应用在哪些现实场景中 -
晏胃塞而: 在C++ STL中,很多部分(目前包括set, multiset, map, multimap)应用了红黑树的变体(SGI STL中的红黑树有一些变化,这些修改提供了更好的性能,以及对set操作的支持).红黑树是每个节点都带有颜色属性的二叉查找树,颜色或红色或黑...

东区14751515735: 红黑树的用途 -
晏胃塞而: 红黑树用在关联数组、字典的实现上.需要的空间比散列表小. 任何键值对应,需要随机存储和键有序的情况都可以用.一. 基本概念 1.红黑树(Red Black Tree) 是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用...

东区14751515735: sbt,treap,avl树,红黑树哪个效率高,哪个最好写? -
晏胃塞而: sbt 最好写 效率最高 这篇论文将展现一个独特巧妙的策略,动态地维护二叉搜索树(Binay Search Trees,缩写为BST),并且它在最坏的情况下也有 着良好的期望运行速度.Size Balanced Tree,顾名思义,这是一棵通过大小(Size)域来维...

东区14751515735: 模式识别和图像处理中的算法和算法导论中的算法有什么区别 -
晏胃塞而: 模式识别与图像处理中的算法是针对图像识别与分类的,算法作用对象是像素,用于提取特征、识别目标等;而算法导论中的算法针对的是程序本身,是用于改善程序结构与运行速度的,算法导论中几乎包括了所有数据结构的东西,哪种编程语言都能用.

东区14751515735: 关于算法导论 -
晏胃塞而: 概念: 红黑树是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组.它是在1972年由Rudolf Bayer发明的,他称之为"对称二叉B树",它现代的名字是在 Leo J. Guibas 和 Robert Sedgewick 于1978年...

东区14751515735: 算法导论讲什么 -
晏胃塞而: 讲的全是好东西哦,且听我一一道来:堆排序 快速排序 线性时间中的排序 中值与顺序统计 基本的数据结构 散列表 二叉查找树 红-黑树 扩充的数据结构 动态规划 贪婪算法 分摊分析 B-树 二项式堆 斐波纳契堆 不相交集的数据结构 基本的图算法 最小生成树 单源最短路径 全对的最短路径 最大流 排序网络 矩阵运算 线性规划 多项式与快速傅里叶变换 数论算法 字符串匹配 计算几何学 NP-完备性 近似算法 注:看完这本书之后你就长生不老了.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网