为什么红黑树查询快_为什么红黑树的效率比较高
红黑树属于平衡二叉树。它不严格是因为它不是严格控制左、右子树高度或节点数之差小于等于1,但红黑树高度依然是平均log(n),且最坏情况高度不会超过2log(n)。
红黑树(red-black tree) 是一棵满足下述性质的二叉查找树:
1. 每一个结点要么是红色,要么是黑色。
2. 根结点是黑色的。
3. 所有叶子结点都是黑色的(实际上都是Null指针,下图用NIL表示)。叶子结点不包含任何关键字信息,所有查询关键字都在非终结点上。
4. 每个红色结点的两个子节点必须是黑色的。换句话说:从每个叶子到根的所有路径上不能有两个连续的红色结点
5. 从任一结点到其每个叶子的所有路径都包含相同数目的黑色结点
红黑树相关定理
1. 从根到叶子的最长的可能路径不多于最短的可能路径的两倍长。
根据上面的性质5我们知道上图的红黑树每条路径上都是3个黑结点。因此最短路径长度为2(没有红结点的路径)。再根据性质4(两个红结点不能相连)和性质1,2(叶子和根必须是黑结点)。那么我们可以得出:一条具有3个黑结点的路径上最多只能有2个红结点(红黑间隔存在)。也就是说黑深度为2(根结点也是黑色)的红黑树最长路径为4,最短路径为2。从这一点我们可以看出红黑树是 大致平衡的。 (当然比平衡二叉树要差一些,AVL的平衡因子最多为1)
2. 红黑树的树高(h)不大于两倍的红黑树的黑深度(bd),即h<=2bd
根据定理1,我们不难说明这一点。bd是红黑树的最短路径长度。而可能的最长路径长度(树高的最大值)就是红黑相间的路径,等于2bd。因此h<=2bd。
3. 一棵拥有n个内部结点(不包括叶子结点)的红黑树的树高h<=2log(n+1)
下面我们首先证明一颗有n个内部结点的红黑树满足n>=2^bd-1。这可以用数学归纳法证明,施归纳于树高h。当h=0时,这相当于是一个叶结点,黑高度bd为0,而内部结点数量n为0,此时0>=2^0-1成立。假设树高h<=t时,n>=2^bd-1成立,我们记一颗树高 为t+1的红黑树的根结点的左子树的内部结点数量为nl,右子树的内部结点数量为nr,记这两颗子树的黑高度为bd'(注意这两颗子树的黑高度必然一 样),显然这两颗子树的树高<=t,于是有nl>=2^bd'-1以及nr>=2^bd'-1,将这两个不等式相加有nl+nr>=2^(bd'+1)-2,将该不等式左右加1,得到n>=2^(bd'+1)-1,很显然bd'+1>=bd,于是前面的不等式可以 变为n>=2^bd-1,这样就证明了一颗有n个内部结点的红黑树满足n>=2^bd-1。
在根据定理2,h<=2bd。即n>=2^(h/2)-1,那么h<=2log(n+1)
从这里我们能够看出,红黑树的查找长度最多不超过2log(n+1),因此其查找时间复杂度也是O(log N)级别的。
红黑树的操作
因为每一个红黑树也是一个特化的二叉查找树,因此红黑树上的查找操作与普通二叉查找树上的查找操作相同。然而,在红黑树上进行插入操作和删除操作会导致不 再符合红黑树的性质。恢复红黑树的属性需要少量(O(log n))的颜色变更(实际是非常快速的)和不超过三次树旋转(对于插入操作是两次)。 虽然插入和删除很复杂,但操作时间仍可以保持为 O(log n) 次 。
红黑树的优势
红黑树能够以O(log2(N))的时间复杂度进行搜索、插入、删除操作。此外,任何不平衡都会在3次旋转之内解决。这一点是AVL所不具备的。
而且实际应用中,很多语言都实现了红黑树的数据结构。比如 TreeMap, TreeSet(Java )、 STL(C++)等。
为什么红黑树查询快_为什么红黑树的效率比较高相关推荐
- 为什么红黑树查询快_目前最详细的红黑树原理分析(大量图片+过程推导!!!)...
一.为什么要有红黑树这种数据结构? 我们知道ALV树是一种严格按照定义来实现的平衡二叉查找树,所以它查找的效率非常稳定,为O(log n),由于其严格按照左右子树高度差不大于1的规则,插入和删除操作中 ...
- 为什么红黑树查询快_红黑树为什么比二叉查找树更高效
平衡二叉查找树 什么是平衡二叉查找树 二叉树中任意一个节点的左右子树的高度相差不能大于 1,这是一种较为严格的定义,但是实际工程中使用,不会要求这么严格,只要实际的高度不比 log2(n)大很多,能达 ...
- 为什么红黑树查询快_为什么工程中都喜欢用红黑树,而不是其他平衡二叉查找树呢?...
前言 二叉查找树是最常用的一种二叉树,它支持快速插入.删除.查找操作,各个操作的时间复杂度跟树的高度成正比,理想情况下,时间复杂度是O(logn). 不过,二叉查找树在频繁的动态更新过程中,可能会出现 ...
- 红黑树与平衡二叉树_图解“红黑树”原理,一看就明白!
" 学过数据结构都知道二叉树的概念,而又有多种比较常见的二叉树类型,比如完全二叉树.满二叉树.二叉搜索树.均衡二叉树.完美二叉树等. 图片来自 Pexels 今天我们要说的红黑树就是就是一棵 ...
- 红黑树的删除_从红黑树的本质出发,彻底理解红黑树!
前言 早上好,我是彤哥. 上一节,我们一起从二叉树.二叉查找树.平衡树.AVL树.2-3树.2-3-4树.B树,一路讲到红黑树,最后得出红黑树的本质:红黑树就是2-3-4树,请看下图: 我们知道2-3 ...
- java版铁傀儡刷新机制,我的世界:新版村庄的铁傀儡数量都快赶上村民了?刷新效率很高!...
在沙盒游戏我的世界中,铁傀儡一直以来都是村庄和村民最忠诚的守护者,它们的创作灵感来自天空之城,平时还会给小村民送花,一旦发现其他生物欺负村民就会被它们视为攻击目标,相信有不少的熊孩子玩家曾经都体验过铁 ...
- 程序员为什么老得快_中国程序员工资为什么那么高?老程序员:淘汰速度快,入行成本大...
在中国,程序员的行业平均工资比一般的传统行业的工资都高,大多数传统行业有自己的职业天花板,不是职位晋升困难,就是工资水平有自己的天花板.而在互联网行业,程序员这个职业这种现象就不是很明显,月薪上万是普 ...
- 怎么用鼠标选中java中table的某一行_为什么同事的工作效率那么高?学会这些鼠标双击技巧,你也可以的...
[温馨提示]亲爱的朋友,阅读之前请您点击[关注],您的支持将是我最大的动力! 在Excel表格处理中,经常会看到同事工作效率那么高,甚至点点鼠标就完成了,自己怎么努力却不行. 其实有些Excel技巧还 ...
- dcdc芯片效率不高的原因_如何解决电源管理芯片效率不高的问题?
相关推荐 2018年,世强元件电商在慕尼黑上海电子展上带来了汽车.工业控制及自动化.物联网.测试测量等九大分区... 发表于 2018-03-29 14:52 • 2583次阅读 电源.工业控制器.D ...
最新文章
- python oop求三角形面积公式_python学习日记(OOP——类的内置方法)
- 官方消息:微软再次提醒IE浏览器将于6月15日停止支持
- linux查看python pip 安装包列表和安装路径
- 2018年创业最火热点的是什么?看到这个你可能就知道哪方面发展最热了
- HNOI2019fish
- CMT learning
- ajax发送请求和数据返回,Ajax发送和接收请求
- setUserVisibleHint-- fragment真正的onResume和onPause方法
- 智能语音识别究竟是如何实现的?
- java商城系统设计-----积分商城系统
- liunx版pgadmin3 source code安装
- Serializer序列化器
- Excel 标记重复多余项
- 设置swiper中的高度
- 《Chrysanthemums Terrace》《菊花台》
- 当“国风综艺”遇上“数字金融”,看国有大行解锁营销新范式
- SYS Informer 完整显示系统、电脑软硬件详细信息
- 启动本地mysql的几种方式
- Jetson 相机编码
- 给定一棵二叉树,计算该二叉树的深度、总节点个数和叶子节点个数。
热门文章
- 高盛:维持水滴公司“买入”评级,目标价9.5美元
- 余生很长,凑活过吧。
- WARNING: erroneous pipeline: no element nvcamerasrc
- deeplinux 热点_deepin linux下载
- B站最惨程序员做的网站,连我奶都能干崩溃。
- 读论文辅助工具推荐-侧边翻译
- 利用Pimpl实现细节隐藏
- 在where中使用decode函数
- Unbuntu18.04 安装CUDA10.1 + CUDNN7.6
- 万物数字化的时代,开发者的“变”与“不变”