B 树、B- 树、B+ 树和B* 树

你还不知道 BTree,B-Tree,B+Tree 的区别吗? 文章目录前言BTreeB+Tree小结 前言 今天来总结一下,B树、B-树、B+树,这三棵树。对于 B树和B-树,网上的说法分为两种,一种说法是B树是二叉搜索树,B-树是一种多路搜索树;另一种说法是 B树就是B-树,B-树就是B树。经过查阅资料,得出结论,后者说法是正确的。 下面引用百度百科 B树 的定义: 在B-树中查找给定关键字的方法是,首先把根结点取来,在根结点所包含的关键字K1,…,Kn查找给定的关键字(可用顺序查找或二分查找法),若找到等于给定值的关键字,则查找成功;否则,一定可以确定要查找的关 阅读详情

B树

即二叉搜索树:
1. 所有非叶子结点至多拥有两个儿子(Left和Right);
2. 所有结点存储一个关键字;
3. 非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树;
如:


B树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中;否则,如果查询关键字比结点关键字小,就进入左儿子;如果比结点关键字大,就进入右儿子;如果左儿子或右儿子的指针为空,则报告找不到相应的关键字;
如果B树的所有非叶子结点的左右子树的结点数目均保持差不多(平衡),那么B树的搜索性能逼近二分查找;但它比连续内存空间的二分查找的优点是,改变B树结构(插入与删除结点)不需要移动大段的内存数据,甚至通常是常数开销;
如:


但B树在经过多次插入与删除后,有可能导致不同的结构:


右边也是一个B树,但它的搜索性能已经是线性的了;同样的关键字集合有可能导致不同的树结构索引;所以,使用B树还要考虑尽可能让B树保持左图的结构,和避免右图的结构,也就是所谓的“平衡”问题;
实际使用的B树都是在原B树的基础上加上平衡算法,即“平衡二叉树”;如何保持B树结点分布均匀的平衡算法是平衡二叉树的关键;平衡算法是一种在B树中插入和删除结点的策略;

B-树

是一种多路搜索树(并不是二叉的):
1. 定义任意非叶子结点最多只有M个儿子;且M>2;
2. 根结点的儿子数为[2, M];
3. 除根结点以外的非叶子结点的儿子数为[M/2, M];
4. 每个结点存放至少M/2-1(取上整)和至多M-1个关键字(至少2个关键字);
5. 非叶子结点的关键字个数=指向儿子的指针个数-1;
6. 非叶子结点的关键字:K[1], K[2], …, K[M-1];且K[i] < K[i+1];
7. 非叶子结点的指针:P[1], P[2], …, P[M];其中P[1]指向关键字小于K[1]的子树,P[M]指向关键字大于K[M-1]的子树,其它P[i]指向关键字属于(K[i-1], K[i])的子树;
8. 所有叶子结点位于同一层;
如(M=3):


B-树的搜索,从根结点开始,对结点内的关键字(有序)序列进行二分查找,如果命中则结束,否则进入查询关键字所属范围的儿子结点;重复,直到所对应的儿子指针为空,或已经是叶子结点;
B-树的特性:
1. 关键字集合分布在整颗树中;
2. 任何一个关键字出现且只出现在一个结点中;
3. 搜索有可能在非叶子结点结束;
4. 其搜索性能等价于在关键字全集内做一次二分查找;
5. 自动层次控制;
由于限制了除根结点以外的非叶子结点,至少含有M/2个儿子,确保了结点的至少利用率,其最底搜索性能为:


其中,M为设定的非叶子结点最多子树个数,N为关键字总数;
所以B-树的性能总是等价于二分查找(与M值无关),也就没有B树平衡的问题;
由于M/2的限制,在插入结点时,如果结点已满,需要将结点分裂为两个各占M/2的结点;删除结点时,需将两个不足M/2的兄弟结点合并;

B+树

B+树是B-树的变体,也是一种多路搜索树:
1. 其定义基本与B-树同,除了:
2. 非叶子结点的子树指针与关键字个数相同;
3. 非叶子结点的子树指针P[i],指向关键字值属于[K[i], K[i+1])的子树(B-树是开区间);
5. 为所有叶子结点增加一个链指针;
6. 所有关键字都在叶子结点出现;
如(M=3):


B+的搜索与B-树也基本相同,区别是B+树只有达到叶子结点才命中(B-树可以在非叶子结点命中),其性能也等价于在关键字全集做一次二分查找;
B+的特性:
1. 所有关键字都出现在叶子结点的链表中(稠密索引),且链表中的关键字恰好是有序的;
2. 不可能在非叶子结点命中;
3. 非叶子结点相当于是叶子结点的索引(稀疏索引),叶子结点相当于是存储(关键字)数据的数据层;
4. 更适合文件索引系统;

B*树

是B+树的变体,在B+树的非根和非叶子结点再增加指向兄弟的指针:

B*树定义了非叶子结点关键字个数至少为(2/3)*M,即块的最低使用率为2/3(代替B+树的1/2);
B+树的分裂:当一个结点满时,分配一个新的结点,并将原结点中1/2的数据复制到新结点,最后在父结点中增加新结点的指针;B+树的分裂只影响原结点和父结点,而不会影响兄弟结点,所以它不需要指向兄弟的指针;
B*树的分裂:当一个结点满时,如果它的下一个兄弟结点未满,那么将一部分数据移到兄弟结点中,再在原结点插入关键字,最后修改父结点中兄弟结点的关键字(因为兄弟结点的关键字范围改变了);如果兄弟也满了,则在原结点与兄弟结点之间增加新结点,并各复制1/3的数据到新结点,最后在父结点增加新结点的指针;
所以,B*树分配新结点的概率比B+树要低,空间使用率更高;

小结

B树:二叉树,每个结点只存储一个关键字,等于则命中,小于走左结点,大于走右结点;
B-树:多路搜索树,每个结点存储M/2到M个关键字,非叶子结点存储指向关键字范围的子结点;
所有关键字在整颗树中出现,且只出现一次,非叶子结点可以命中;
B+树:在B-树基础上,为叶子结点增加链表指针,所有关键字都在叶子结点中出现,非叶子结点作为叶子结点的索引;B+树总是到叶子结点才命中;
B*树:在B+树基础上,为非叶子结点也增加链表指针,将结点的最低利用率从1/2提高到2/3;


转载自:http://hi.baidu.com/petercao2008/item/62786f00352b8110cd34ea7d

快速理解平衡二叉树、B-tree、B+tree、B*tree 阅读详情

相关推荐

B+树和B*树详解

B+树和B*树详解 文章目录B+树和B*树详解一、B+树1.B+树的定义2.性质3. B+树的插入操作4.B+树的删除操作二、B*树 一、B+树 1.B+树的定义 2.性质 B+树是B树的变体,也是一种多路搜索树,除了: 1)B+树包含2种类型的结点:内部结点(也称索引结点)和叶子结点。根结点本身即可以是内部结点,也可以是叶子结点。根结点的关键字个数最少可以只有1个。 2)B+树与B树最大的不同是内部结点不保存数据,只用于索引,所有数据(或者说记录)都保存在叶子结点中。 3) m阶B+树表示了内部

wolfGuiDao的博客 2691

数据结构 —— B树

文章目录1、B树的定义1.1、B树的补充说明:1.2 、`B树` == `B-树` == `B-tree` == `B tree`的区别2、B树的插入操作下面以5阶B树为例,介绍B树的插入操作,3、 B树的删除操作下面以5阶B树为例,介绍B树的删除操作 1、B树的定义 B-tree 即 B树,B 即 Balanced,平衡的意思。 B树 是一颗多路平衡查找树。 我们描述一颗B树时需要指定...

猎人在吃肉 3万+

不用SE63逐个翻译!ABAP函数LXE_OBJ_TEXT_PAIR_WRITE批量处理TCODE描述的3种姿势

本文介绍了三种利用ABAP函数LXE_OBJ_TEXT_PAIR_WRITE批量翻译SAP事务码(TCODE)描述的高效方案,旨在替代SE63逐个翻译的低效操作。内容涵盖从基础循环、Excel导入到全自动程序集成的实现方法,帮助开发者显著提升批量翻译效率,并深入解析了SAP翻译体系的核心原理与实战技巧。

weixin_42593130的博客 653

数据结构学习笔记之B树与B+树

B树与B+树,与二叉排序树一样,也常用于查找算法中,本文学习这两种结构的基本概念与基本操作。

御承扬的博客 1万+

pytorch-cifar100学习资料汇总 - 基于PyTorch的CIFAR-100图像分类实践

pytorch-cifar100是一个基于PyTorch实现CIFAR-100数据集图像分类的开源项目。该项目实现了多种经典的深度学习网络模型,如ResNet、DenseNet、VGG等,为开发者提供了在CIFAR-100数据集上进行图像分类实验的代码范例。pytorch-cifar100项目为我们提供了在CIFAR-100数据集上进行图像分类实验的完整代码实现。无论你是想要学习PyTorch的使用,还是研究不同网络模型在CIFAR-100上的表现,这个项目都是一个很好的起点。

helloaiworld的博客 1113

RocketMQ源码分析之消息轨迹

文章目录前言一、消息轨迹二、消息轨迹源码分析1、producer端2、consumer端三、消息轨迹中存储的信息1.TraceContext2.TraceBean3.TraceType四、总结 前言   本篇文章将会从以下方面介绍消息轨迹:什么是消息轨迹?如何启用消息轨迹?示例demo、消息轨迹的源码分析和消息轨迹中存储的信息。最后会用一张图来总结消息轨迹的工作原理。 一、消息轨迹 1.什么是消息轨迹? 消息轨迹是用来跟踪记录消息发送、消息消费的轨迹。 2.如何启用消息轨迹? broker端 需要在b

不爱学习的小妞博客 1067

数据结构---B树

B-树B+树B*树的介绍以及B-树的模拟实现

qq_68695298的博客 5890

基于STM32的智能快递柜设计(全部资料)

本文设计了一种基于STM32F407ZGT6的智能快递柜系统,通过模块化硬件设计和软件算法优化,实现了24小时无人值守、温湿度智能调控、远程监控等功能。系统集成OLED显示、GSM通信、舵机控制、超声波检测等模块,存取响应时间≤3秒,识别准确率达99.2%,较传统模式效率提升60%。测试表明系统运行稳定,用户满意度达92%,具有成本低、安全性高、可扩展性强等特点,为智慧物流末端配送提供了创新解决方案。未来可引入AI算法、太阳能供电等功能进一步优化系统性能。

3254968421的博客 578

B+树和B*树

B+Tree&B*Tree

m0_70088010的博客 1159

YOLOv8改进 | 注意力机制 | 添加DAttention (DAT)注意力机制实现极限涨点

本文给大家带来的是YOLOv8改进DAT的教程,其发布于2022年CVPR2022上同时被评选为Best Paper,由此可以证明其是一种十分有效的改进机制,其主要的核心思想是:引入可变形注意力机制和动态采样点(听着是不是和可变形动态卷积DCN挺相似)。同时在网络结构中引入一个DAT计算量由8.9GFLOPs涨到了9.4GFLOPs。本文的讲解主要包含三方面:DAT的网络结构思想、DAttention的代码复现,如何添加DAttention到你的结构中实现涨点,下面先来分享我测试的对比图。

Snu77的博客 1万+

【WorkBuddy专栏53】我的WB为什么变聪明了——SOUL与USER配置管理实战(上)

【WorkBuddy专栏53】我的WB为什么变聪明了——SOUL与USER配置管理实战(上)

AI人人懂 232

简单了解B+树和B*树及B树的应用

B树:有序数组+平衡多叉树;B+树:有序数组链表+平衡多叉树;B*树:一棵更丰满的,空间利用率更高的B+树。mysql是目前非常流行的开源关系型数据库,不仅是免费的,可靠性高,速度也比较快,而且拥有灵活的插件式存储引擎,如下:MySQL中索引属于存储引擎级别的概念,不同存储引擎对索引的实现方式是不同的。注意:索引是基于表的,而不是基于数据库的。

sqm_C的博客 1161

Aurix TC3xx系列MCU DMA模块配置方法(二)

本文主要基于英飞凌Aurix TC3xx系列MCU,通过EB tresos配置工具,介绍DMA驱动模块的配置方法。

m0_38045338的博客 2843

数据结构之B树、B+树和B*树

B树是一种平衡的搜索树,通常被广泛应用于数据库和文件系统中。每个节点可以拥有多个子节点。相比于二叉搜索树,B树的多路性使得它更适合处理大量数据。每个节点包含多个关键字,这些关键字按照升序排列。关键字的数量有一个上限和下限,确保树的平衡性。B+树是在B树的基础上进行改进的一种数据结构。相较于B树,B+树通过调整结构提升了顺序访问性能,使得范围查询等操作更为高效。B*树是在B+树的基础上进行了一些优化的数据结构。其目标是减少B+树节点的分裂和合并操作,以提高性能和降低维护成本。

double222222的博客 2429

西安交通大学软件学院——分布式系统练习题(综合题)

摘要:本文探讨了分布式系统的核心特性与关键问题。首先阐述了分布式系统的8种透明性特性,包括访问、定位、迁移等。然后通过具体案例分析了分布式事务的回滚机制、域名解析的迭代与递归过程、不同分布式系统的异同比较。重点讨论了RPC通信中客户端/服务器崩溃的处理方法,包括消灭、再生和到期三种策略。最后介绍了Lamport时间戳算法在进程通信中的应用及问题解决方案。全文涵盖了分布式系统设计中的透明性、可靠性、一致性等核心问题。

qq_73044452的博客 201

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

关于B树的学习总结和B+树,B*树的简介

概念 B树,英文是B-tree,是一种平衡多路树,这个不叫B减树,就是B树。 B树是一种多路树。因为他的子节点不止2个,可以是多个。 B树是一种平衡树。所谓平衡树,指的是他的左右两个子树的高度差小于等于1,而且左右子树的子树高度差也小于等于1。其实B树算是一种特殊的平衡树,因为B树的要求更高,要求左右子树高度相同,也就是说,根节点到每个叶子节点的距离都相同。 约定 1,ceil(

lkforce 8661

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

B树、B+树和B*树

多路查找树 二叉树的操作效率较高,但是也存在问题 二叉树需要加载到内存的,如果二叉树的节点少,没有什么问题,但是如果二叉树的节点很多(比如 1 亿), 就存在如下问题: 问题 1:在构建二叉树时,需要多次进行 i/o 操作(海量数据存在数据库或文件中),节点海量,构建二叉树时,速度有影响 问题 2:节点海量,也会造成二叉树的高度很大,会降低操作速度. 多叉树 在二叉树中,每个节点有数据项,最多有两个子节点。如果允许每个节点可以有更多的数据项和更多的子节点,就是多叉树(multiway tree) 2

多思考🤔~ 543

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

B+树和B*树及数据库索引了解

B+树,B*树的理解。数据库索引使用B+树的原理

电气工程专业本科生、辅修计算机。分享嵌入式、后端等方面的系统学习路径。 935

B-树、B+树和B*树

一. B-树(B树) 1. 基础知识 2. 插入操作 3. 删除操作 4. B树的磁盘IO优势和搜索效率 二. B+树 1. m阶B+树和m阶B树的区别 2. B+树比B树更适合操作系统的文件索引和数据库索引的原因 三. B*树

qq_41721746的博客 1502

b-树和b树一样吗_一文详解 B-树,B+树,B*树

B-树B-树是一种多路搜索树(并不一定是二叉的)1970年,R.Bayer和E.mccreight提出了一种适用于外查找的树,它是一种平衡的多叉树,称为B树(或B-树、B_树)。一棵m阶B树(balanced tree of order m)是一棵平衡的m路搜索树。它或者是空树,或者是满足下列性质的树:1、根结点至少有两个子女;2、每个非根节点所包含的关键字个数 j 满足:┌m/2┐ - 1 &l...

weixin_35993148的博客 446

B树 B+树 B*树的区别和适用场合

一、B树 1、B树的特性 一棵m阶的B树的满足条件: (1)每个节点至多有m棵子树 (2)根节点除外,其它每个分支节点至少有【m/2】棵子树 (3)根节点至少有两棵子树(除非B树只包含一个节点) (4)所有叶子节点在同一层上,B树的叶子节点可以看成一种外部节点,不包含任何信息。 (5)有j个孩子的非叶结点恰好有j-1个关键码,关键码按递增次序排列。 B 树又叫平衡多路查找树。如图: 2、B树的使用场景 B树多用于做文件系统的索引。 那么问题来了:为什么要用B树,红黑树不是就挺好的么? 原因: B树和二叉

jinking01的专栏 2680

B树、B-树、B+树、B*树的定义和区分

参考文章:B树、B-树、B+树的定义和区分 B树 另一个名字就是二叉树索引。 每个节点的儿子节点都是两个,左边是比该节点小的,右边是比该节点大的,这两个索引的儿子节点同样是这种情况 所有的节点都是一个关键字 正常情况来说如下: 搜索的时候是从根节点开始搜索的。 比如搜索的是35,则直接命中。如果搜索“28“,那就是比35小,左边节点,“17”,“28”比“17”大,则右边节点,直到命中。 但是这种结构在进行节点删除等操作之后有可能出现以下情况: 这时候虽然也是索引,但是搜索已经是线性的

justlpf的专栏 1115

数据结构 —— B+树和B*树及MySQL底层引擎

数据结构 —— B+树和B*树及MySQL底层引擎

qq_67693066的博客 1789

b+树和b树的区别_数据结构(三)、B树,B+树,B*树

动态查找树主要有:二叉查找树,平衡二叉树,红黑树,B-tree/B+-tree/B*-tree。前三个都是典型的二叉树结构,查找的时间复杂度O(log2N)和树的深度相关,随着树的深度降低会提高查找效率。而在现实情况中大部分数据存储在磁盘中,对于数据量比较大的情况下,对导致二叉树结构的深度也随之变大造成磁盘IO读写频繁导致查询效率低下,因此大部分关系型数据库都使用本篇要介绍的B+Tree...

weixin_42577735的博客 195

13 数据结构和算法——B树,B+树,B*树,R树的总结

B树(英语:B-tree)是一种自平衡的树,能够保持数据有序。这种数据结构能够让查找数据、顺序访问、插入数据及删除的动作,都在对数时间内完成。B树,概括来说是一个一般化的二叉查找树(binary search tree),可以拥有最多2个子节点。与自平衡二叉查找树不同,B树适用于读写相对大的数据块的存储系统,例如磁盘。 根结点至少有两个子女。 每个中间节点都包含k-1个元素和k个孩子,其中...

数据知道的博客 4万+
上一篇: 深入理解数据库磁盘存储(Disk Storage)
下一篇: 深入理解DB2表空间(Tablespace)
idber
博客等级 码龄14年 176粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值