红黑树和B+树

(一)红黑树

红黑树是一种自平衡二叉查找树,也被称为"对称二叉B树",它可以在O(logn)时间内利用 O(logn)的空间来完成查找、插入、删除操作。红黑树的读操作与普通二叉查找树相同,而插入和删除操作可能会破坏红黑树的规则,需要进行恢复操作。恢复红黑树的性质需要少量的颜色变更(实际是非常快速的)和不超过三次树旋转(对于插入操作是两次),虽然插入和删除很复杂,但操作时间仍可以保持为O(logn)。

红黑树的规则:

1.节点是红色或和黑色
2.根节点是黑色
3.所有的叶子节点都是黑色(叶子节点是NIL节点,实际应用时可以有数据)
4.每个红色节点必须有两个黑色的子节点,从叶子节点到根节点不能有两个连续的红色节点。
5.从任意节点到每个叶子节点的简单路径都包含相同数量的黑色节点。
在这里插入图片描述

(二)B+树

(1)B+树常用于数据库和文件系统中,B+树能够保持数据稳定有序,其插入与修改拥有较稳定的对数时间复杂度。B+ 树自底向上插入,这与二叉树恰好相反。
(2)B+树与B树的主要区别:1.B+树中只有叶子节点会带有指向记录的指针,而B树所有节点都有指针,在内部节点出现的索引项不会再出现在叶子节点中。(B+树的所有全量数据都在叶子节点,而B树每个节点都是全量数据)2.B+树中所有叶子节点都是通过指针连接在一起,而B树不会。
在这里插入图片描述

(二)两种树的区别

红黑树结构的数据常常存在于主存中,主要用于快速查找。树的每个节点存储的数据量比较小,cpu通过与主存少量的交互就能获取树的全部数据,并快速的查找到所需数据。而B+树形式的数据常常存在于SSD或磁盘中,由于树的深度比较小(一般3~4),能够减少cpu于磁盘间的交互时间。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/450962.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

策略模式、观察者模式、代理模式、装饰模式 应用场景和实现

有个大神写的很好: 参考:设计模式学习笔记(四:策略模式) 参考:设计模式学习笔记(二:观察者模式) 参考:设计模式学习笔记-代理模式 参考:设计模式-…

DQL、DML、DDL、DCL的概念与区别

http://blog.csdn.net/tomatofly/article/details/5949070 SQL语言的分类 SQL语言共分为四大类:数据查询语言DQL(Data Query Language),数据操纵语言DML,数据定义语言DDL(Data Definition Language),数据…

python学习总结

1.python环境搭建方便,只需要安装python解释器 2.python把任意数据类型赋值给变量,不用定义类型 3.Python的整数浮点数没有大小限制,不用担心超过数值范围。比如java的 int,long 4.python自带最常用的list列表和dicitonary字典&am…

李国杰院士:国内开源社区的崛起需要一个过程

[CSDN.NET 付江/文]日前,在第二届“龙芯杯”中国开源软件设计大赛启动仪式上,CSDN记者专访了中国工程院院士、第三世界科学院院士李国杰。李国杰院士就国产基础软件现状、面临的机遇和挑战、开源环境以及生态系统建设等话题分享了自己的看法。 打造自主…

SuperMap iObject入门开发系列之五管线属性查询

本文是一位好友“托马斯”授权给我来发表的,介绍都是他的研究成果,在此,非常感谢。 管线属性查询功能针对单一管线图层进行特定的条件查询,然后将查询结果输出为列表,并添加点位闪烁功能,例如查询污水管线中…

三类基于贪心思想的区间覆盖问题

一、区间完全覆盖问题 问题描述:给定一个长度为m的区间,再给出n条线段的起点和终点(注意这里是闭区间),求最少使用多少条线段可以将整个区间完全覆盖。 样例:一个长度为8的区间,可选的线段有[2,…

ubuntu 常用软件和命令

永久修改屏幕的分辨率   sudo gedit .profile 将下面的四句话加入。.profile文件的最后   cvt 1280 768   xrandr --newmode "1280x768_60.00" 79.50 1280 1344 1472 1664 768 771 781 798 -hsync vsync   xrandr --addmode Virtual1 "1280x768_60.00&q…

Eclipse搭建Android开发环境(安装ADT,Android4.4.2)

见:http://blog.csdn.net/zht666/article/details/29837777 使用Eclipse做Android开发,需要先在Eclipse上安装ADT(Android Development Tools)插件。 1.安装JDK 1.7 JDK官网http://www.oracle.com/technetwork/java/javase/downlo…

C语言 位操作简析

位运算 前面介绍的各种运算都是以字节作为最基本位进行的。 但在很多系统程序中常要求在位(bit)一级进行运算或处理。C语言提供了位运算的功能, 这使得C语言也能像汇编语言一样用来编写系统程序。 一、位运算符C语言提供了六种位运…

算法:输入一个链表,输出该链表中倒数第k个结点。

算法:输入一个链表,输出该链表中倒数第k个结点。《剑指offer》 思路加到注释里面了; 1:两个if判断是否返回值为空,首个为空,没有第k个值; 2:for循环找到倒数第k个值,返回…

Spring事务那些事儿

(一)事务的隔离级别 大家都知道事务有四个属性,即ACID(原子性、一致性、隔离性、持久性)。这四个里面稍微难理解点的是一致性和持久性。所谓的一致性是指:事务执行前后数据的一致性状态,例如事…

Silverlight Blend动画设计系列八:拖放(Drag-Drop)操作与拖放行为(DragBehavior)

Silverlight & Blend动画设计系列八:拖放(Drag-Drop)操作与拖放行为(DragBehavior) 原文:Silverlight & Blend动画设计系列八:拖放(Drag-Drop)操作与拖放行为(DragBehavior)在Silverlight中自身并没有提供拖放功能的相关实现,要实现拖…

mysql查询显示行号

见:http://blog.csdn.net/muzizhuben/article/details/49449853 使用mysql查询显示行号,没有像oracle这么方便。 不过也可以通过设定变量显示行号,例如: -- 生成 行号 select r:r1 as rowno , a.* from my_tb a ,(select r:0) b …

scanf 用法大全

关于标准库函数scanf论坛上很多人对scanf的不太了解,导致程序出错,我想把scanf的具体用法贴出来,希望大家可以共同进步,有什么不对的地方可以提出来。int scanf(char *format,...);这应该是scanf的标准形式。先说说关于…

深入了解Spring IoC

IoC全称Inversion of Control即控制反转,它还有一个别名依赖注入。spring利用Ioc容器帮我们自动构建对象及注入依赖对象,减少了对象构建与业务代码的耦合,使得我们能够更加高效愉快的写bug🐞了( ̄▽ ̄)"…

软文营销实战记录

最近拜读了徐茂权老师的《 网络营销决胜武器(第2版)》,下面会梳理书中的内容,记录下以后可能会用到的软文营销的技巧。 一、软文载体 1、平面媒体软文:报纸、期刊。 2、非正式出版的基于印刷、打印形式载体的软文:企业印刷的宣传册…

oracle中rownum和row_number()的区别

见:http://www.jb51.net/article/65960.htm row_number()over(partition by col1 order by col2)表示根据col1分组,在分组内部根据col2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)。 与ro…

java类加载顺序

在java中类的加载、初始化都是在程序运行期完成的,虽然会稍微增加开销,但是却很大的增加了灵活性,我们可用在运行期间动态的去网络或其他地方加载一个二进制流来作为程序代码的一部分。接下来我们简单介绍下java类加载过程。 从上图中我们可…

dealloc不调用的情况

2019独角兽企业重金招聘Python工程师标准>>> 1、没有停止定时器 - (void)dealloc { [_timer invalidate]; _timer nil; } 2、VC中有代理Delegate&#xff0c;需要设置delegate的时候&#xff0c;设置为weak property (nonatomic,weak) id<ZoeEatDe…

day10-列表生成式

列表生成式即List Comprehensions&#xff0c;是Python内置的非常简单却强大的可以用来创建list的生成式。 1、生成一个列表 a [i for i in range(1,100) if i%21]print(list(a))或print(a)[1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, …