数据结构学习系列 -- 漫画B B+树
最近在梳理数据结构的相关知识,在梳理到B树时发现网上有一篇图文并茂介绍B树相关知识的文章,特转载自此。原文链接。
一个m阶的B树具有如下几个特征:
- 根结点至少有两个子女。
- 每个中间节点都包含k-1个元素和k个孩子,其中 m/2 <= k <= m
- 每一个叶子节点都包含k-1个元素,其中 m/2 <= k <= m
- 所有的叶子结点都位于同一层。
- 每个节点中的元素从小到大排列,节点当中k-1个元素正好是k个孩子包含的元素的值域分划。
一个m阶的B+树具有如下几个特征:
- 有k个子树的非页节点包含k个元素(B树是k-1个元素),每个元素不保存数据,只用来索引,所有数据都保存在叶子节点。
- 叶子结点包含了全部元素信息及指向含这些元素记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接。
- 所有的非页节点元素都同时存在于子节点,在子节点元素中是最大(或最小)元素。
B-树中的卫星数据(Satellite Information):
B+树中的卫星数据(Satellite Information):
需要补充的是,在数据库的聚集索引(Clustered Index)中,叶子节点直接包含卫星数据。在非聚集索引(NonClustered Index)中,叶子节点带有指向卫星数据的指针。
第一次磁盘IO:
第二次磁盘IO:
第三次磁盘IO:
B-树的范围查找过程
自顶向下,查找到范围的下限(3):
中序遍历到元素6:
中序遍历到元素8:
中序遍历到元素9:
中序遍历到元素11,遍历结束:
B+树的范围查找过程
自顶向下,查找到范围的下限(3):
通过链表指针,遍历到元素6, 8:
通过链表指针,遍历到元素9, 11,遍历结束:
综上所述,B+树有以下优势:
- 单一节点存储更多的元素,使得查询的IO次数更少。
- 所有查询都要查找到叶子节点,查询性能稳定。
- 所有叶子节点形成有序链表,便于范围查询。
再次感谢原文作者产出这么一篇图文并茂的好文。
数据结构学习系列 -- 漫画B B+树相关推荐
- 数据结构学习系列文章合集
数据结构学习系列文章目录 前言 1.稀疏数组和队列 稀疏数组和二位数组的转换 数组队列的实现 环形队列的介绍与实现 2.链表 单链表的增.删.改.查 总结 前言 学习数据结构记录,作为自己的笔记,同时 ...
- 浙大版数据结构学习系列内容汇总
数据结构 一.基本概念 二.线性结构 三.树 四.图 五.排序 六.散列查找 学习浙大版数据结构系列课程过程中使用C++实现的课程对应练习代码和编程作业代码,点击 → Github链接进行查看. ...
- 数据结构学习记录——哈夫曼树(什么是哈夫曼树、哈夫曼树的定义、哈夫曼树的构造、哈夫曼树的特点、哈夫曼编码)
目录 什么是哈夫曼树 哈夫曼树的定义 哈夫曼树的构造 图解操作 代码实现 代码解析 哈夫曼树的特点 哈夫曼编码 不等长编码 二叉树用于编码 哈夫曼编码实例 什么是哈夫曼树 我们先举个例子: 要将百分制 ...
- 算法与数据结构学习(46)-B树、B+树和B*树
B树的介绍 B-tree树即B树,B即Balanced,平衡的意思.有人把B-tree翻译成B-树,容易让人产生误解.会以为B-树是一种树,而B树又是另一种树.实际上,B-tree就是指的B树. 前面 ...
- Java学习系列及数据结构博客全目录
Java学习系列 Java学习系列(一)Java的运行机制.JDK的安装配置及常用命令详解 Java学习系列(二)Java注释.标识符.基本数据类型及其转换易错点详解 Java学习系列(三)Java运 ...
- 数据结构学习笔记(3-5):树
附录:所有blog的链接 数据结构学习笔记(1):基本概念 数据结构学习笔记(2):线性结构 数据结构学习笔记(3-5):树 数据结构学习笔记(6-8):图 数据结构学习笔记(9-10):排序 数据结 ...
- 数据结构专题-学习笔记:李超线段树
数据结构专题 - 学习笔记:李超线段树 1. 前言 2. 详解 3. 应用 4. 总结 5. 参考资料 1. 前言 本篇博文是博主学习李超线段树的学习笔记. 2020/12/21 的时候我在 线段树算 ...
- 数据结构学习——哈夫曼树
数据结构学习记录DAY13 :哈夫曼树(上) 哈(赫)夫曼树和哈(赫)夫曼编码 路径 一个结点到另外一个结点的通路,称为路径 (祖先结点到子孙结点) 路径长度: 每经过一个结点,路径长度就增加1,不包 ...
- Python数据结构学习笔记——树和图
目录 一.树的概念 二.二叉树的实现 (一)列表的列表 (二)结点与引用 三.图的概念 四.图的实现 (一)邻接矩阵 (二)邻接表 一.树的概念 树是一种数据结构,树由结点及连接结点的边组成,每个树有 ...
最新文章
- 深入理解Python闭包概念
- EBS R12中如何使用CGI登录Form
- 微服务Apache ServiceComb 数据一致性Saga演进介绍
- log4net 日志框架的配置
- 项目Wiki的选择和配置
- VGGNet论文翻译-Very Deep Convolutional Networks for Large-Scale Image Recognition
- CentOS和AIX查看系统序列号
- 智汇华云 | 集群自动化部署服务流程之自动化集群配置(上)
- 数字化转型背景下的“新IT职业教育” | 职业教育系列报告(四)
- LOJ10068 秘密的牛奶运输
- 计算机键盘上fn键,笔记本电脑键盘上Fn键的详细介绍
- php学习日志(5)-解决Windows Live Writer错误:WindowsLive.Writer.CoreServices.HttpRequestHelper的类型初始值设定发生异常...
- AirServer7ios苹果手机专用投屏PC电脑工具
- 什么是商业智能 (BI) 仪表板?
- OC基础--对象做参数在方法间传递
- ubuntu中vim编辑模式退格键无法删除,方向键乱入ABCD解决方法
- 3. 使用balsam.exe / balsamui.exe转换3D模型为 Mesh 文件共View3D的Model使用
- SPA(单页面)和MPA(多页面)的区别与优缺点
- LSTM-长短时记忆网络
- Unity3D 个人尝试经验总结
热门文章
- 在两个高程点之间如何生成加密点_南方CASS入门:[11]高程点加密和问题
- Chive CTF 2020 - Tiki
- 关于expdp ESTIMATE_only以及EXPDP和EXP HWM降低的比较
- RAC 常用管理命令
- 电工基础知识分享(四):图文并茂,史上最全万用表使用手册
- TextInputEditText样式设置
- java 程序员,是不是很想进字节跳动?开发三年的我拿到了入职通知
- Luat 功能开发教程(七) 基站 WIFI定位
- 创意家具设计师主页模板
- 1826: [JSOI2010]缓存交换