AVL树、splay树(伸展树)和红黑树比较
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树(伸展树)和红黑树比较相关推荐
- Splay Tree伸展树
伸展树基本概念 伸展树的基本思想. 伸展树完全是基于局部性原理(locality)的. 局部性原理是计算机科学中非常重要的原理,很多设计,比如说多级存储器,缓存,都是基于局部性原理.简单说来就是< ...
- 从2-3-4树谈到Red-Black Tree(红黑树)
从2-3-4树谈到红黑树 译者:July. 出处:http://blog.csdn.net/v_JULY_v . 在上一篇文章--从B树.B+树.B*树谈到R 树里已提到2-3-4树,那么本文,咱们就 ...
- 自顶向下红黑树java,【CPP】各种各样的树(9)——自顶向下的红黑树
当前浏览器不支持播放音乐或语音,请在微信或其他浏览器中播放 本以为春节后马上就能写完这些树了,结果没想到一拖再拖居然拖到了开学前,很真实.红黑树还是蛮难的,写着写着才意识到应该先搞完B树然后再写2-3 ...
- 树及树的算法(4) —— 红黑树
红黑树是在1972年由德国科学家鲁道夫·贝尔发明的,他称之为"对称二叉B树",它现代的名字是在 Leo J. Guibas和 Robert Sedgewick 于1978年写的一篇 ...
- Java开发 - 树(二叉树,二叉排序树,红黑树)
目录 前言 你好,认识一下,我是树 二叉树与二叉排序树 二叉排序树特点 为什么说二叉排序树查询效率要高于链表呢? 元素的类型 比较器 手写二叉排序树 定义一棵二叉树 增加元素 查询元素 修改元素 删除 ...
- hashmap中用红黑树不用其他树_为什么hashMap引入了红黑树而不是其他结构
1.为什么hashMap使用红黑树而不是其他结构? 在回答这个问题之前,我们先了解一下有关二叉树的基本内容. ①二叉排序树(又称二叉查找树): 1)若左子树不为空,则左子树上所有结点的值均小于根结点的 ...
- 【BZOJ-3196】二逼平衡树 线段树 + Splay (线段树套平衡树)
3196: Tyvj 1730 二逼平衡树 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 2271 Solved: 935 [Submit][St ...
- (王道408考研数据结构)第五章树-第四节4:红黑树基本概念及操作
文章目录 一:红黑树基本概念 (1)什么是红黑树 (2)红黑树的性质 (3)为什么要给空结点(NIL)上色? (4)为什么最长路径一定不超过最短路径的2倍? (5)红黑树效率 二:红黑树的实现 (1) ...
- 二叉树(BT)、二叉查找树(BST)、平衡二叉树(AVL)、B-Tree、B+Tree、红黑树(BRT)
目录 树的概念 树的分类 二叉树 二叉查找树 平衡二叉树(AVL) B-Tree(平衡多路查找树) B树的关键特征 B+Tree B+树关键特征 红黑树(BRT) 左旋 右旋 时间复杂度 树形结构是一 ...
- hdu 4699 Editor(splay tree 伸展树)
hdu 4699 Editor 题意:对一个数列进行操作,光标位置后面插入一个权值为x的数,删除光标前的那个数,光标左移一位,光标右移一位,求到k位置的最大的前缀和.. 解题思路:标乘是用了栈进行维 ...
最新文章
- 序列信号产生器的verilog HDL 设计
- openwrt无盘服务器,搭建基于 OpenWrt/gPXE/iSCSI 的 Windows 无盘工作站
- python董付国教程_董付国老师python教学——学习笔记(一)
- python元组和列表的联系_Python | 一文看懂Python列表、元组和字符串操作
- EF框架step by step(1)—Database-First
- ttf能改成gfont吗_请问如何修改ttf字体名称?
- 敏捷.高效通过ACP.随笔
- 安装时间大于30秒_辟谣│有氧运动30分钟以上才会燃烧脂肪?你被这个观点骗了多久?...
- 电视html转vga没有声音,电脑用VGA线连接电视,怎么声音不能传进电视?
- 机器学习:PageRank
- 华为服务器显示灯p02,华为服务器uid灯蓝色
- linux module 目录,linux module工具安装与使用
- 五-2、vue中引用文件路径问题
- 企业邮箱退信提示:“550 5.1.1 User unknown.”
- 嵌入式方面名词术语总结
- 苹果手机怎么用流量下载大于200M的应用
- ssm基于Android的电子病历系统APP(ssm+uinapp+Mysql)
- 物联网用到自己的新家里:改造家里的灯光照明系统
- c# AE GIS二次开发学习专题(二) 基本地图控件使用
- 诺基亚x6 云服务器,诺基亚X6使用一周后的真实体验,看完决定买不买?