AVL树、splay树(伸展树)和红黑树比较

一、AVL树:

优点:查找、插入和删除,最坏复杂度均为O(logN)。实现操作简单

如过是随机插入或者删除,其理论上可以得到O(logN)的复杂度,但是实际情况大多不是随机的。如果是随机的,则AVL    树能够达到比RB树更优的结果,因为AVL树的高度更低。如果只进行插入和查找,则AVL树是优于RB树的,因为RB树    更多的优势还是在删除动作上。

缺点:1)借助高度或平衡因子,为此需要改造元素结构,或额外封装-->伸展树可以避免

2)实测复杂度与理论复杂度上有差距。插入、删除后的旋转成本不菲删除操作后,最多旋转O(logN)次,(Knuth证明,平 均最坏情况下概率为0.21次),若频繁进行插入/删除操作,得不偿失。

3)单词动态调整后,全树拓扑结构的变化量可达O(logN)次。-->红黑树为O(1)

二、伸展树(splay tree)、

优点、1)无需记录节点高度和平衡因子,编程实现简单易行

2)分摊复杂度为O(logN)

3)局部性强,缓存命中率极高时,效率甚至可以更高。

注:伸展树是根据数据访问的局部性而来的主要是:1)刚刚被访问的节点,极有可能在不就之后再次被访问到;2)将被访问 的下一个节点,极有可能就处于不就之前被访问过的某个节点的附近

缺点:1)仍不能保证单词最坏情况的出现,不适用效率敏感的场合

2)复杂度分析比较复杂

三、红黑树

优点:1)所有的插入、删除、查找操作的复杂度都是O(logN)

2)插入操作能够在最多2次旋转后达到平衡状态,而删除操作更是能够在一次旋转后达到平衡状态。删除操作有可能导致递归的双黑修正,但是在旋转之前,只是染色而树的结构没有任何实质性的改变,因此速度优于AVL树。

3)红黑树可以保证在每次插入或删除操作之后的重平衡过程中,全书拓扑结构的更新仅涉及常数个节点。尽管最坏情况下需对O(logN)个节点重染色,但就分摊意义而言,仅为O(1)个。

缺点:左右子树高度相差比AVL树大


总结

二叉查找树:

任意一个节点所包含的键值,大于等于左孩子的键值,小于等于右孩子的键值。 
此外,无论是左旋还是右旋,若旋转之前这棵树是二叉查找树,旋转之后它一定还是二叉查找树。

平衡树(AVL树):

AVL树中任何节点的两个子树的高度最大差别为1,LL,RR,LR,RL旋转算法。 
对于1百万个节点的平衡树,树的高度为12-20之间,对于10亿个节点的平衡树,树的高度为18-30之间。

伸展树:

当某个节点被访问时,伸展树会通过旋转使该节点成为树根。

红黑树:

主要是用它来存储有序的数据,它的时间复杂度是O(lgn)),效率非常之高.

AVL树与红黑树比较:

AVL是严格平衡树,因此在增加或者删除节点的时候,根据不同情况,旋转的次数比红黑树要多。(所以AVL树插入和删除时间会稍微多) 
红黑树是弱平衡的,用非严格的平衡来换取增删节点时候旋转次数的降低。 
两者都属于自平衡二叉树,那么降低树的深度自然会提高查找效率。 
两者查找,插入,删除的时间复杂度相同O(lgn)

时间复杂度比较

sequential search - 顺序查找 
binary search - 二分查找 
BST - 二叉查找树 
2-3 tree - 平衡树 
red-black tree - 红黑树

转载于:https://www.cnblogs.com/Renyi-Fan/p/8253548.html

AVL树、splay树(伸展树)和红黑树比较相关推荐

  1. Splay Tree伸展树

    伸展树基本概念 伸展树的基本思想. 伸展树完全是基于局部性原理(locality)的. 局部性原理是计算机科学中非常重要的原理,很多设计,比如说多级存储器,缓存,都是基于局部性原理.简单说来就是< ...

  2. 从2-3-4树谈到Red-Black Tree(红黑树)

    从2-3-4树谈到红黑树 译者:July. 出处:http://blog.csdn.net/v_JULY_v . 在上一篇文章--从B树.B+树.B*树谈到R 树里已提到2-3-4树,那么本文,咱们就 ...

  3. 自顶向下红黑树java,【CPP】各种各样的树(9)——自顶向下的红黑树

    当前浏览器不支持播放音乐或语音,请在微信或其他浏览器中播放 本以为春节后马上就能写完这些树了,结果没想到一拖再拖居然拖到了开学前,很真实.红黑树还是蛮难的,写着写着才意识到应该先搞完B树然后再写2-3 ...

  4. 树及树的算法(4) —— 红黑树

    红黑树是在1972年由德国科学家鲁道夫·贝尔发明的,他称之为"对称二叉B树",它现代的名字是在 Leo J. Guibas和 Robert Sedgewick 于1978年写的一篇 ...

  5. Java开发 - 树(二叉树,二叉排序树,红黑树)

    目录 前言 你好,认识一下,我是树 二叉树与二叉排序树 二叉排序树特点 为什么说二叉排序树查询效率要高于链表呢? 元素的类型 比较器 手写二叉排序树 定义一棵二叉树 增加元素 查询元素 修改元素 删除 ...

  6. hashmap中用红黑树不用其他树_为什么hashMap引入了红黑树而不是其他结构

    1.为什么hashMap使用红黑树而不是其他结构? 在回答这个问题之前,我们先了解一下有关二叉树的基本内容. ①二叉排序树(又称二叉查找树): 1)若左子树不为空,则左子树上所有结点的值均小于根结点的 ...

  7. 【BZOJ-3196】二逼平衡树 线段树 + Splay (线段树套平衡树)

    3196: Tyvj 1730 二逼平衡树 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 2271  Solved: 935 [Submit][St ...

  8. (王道408考研数据结构)第五章树-第四节4:红黑树基本概念及操作

    文章目录 一:红黑树基本概念 (1)什么是红黑树 (2)红黑树的性质 (3)为什么要给空结点(NIL)上色? (4)为什么最长路径一定不超过最短路径的2倍? (5)红黑树效率 二:红黑树的实现 (1) ...

  9. 二叉树(BT)、二叉查找树(BST)、平衡二叉树(AVL)、B-Tree、B+Tree、红黑树(BRT)

    目录 树的概念 树的分类 二叉树 二叉查找树 平衡二叉树(AVL) B-Tree(平衡多路查找树) B树的关键特征 B+Tree B+树关键特征 红黑树(BRT) 左旋 右旋 时间复杂度 树形结构是一 ...

  10. hdu 4699 Editor(splay tree 伸展树)

    hdu 4699  Editor 题意:对一个数列进行操作,光标位置后面插入一个权值为x的数,删除光标前的那个数,光标左移一位,光标右移一位,求到k位置的最大的前缀和.. 解题思路:标乘是用了栈进行维 ...

最新文章

  1. 序列信号产生器的verilog HDL 设计
  2. openwrt无盘服务器,搭建基于 OpenWrt/gPXE/iSCSI 的 Windows 无盘工作站
  3. python董付国教程_董付国老师python教学——学习笔记(一)
  4. python元组和列表的联系_Python | 一文看懂Python列表、元组和字符串操作
  5. EF框架step by step(1)—Database-First
  6. ttf能改成gfont吗_请问如何修改ttf字体名称?
  7. 敏捷.高效通过ACP.随笔
  8. 安装时间大于30秒_辟谣│有氧运动30分钟以上才会燃烧脂肪?你被这个观点骗了多久?...
  9. 电视html转vga没有声音,电脑用VGA线连接电视,怎么声音不能传进电视?
  10. 机器学习:PageRank
  11. 华为服务器显示灯p02,华为服务器uid灯蓝色
  12. linux module 目录,linux module工具安装与使用
  13. 五-2、vue中引用文件路径问题
  14. 企业邮箱退信提示:“550 5.1.1 User unknown.”
  15. 嵌入式方面名词术语总结
  16. 苹果手机怎么用流量下载大于200M的应用
  17. ssm基于Android的电子病历系统APP(ssm+uinapp+Mysql)
  18. 物联网用到自己的新家里:改造家里的灯光照明系统
  19. c# AE GIS二次开发学习专题(二) 基本地图控件使用
  20. 诺基亚x6 云服务器,诺基亚X6使用一周后的真实体验,看完决定买不买?

热门文章

  1. 2022-2028年中国阻尼涂料市场研究及前瞻分析报告
  2. 2022-2028年中国碲化镉薄膜太阳能电池行业发展现状分析及投资前景趋势报告
  3. 数据库里存json数据
  4. Linux系统管理必备知识之利用ssh传输文件
  5. python系统问题
  6. dropout,batch norm 区别 顺序
  7. RPC远程调用通俗理解
  8. Centos7上安装docker 详细教程
  9. LeetCode简单题之有效的字母异位词
  10. 2002年3月英伟达发布核弹GPU与大算力自动驾驶芯片