精华内容
下载资源
问答
  • AVL和红黑树性能对比

    2020-03-17 16:33:22
    AVL和红黑树性能对比,有详细的测试数据。AVL和红黑树都是平衡树。 Binary search tree (BST) based data structures, such as AVL trees, red-black trees, and splay trees, are often used in system software...
  • 有疑问为什么是使用红黑树而不是AVL树,AVL树是完全平衡二叉树阿? 最主要的一点是: 在CurrentHashMap中是加锁了的,实际上是读写锁,如果写冲突就会等待, 如果插入时间过长必然等待时间更长,而红黑树相对AVL树他...

    在Jdk1.8版本后,Java对HashMap做了改进,在链表长度大于8的时候,将后面的数据由链表改为了存在红黑树中,以加快检索速度。

    有疑问为什么是使用红黑树而不是AVL树,AVL树是完全平衡二叉树阿?

    最主要的一点是:

    在CurrentHashMap中是加锁了的,实际上是读写锁,如果写冲突就会等待,
    如果插入时间过长必然等待时间更长,而红黑树相对AVL树他的插入更快!

    问题:为什么不使用AVL树而使用红黑树?

    红黑树和AVL树都是最常用的平衡二叉搜索树,它们的查找、删除、修改都是O(lgn) time

    AVL树和红黑树有几点比较和区别:
    (1)AVL树是更加严格的平衡,因此可以提供更快的查找速度,一般读取查找密集型任务,适用AVL树。
    (2)红黑树更适合于插入修改密集型任务。
    (3)通常,AVL树的旋转比红黑树的旋转更加难以平衡和调试。

    总结
    (1)AVL以及红黑树是高度平衡的树数据结构。它们非常相似,真正的区别在于在任何添加/删除操作时完成的旋转操作次数。
    (2)两种实现都缩放为a O(lg N),其中N是叶子的数量,但实际上AVL树在查找密集型任务上更快:利用更好的平衡,树遍历平均更短。另一方面,插入和删除方面,AVL树速度较慢:需要更高的旋转次数才能在修改时正确地重新平衡数据结构。
    (3)在AVL树中,从根到任何叶子的最短路径和最长路径之间的差异最多为1。在红黑树中,差异可以是2倍。
    (4)两个都给O(log n)查找,但平衡AVL树可能需要O(log n)旋转,而红黑树将需要最多两次旋转使其达到平衡(尽管可能需要检查O(log n)节点以确定旋转的位置)。旋转本身是O(1)操作,因为你只是移动指针。

    转载:https://zhangvalue.blog.csdn.net/article/details/101483736

    展开全文
  • AVL和红黑树区别

    千次阅读 2020-08-28 22:13:51
    二叉查找比普通查找更快,查找、插入、删除的时间复杂度O(logN)。但是二叉查找有一种极端的情况,就是会变成一种线性链表似的结构。此时时间复杂度就变味了O(N)。(为了解决这种情况,出现了二叉平衡) ...

    二叉查找树:

    二叉查找树就是左结点小于根节点,右结点大于根节点的一种排序树,也叫二叉搜索树。也叫BST。二叉查找树比普通树查找更快,查找、插入、删除的时间复杂度为O(logN)。但是二叉查找树有一种极端的情况,就是会变成一种线性链表似的结构。此时时间复杂度就变味了O(N)。(为了解决这种情况,出现了二叉平衡树)

     

    平衡二叉树:

    平衡二叉树全称平衡二叉搜索树,也叫AVL树。是一种自平衡的树

    AVL树也规定了左结点小于根节点,右结点大于根节点。并且还规定了左子树和右子树的高度差不得超过1。这样保证了它不会成为线性的链表。AVL树的查找稳定,查找、插入、删除的时间复杂度都为O(logN),但是由于要维持自身的平衡,所以进行插入和删除结点操作的时候,需要对结点进行频繁的旋转

    AVL树每一个节点只能存放一个元素,并且每个节点只有两个子节点。当进行查找时,就需要多次磁盘IO,(数据是存放在磁盘中的,每次查询是将磁盘中的一页数据加入内存,树的每一层节点存放在一页中,不同层数据存放在不同页。)这样如果需要多层查询就需要多次磁盘IO。为了解决AVL树的这个问题,就出现了B树

    为什么B类树可以进行优化呢?我们可以根据B类树的特点,构造一个多阶的B类树,然后在尽量多的在结点上存储相关的信息,保证层数尽量的少,以便后面我们可以更快的找到信息,磁盘的I/O操作也少一些,而且B类树是平衡树,每个结点到叶子结点的高度都是相同,这也保证了每个查询是稳定的。

     

    红黑树:

    红黑树也叫RB树,RB-Tree。是一种自平衡的二叉查找树,它的节点的颜色为红色和黑色。它不严格控制左、右子树高度或节点数之差小于等于1。也是一种解决二叉查找树极端情况的数据结构。

     

    红黑树规定了:

    1.节点是红色或黑色。

    2.根节点是黑色

    3.每个叶子节点都是黑色的空节点(NIL节点)。

    4 每个红色节点的两个子节点都是黑色。也就是说从每个叶子到根的所有路径上不能有两个连续的红色节点)。

    5.从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点

     

    红黑树在查找方面和AVL树操作几乎相同。但是在插入和删除操作上,AVL树每次插入删除会进行大量的平衡度计算,红黑树是牺牲了严格的高度平衡的优越条件为代价,它只要求部分地达到平衡要求,结合变色,降低了对旋转的要求,从而提高了性能。红黑树能够以O(log2 n)的时间复杂度进行搜索、插入、删除操作。此外,由于它的设计,任何不平衡都会在三次旋转之内解决

    相比于BST,因为红黑树可以能确保树的最长路径不大于两倍的最短路径的长度,所以可以看出它的查找效果是有最低保证的。在最坏的情况下也可以保证O(logN)的,这是要好于二叉查找树的。因为二叉查找树最坏情况可以让查找达到O(N)。

    红黑树的算法时间复杂度和AVL相同,但统计性能比AVL树更高,所以在插入和删除中所做的后期维护操作肯定会比红黑树要耗时好多,但是他们的查找效率都是O(logN),所以红黑树应用还是高于AVL树的. 实际上插入 AVL 树和红黑树的速度取决于你所插入的数据.如果你的数据分布较好,则比较宜于采用 AVL树(例如随机产生系列数),但是如果你想处理比较杂乱的情况,则红黑树是比较快的。

     

    展开全文
  • AVL和红黑树的区别 AVL:平衡二叉查找树 红黑树: 1.红黑树并不追求“完全的平衡”,它只要求达到部分的平衡,降低了对旋转的要求,从而提高了性能。 2.红黑树能够以O(log2 n) 的时间复杂度进行搜索、插入、删除...

    AVL和红黑树的区别

    • AVL:平衡二叉查找树
    • 红黑树:

    1.红黑树并不追求“完全的平衡”,它只要求达到部分的平衡,降低了对旋转的要求,从而提高了性能。

    2.红黑树能够以O(log2 n) 的时间复杂度进行搜索、插入、删除操作,由于它的设计,任何不平衡都会在三次旋转之内解决。

    3.还有一些更好的,但实现起来更复杂的数据结构 能够做到一步旋转之内达到平衡,但红黑树能够给我们一个比较“便宜”的解决方案。红黑树的算法时间复杂度和AVL相同,但统计性能比AVL树更高
    4.红黑树的插入效率更高

    5.红黑树的平衡要求不如AVL树严格,理论上search要慢些,实际也如此,不过差距并不大

    总结:

    1.查找比较

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

    2.插入比较

    如果插入一个node引起了树的不平衡,AVL和RB-Tree都是最多只需要2次旋转操作,即两者都是O(1)

    3.删除比较

    在删除node引起树的不平衡时,最坏情况下,AVL需要维护从被删node到root这条路径上所有node的平衡性,因此需要旋转的量级O(logN),而RB-Tree最多只需3次旋转,只需要O(1)的复杂度。

    总结:

    AVL的结构相较RB-Tree来说更为平衡,在插入和删除node更容易引起Tree的unbalance,因此在大量数据需要插入或者删除时,AVL需要rebalance的频率会更高。因此,RB-Tree在需要大量插入和删除node的场景下,效率更高。自然,由于AVL高度平衡,因此AVL的search效率更高。

    红黑树的查询性能略微逊色于AVL树,因为他比avl树会稍微不平衡最多一层,也就是说红黑树的查询性能只比相同内容的avl树最多多一次比较,但是,红黑树在插入和删除上完爆avl树,avl树每次插入删除会进行大量的平衡度计算,而红黑树为了维持红黑性质所做的红黑变换和旋转的开销,相较于avl树为了维持平衡的开销要小得多

    展开全文
  • 那么很多人就有疑问为什么是使用红黑树而不是AVL树,AVL树是完全平衡二叉树阿? 最主要的一点是: 在CurrentHashMap中是加锁了的,实际上是读写锁,如果写冲突就会等待,如果插入时间过长必然等待时间更长,而红黑...

    在Jdk1.8版本后,Java对HashMap做了改进,在链表长度大于8的时候,将后面的数据存在红黑树中,以加快检索速度。

    那么很多人就有疑问为什么是使用红黑树而不是AVL树,AVL树是完全平衡二叉树阿?

    最主要的一点是:

    在CurrentHashMap中是加锁了的,实际上是读写锁,如果写冲突就会等待,如果插入时间过长必然等待时间更长,而红黑树相对AVL树他的插入更快!

    问题:为什么不使用AVL树而使用红黑树?

    红黑树和AVL树都是最常用的平衡二叉搜索树,它们的查找、删除、修改都是O(lgn) time

    AVL树和红黑树有几点比较和区别:

    1. AVL树是更加严格的平衡,因此可以提供更快的查找速度,一般读取查找密集型任务,适用AVL树。
    2. 红黑树更适合于插入修改密集型任务。
    3. 通常,AVL树的旋转比红黑树的旋转更加难以平衡和调试。

    总结

    1. AVL以及红黑树是高度平衡的树数据结构。它们非常相似,真正的区别在于在任何添加/删除操作时完成的旋转操作次数。
    2. 两种实现都缩放为a O(lg N),其中N是叶子的数量,但实际上AVL树在查找密集型任务上更快:利用更好的平衡,树遍历平均更短。另一方面,插入和删除方面,AVL树速度较慢:需要更高的旋转次数才能在修改时正确地重新平衡数据结构。
    3. 在AVL树中,从根到任何叶子的最短路径和最长路径之间的差异最多为1。在红黑树中,差异可以是2倍。
    4. 两个都给O(log n)查找,但平衡AVL树可能需要O(log n)旋转,而红黑树将需要最多两次旋转使其达到平衡(尽管可能需要检查O(log n)节点以确定旋转的位置)。旋转本身是O(1)操作,因为你只是移动指针。

     

    往期精彩内容:

    Java知识体系总结(2021版)

    超详细的springBoot学习笔记

    Java多线程基础知识总结(绝对经典)

    Java面试题总结(附答案)

    Vue基础知识总结(绝对经典)

    常见数据结构与算法整理总结

    展开全文
  • hashmap底层为什么红黑树不用avl

    千次阅读 2020-04-22 16:49:21
    RB-Tree和AVL树作为BBST,其实现的算法时间复杂度相同,AVL作为最先提出的BBST,貌似RB-tree实现的功能都可以用AVL树是代替,那么为什么还需要引入RB-Tree呢? 红黑树不追求"完全平衡",即不像AVL那样要求节点的 |...
  • 完整实现二叉搜索树,红黑树AVL平衡树,B树的搜索插入删除基本功能其它功能。红黑树和B树参考自算法导论。
  • 红黑树AVL树 数据结构高级篇
  • 红黑树和AVL树都是平衡二叉查找树,而AVL树还是严格平衡的,那么为什么有了AVL树还需要有红黑树的存在呢?下面从以下四个方面来分析两者的区别,这样就可以看出红黑树的必要性了 定义 红黑树(RBTree):是一种非...
  • 红黑树和AVL树有什么区别? 红黑树 vs AVL 红黑树的查询性能略微逊色于AVL树,因为他比avl树会稍微不平衡最多一层,也就是说红黑树的查询性能只比相同内容的avl树最多多一次比较,但是,红黑树在插入删除上完爆avl...
  • 红黑树和AVL树的实现

    2015-01-14 00:43:56
    红黑树和AVL树的代码实现,并显示树的形状,同时红黑树还可以输出个路径以及黑高度
  • 节点 static final class TreeNode<K,V> extends LinkedHashMap.Entry<K,V> { TreeNode<K,V> parent; // red-black tree links TreeNode<K,V> left; TreeNode<K,V> right; ...
  • 有序表的有所操作效率O(logN),实现有序表的结构包括红黑树AVL树,SizeBalance树简称SB树,跳表skiplist。 在时间复杂度层面,上面四种结构是一样的。 其中,红黑树AVL树、SB树属于 同一个系列,那就是平衡...
  • 本人实现的 AVL树与红黑树,具有可视化界面,代码清晰。
  • 排序二叉树是一种特殊结构的二叉树,可以非常方便地对中所有节点进行排序检索。 排序二叉树要么是一棵空二叉树,要么是具有下列性质的二叉树: ? 若它的左子树不空,则左子树上所有节点的值均小于它的根节点的值...
  • 要想了解AVL树与红黑树的区别,首先我们要先知道,这两棵树是属于自平衡二叉树,那么什么是平衡二叉树呢? 一、平衡二叉树 二叉树的每一个节点的左右子树的深度差不超过1。 二、如何实现自平衡? 通过旋转,旋转分为...
  • 红黑树和AVL树(平衡二叉树)区别

    万次阅读 多人点赞 2018-07-10 10:04:42
    AVL树(平衡二叉树)(1)简介AVL树是带有平衡条件的二叉查找树,一般是用平衡因子差值判断是否平衡并通过旋转来实现平衡,左右子树树高不超过1,和红黑树相比,它是严格的平衡二叉树,平衡条件必须满足(所有节点的...
  • RB-Tree和AVL树作为BBST,其实现的算法时间复杂度相同,AVL作为最先提出的BBST,貌似RB-tree实现的功能都可以用AVL树是代替,那么为什么还需要引入RB-Tree呢? 红黑树不追求"完全平衡",即不像AVL那样要求节点的|...
  • 1.红黑树并不追求“完全的平衡”,它只要求达到部分的平衡,降低了对旋转的要求,从而提高了性能。 2.红黑树能够以O(log2 n) 的时间复杂度进行搜索、插入、删除操作...红黑树的算法时间复杂度和AVL相同,但统计性能比AV
  • 红黑树AVL树区别

    千次阅读 2018-08-09 00:08:09
    红黑树根据节点颜色(同一双亲节点出发到哨兵节点,所有路径上的黑色节点数目一样),一些约定旋转实现; AVL根据树的平衡因子(所有节点的左右子树高度差的绝对值不超过1)旋转决定 2、红黑树的插入效率更高!!...
  • 红黑树和AVL树都是最常用的平...
  • Skipliststrcpy以及AVL/红黑树

    万次阅读 2018-04-21 10:08:36
    有点乱,是吧,确实,Skiplist怎么可能strcpy联系在一起?   确实,二者关联不大,但是二者最终的一个思想却是殊途同归的,背包算法的精髓在其中体现。本文不讲动态规划,也不讲背包算法,只是单纯的欣赏。 ...
  • 任意节点右子空,则右子的值均大于于根节点的值. 任意节点的左右子树也分别是二叉查找. 没有键值相等的节点. 2、局限性及应用 一个二叉查找是由n个节点随机构成,所以,对于某些情况,二叉查找会退化...
  • 红黑树详解以及与BST和AVL树的比较

    千次阅读 2017-10-17 21:04:21
    1.stl中的set底层用的什么数据结构? 红黑树 2.红黑树的数据结构怎么定义? [cpp] view plain copy     enum Color  {   
  • 为什么Hashmap使用红黑树而不是AVL

    千次阅读 2019-10-07 16:50:33
    https://blog.csdn.net/21aspnet/article/details/88939297
  • 实现了红黑树AVL树的基本功能增删改查。学习交流,共同进步
  • 二叉树之一BST树,AVL树详解及B树和红黑树原理分析

    千次阅读 多人点赞 2017-03-11 23:21:59
    像阿里云面试就曾经问过map实现机制(红黑树)及其原理,这里我们要做到对BST/AVL完全熟悉能给出全部代码实现,红黑树、b树之类,有能力的需要完全理解,代码就不用掌握了。红黑树和b树看会就行了,当碰到你感觉他们...
  • 为什么map,set 不用AVL树作为底层实现? 用过 STL map 么, 你用...至于, 为什么不用 AVL 树作为底层实现, 那是因为 AVL 树是高度平衡的树, 而每一次对树的修改, 都要 rebalance, 这里的开销会比红黑树大. 红黑树插...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,502
精华内容 7,000
关键字:

为什么不用avl和红黑树