Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【高阶数据结构】B+树

【高阶数据结构】B+树

作者头像
YIN_尹
发布于 2024-02-21 03:51:53
发布于 2024-02-21 03:51:53
1710
举报
文章被收录于专栏:YIN_尹的博客YIN_尹的博客

1. B+树的概念

B+树是B树的变形,是在B树基础上优化的多路平衡搜索树,B+树的规则跟B树基本类似,但是又在B树的基础上做了一些改进优化。

一棵m阶的B+树需满足下列条件:

  1. 每个分支结点最多有m棵子树(孩子结点)。
  2. 非叶根结点至少有两棵子树,其他每个分支结点至少有「m/2]棵子树。 (前面这两条其实还跟B树是一样的)
  3. 结点的子树个数与关键字个数相等。
  4. 结点的子树指针p[i]指向关键字值大小在[k[i],k[i+1])区间之间
  5. 所有叶子节点增加一个链接指针链接在一起
  6. 所有关键字及其映射数据都在叶子节点出现

大家可以对照着图理解一下这几条性质。

B+树的特性:

1. 所有关键字都出现在叶子节点的链表中,且链表中的元素都是有序的。 2. 查找不可能在分支节点中命中。 3. 分支节点相当于是叶子节点的索引(仅含有其子树根结点中最大/最小关键码,我们这里图中是最小的),叶子节点才是存储数据的数据层(与B树不同)。

2. B+树的查找

B+树的查找上面有提到——查找不可能在分支节点中命中,如果能找到,应该在叶子节点的链表中:

还是这棵B+树为例,比如我们要查找33 从根结点开始33比5大,往后走,比28也大,再往后走,但是比65小。 所以如果33存在的话,应该在28的子树中。 所以进入28的子树中,然后比较比28大,比35小,所以再往这一层的28的子树p1中找,这就进入到叶子结点的链表中,往后遍历就找到了33。(如果查找的是28也要进入到叶子结点的链表中查找,即使分支结点中存在) 那如果查找34(找不到),也是一样的,最终走到叶子结点的链表中,但是没有这个元素,所以就找不到。

所以B+树的查找无论成功与否,都要走到最下面一层的叶子结点,而B-树的话,查找可能停止在任意一层。

那除了上面的查找方法,其实B+树还有另外一种查找方法:

上面提到对于B+树来说,所有叶子节点增加一个链接指针链接在一起

而每个叶子结点的链表里面元素都是有序的。 所以我们也可以通过这个链接指针去进行顺序查找,从前往后遍历每一个叶子结点的链表。

3. B-树 VS B+树

2.

B+树分支节点相当于是叶子节点的索引,叶子节点才是存储数据的数据层(与B树不同)。

总结:

4. B+ 树的插入分析

这里简单画一个3阶B+树插入分裂的过程图,大家可以简单看看了解一下:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-02-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【高阶数据结构】B-树详解
以上结构适合用于数据量相对不是很大,能够一次性存放在内存中,进行数据查找的场景(内查找)。
YIN_尹
2024/02/08
9000
【高阶数据结构】B-树详解
重温数据结构:理解 B 树、B+ 树特点及使用场景
B 树就是常说的“B 减树(B- 树)”,又名平衡多路(即不止两个子树)查找树,它和平衡二叉树的不同有这么几点:
张拭心 shixinzhang
2019/05/27
5.1K0
《深入浅出话数据结构》系列之什么是B树、B+树?为什么二叉查找树不行?
本文将为大家介绍B树和B+树,首先介绍了B树的应用场景,为什么需要B树;然后介绍了B树的查询和插入过程;最后谈了B+树针对B树的改进。 在谈B树之前,先说一下B树所针对的应用场景。那么B树是用来做什么的呢?B树是一种为辅助存储设计的一种数据结构,普遍运用在数据库和文件系统中。举个例子来说,数据库大家肯定都不陌生,比如现在有一张表,其中有100万条记录,现在要查找查找其中的某条数据,如何快速地从100万条记录中找到需要的那条记录呢?大家的第一反应肯定是二叉查找树,下面先谈谈为什么二叉树不行。
乔戈里
2020/02/14
1.3K0
《深入浅出话数据结构》系列之什么是B树、B+树?为什么二叉查找树不行?
数据结构:查找
平均查找长度(ASL):在查找的过程中,一次查找的长度是指需要比较的关键字次数,而平均查找长度则是所有查找过程中进行关键字的比较次数的平均值。
HLee
2021/02/04
3.6K0
数据结构:查找
MySQL索引底层:B+树详解
当我们发现SQL执行很慢的时候,自然而然想到的就是加索引。对于范围查询,索引的底层结构就是B+树。今天我们一起来学习一下B+树哈~
捡田螺的小男孩
2021/03/15
8430
图解:什么是B-树、B+树、B*树
6.非叶子结点的关键字:K[1], K[2], …, K[M-1];且K[i] < K[i+1];
你好戴先生
2020/09/03
11K2
漫画:什么是B+树?
在上一篇漫画中,我们介绍了B-树的原理和应用,没看过的小伙伴们可以点击下面的链接:
小灰
2022/07/05
4380
漫画:什么是B+树?
数据结构 —— B树和B+树
​ 最近在学习数据库相关的知识,了解到数据库很多是采用B-/+树作为索引,例如Mysql的InnoDB引擎使用的B+树、MongoDB默认采用B树作为索引。
俺也想起舞
2021/12/24
8.8K0
数据结构 —— B树和B+树
数据库底层数据结构 B树B+树LSM树 详解对比与总结
我们熟知常用数据库MySQL MongoDB HBase等底层存储都用了各种树结构,如B树LSM树,不过为什么要用这些结构呢?
大鹅
2021/06/16
5.7K0
6.3.2 B+树基本概念
2)非叶根(不是叶子的根结点)结点至少有两棵子树,其他每个分支结点至少有【m/2】(向下取整)棵子树。(B树是要求至少2棵子树)
week
2018/08/24
4560
DS高阶:B树系列
        若接近有序的数据插入到BS中,会导致退化成单支树,时间复杂度退化为O(N)
小陈在拼命
2024/05/26
1220
DS高阶:B树系列
B-树和B+树的应用:数据搜索和数据库索引
定义:一棵m 阶的B-树,或者为空树,或为满足下列特性的m 叉树: ⑴树中每个结点至多有m 棵子树; ⑵若根结点不是叶子结点,则至少有两棵子树;
黄规速
2022/04/14
7680
B-树和B+树的应用:数据搜索和数据库索引
【考研408&数据结构】一文讲透B树与B+树
平衡二叉树就是最典型 的平衡 没有学到平衡二叉树的朋友 可以移步到这里->啥b都能学明白的平衡二叉树
苏泽
2024/09/05
2890
【考研408&数据结构】一文讲透B树与B+树
PHP数据结构(十九) ——B+树
PHP数据结构(十九)——B+树 (原创内容,转载请注明来源,谢谢) 一、概述 B+树是B树的变种,在数据库系统、文件系统等方面,B+树的运用非常广泛。 1、B+树的要求 1)有n棵子树的结点中含有n个关键字。(B树是n-1个关键字。) 2)所有的叶子结点中包含了全部关键字的信息,及指向含有这些关键字记录的指针,且叶子结点本身依关键字的大小自小而大的顺序链接。这点意味着,叶子节点存在指向相邻叶子节点的指针。这个是在树形的数据结构中非常特殊的地方,使得B+
用户1327360
2018/03/07
1.6K0
PHP数据结构(十九) ——B+树
数据结构 B-树
B-树,有时又写为B_树(其中的“-”或者“-_只是连字符,并不读作“B减树”),一颗 m 阶的 B-树,或者本身是空树,否则必须满足以下特性:
Meng小羽
2019/12/23
5140
PHP数据结构(十六) ——B树
PHP数据结构(十六)——B树 (原创内容,转载请注明来源,谢谢) 一、概述 B树在很多地方被称为“B-树”,因为B树的原英文名称为B-tree,很多人把其译作B-树,但是它的正确读法是B树,因此下面都用B树来表示B-tree。B树是一种多路平衡查找树,其对于加快查找速度具有重要意义。 1、定义 一棵m阶的B树(不是指m叉树,m是这棵树的度,下同),或者是空树,或者是满足下列特性的m叉树: 1)树中每个节点至多m个子树,m-1个关键字。 2)根节点若不
用户1327360
2018/03/07
1.5K0
PHP数据结构(十六) ——B树
数据结构 B加树
如上图所示,B+树中含有两个头指针,一个指向整棵树的根结点,另一个指向关键字最小的叶子结点。同时所有的叶子结点依据其关键字的大小自小而大顺序链接,所有的叶子结点构成了一个 sqt 指针为头指针的链表。
Meng小羽
2019/12/23
6240
当Kotlin遇见数据结构丨数据结构之树结构概述(含满二叉树、完全二叉树、平衡二叉树、二叉搜索树、红黑树、B-树、B+树、B*树)
B-tree(多路搜索树,并不是二叉的)是一种常见的数据结构。使用B-tree结构可以显著减少定位记录时所经历的中间过程,从而加快存取速度。按照翻译,B 通常认为是Balance的简称。这个数据结构一般用于数据库的索引,综合效率较高。
码脑
2019/04/11
1.2K0
当Kotlin遇见数据结构丨数据结构之树结构概述(含满二叉树、完全二叉树、平衡二叉树、二叉搜索树、红黑树、B-树、B+树、B*树)
B树(B-树)、B+树 简述
说起来b树的发明主要是为了减少磁盘io操作 将树的结构设计成矮胖型而不是瘦高型,因为数据库索引是存储在磁盘上的,当数据量比较大时,我们不能把所有索引加载到内存中,只能逐一加载每一个磁盘页,这里的磁盘页对应索引树的节点
glm233
2021/03/08
1.2K0
为什么MySQL数据库索引选择使用B+树?
在进一步分析为什么MySQL数据库索引选择使用B+树之前,我相信很多小伙伴对数据结构中的树还是有些许模糊的,因此我们由浅入深一步步探讨树的演进过程,在一步步引出B树以及为什么MySQL数据库索引选择使用B+树!
Java后端技术
2018/08/09
1.8K0
为什么MySQL数据库索引选择使用B+树?
相关推荐
【高阶数据结构】B-树详解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档