B树和B+树

嵌入式常用通信协议 #概述 嵌入式通信协议 阅读详情

B树

1 定义

B树是一种平衡的多路查找树,其每一个非根节点都有多个元素和孩子,且所有叶子结点都在同一层次上。这种类型的树在文件系统中很有用。节点的最大孩子数目称为B树的阶,例如一个3阶的B树(也称2-3树)如图1:
在这里插入图片描述
一棵m阶的B树,或为空树,或为满足下列特性的m叉树:

  • 树中每个节点至多有m棵子树
  • 若根结点不是叶子节点,那么至少有两棵子树
  • 除根之外的所有非终端节点至少有【m/2】(不小于m/2的最小整数)棵子树
  • 所有叶子节点都在同一层次上
  • 所有非终端节点中包含下列信息数据
(n, A0, K1, A1, K2, A2,..., Kn, An)
其中, n为关键字的个数(【m/2】-1 ≤ n ≤ m-1),Ki为关键字,且Ki<Ki+1(i=1,2,...,n-1),Ai为指向子树根节点的指针,其指针Ai-1所指子树中所有节点的关键字均小于Ki(i=1,2,...,n),An所指子树中所有节点的关键字均大于Kn

2 查找、插入和删除过程

查找
B树的查找过程与二叉排序树类似,是一个顺时针查找节点和在节点的关键字中进行查找交叉进行的过程。如图1的3阶B树,要查找关键字9,首先和根结点8做比较,结果9>8,则继续与右孩子节点比较,结果9<12,则继续跟随左指针寻找,最终找到关键字9.

插入
B树的插入稍微比较复杂,由于B树节点中的关键字个数必须大于【m/2】-1,因此每次插入关键字是在最底层的节点中添加一个关键字,若该关键字个数不超过m-1,则插入完成,否则要产生节点的分裂
例如在图1中插入关键字3,则无须分裂,直接插入即可:
在这里插入图片描述
但如果在图1中插入关键字5,原本关键字5应该插入到6的左边,但节点数已达到最大数,无法直接插入,则需要将节点分裂:
在这里插入图片描述
如果要插入关键字16,同样需要分裂节点,且此时由于父节点节点数已达到最大,因此分裂过程向上传递至根结点:
在这里插入图片描述
当根结点的节点数也达到最大值时,分裂过程无法向上传递,此时将会使对应节点都产生分裂,并促使B树高度增加。

删除
B树节点的删除操作首先需要找到要删除关键字所在的节点,若删除关键字后,该节点关键字数目小于【m/2】-1,则需要合并节点
例如在图1中,可以直接删除关键字6:
在这里插入图片描述
若删除关键字1,则需要以父节点进行左旋:
在这里插入图片描述
在上述的基础上,再删除关键字4,此时不能直接左旋。需要将比7稍大的元素8下来,使其变为3节点形式,再用比9较大元素填补8的位置,进行左旋。而原本9的位置也需要一次左旋,从而寻找稍大于13的关键字,以此类推依次填补
在这里插入图片描述
如果当前树是一棵满树,则删除任何一个叶子节点,都会使树不满足定义时,就必须减少树的层数。

3 应用

如果内存和外存交换数据频繁,就会造成时间效率的瓶颈,在一个典型的B树中,如果数据量很大,无法一次性存入内存,则可以对B树的阶数进行调整,使其与硬盘存储的页面大小相匹配,高度为h,让B树的根节点持久地保留在内存中,那么在这棵树上寻找一个关键字至多需要读取磁盘h次。

B+树

1 定义

B+树是应文件系统所需而出的一种B树的变型树。一棵m阶的B+树与m阶的B树的差异在于:

  • 有n棵子树的节点含有n个关键字
  • 所有的叶子节点包含全部关键字的信息,及指向含这些关键字记录的指针,叶子节点本身依关键字的大小自小而大顺序链接
  • 所有分支节点可以看成为索引,节点中仅含有其子树中的最大(最小)关键字
    在这里插入图片描述

2 查找、插入和删除过程

在B+树上进行随机查找、插入和删除的过程基本上与B树类似。只是在查找时,若非终端结点的关键字等于给定值(仅提供索引,不能提供对实际记录的访问),并不终止,而是继续向下直到叶子节点。B+树的插入仅在叶子节点上进行,当节点中的关键字个数大于m时要分裂成两个节点,它们所含关键字的个数分别为【(m+1)/2】和【(m+1)/2】,并且它们的双亲节点应同时包含这两个节点的最大关键字。B+树的删除也仅在叶子节点进行,当叶子节点的最大关键字被删除时,其在非终端结点中的值可以作为一个“分界关键字”存在。若因删除使节点个数少于【m/2】时,其和兄弟节点的合并过程和B树类似。

3 应用

B+树特别适合带有范围的查找,其可以从根结点出发找到第一个符合范围的关键字,然后再在叶子节点中按顺序找到符合范围的所有记录

CCS导入工程报错?手把手教你安装C2000编译器(附最新下载链接) 本文详细解析CCS导入工程报错的常见原因,并提供三种安装C2000编译器的解决方案(TI官网离线安装、CCS内置更新和App Center渠道)。通过版本匹配技巧和路径配置要点,帮助开发者快速解决编译器缺失问题,确保项目顺利导入和编译。 阅读详情

相关推荐

Halcon深度学习实战:基于异常值检测的工业缺陷精准识别方案

本文详细介绍了Halcon深度学习中的异常值检测技术在工业缺陷识别中的应用。该方法仅需少量正常样本即可训练,能有效应对未知、多变的缺陷类型,显著降低项目启动门槛。文章提供了从数据准备、模型训练、参数调优到产线部署的完整实战指南,并分享了关键的性能优化与避坑经验。

weixin_29042035的博客 243

数据结构 —— 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万+

STLink驱动故障全解析:从卡顿到重装的终极修复指南

本文全面解析STLink驱动故障的常见现象及解决方案,包括驱动卸载、重装、Keil环境配置等关键步骤。针对设备管理器黄色感叹号、Keil识别异常等问题,提供从软件到硬件的终极修复指南,帮助开发者高效解决STLink连接问题。

sss66的博客 734

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

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

御承扬的博客 1万+

尚硅谷课程【笔记】——大数据之Shell【一】

【【尚硅谷】Shell脚本从入门到实战】笔记

n04j04h06的博客 1319

STM32H743 ADC校准失败排查:HAL_ADCEx_Calibration_Start()的正确调用时机

本文深入剖析了STM32H743 ADC校准失败的核心原因,即错误地在ADC使能状态下调用HAL_ADCEx_Calibration_Start()函数,导致读数漂移。文章详细解释了校准必须在ADC禁用状态下进行的硬件原理,列举了典型错误场景,并提供了上电初始化与周期性重校准的正确代码实践,帮助开发者彻底解决ADC精度问题。

ik678901的博客 1177

数据结构---B树

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

qq_68695298的博客 5892

DAP-Link DIY复刻指南

DAP-Link是ARM开源的一个项目,主要用于代码下载以及调试,支持SWD和JTAG调试接口,对于开发嵌入式的同学相信都或多或少有所耳闻。除了DAP-Link之外还有很多同类型的调试器,如ST-LinkJ-Link,但是这些都是不开源的,无法复刻或进行二次开发。但DAP-Link不同,完全开源,不用担心侵权问题,且随着开源社区大家的共同努力,DAP-Link经过了不断的迭代,先如今已取代ARM之前推出的CMSIS-DAP开源项目。

爱出名的狗腿子 1万+

B-树(高阶数据结构)

若树为空,直接插入新结点,该结点为树的根结点树非空,找待插入关键字在树中的插入位置(找到的插入结点位置一定是叶子结点)检测是否找到插入位置(假设树中的key唯一,即该元素已经存在时则不插入)按照插入排序的思想将该关键字插入到找到的结点中检测该结点关键字数量是否满足B-树的性质:即该节点中的元素个数是否等于M,若小于则满足,插入结束若插入后结点不满足B树的性质,需要对该结点进行分裂:申请新的兄弟结点找到该结点的中间位置将该结点中间位置右侧的元素以及其孩子搬移到新结点中。

GG_Bruse的博客 6555

ZY1-02D (ZY1E)多光谱数据预处理

资源一号02D卫星(5米光学卫星)于2019年9月12日成功发射,卫星搭载的两台相机,可有效获取115公里幅宽的9谱段多光谱数据以及60公里幅宽的166谱段高光谱数据,其中全色谱段分辨率可达2.5米、 多光谱为10米、高光谱优于30米,高光谱载荷可见近红外和短波红外光谱分辨率分别达到10纳米和20纳米。

热爱分享,热爱记录 4832

基于TIA博途的一阶滞后滤波+中位值滤波+堆栈平均值滤波算法SCL语言程序(封装FB库)

基于TIA博途的一阶滞后滤波+中位值滤波+堆栈平均值滤波算法SCL语言程序(封装FB库)

Robot_PLC_HMI_Automation 2178

数据结构(54) B树、B+树

1、B树 1.1、B树的定义 B树,又称多路平衡查找树,B树中所有结点的孩子个数的最大值称为B树的阶,通常用m表示。一棵m阶B树或为空树,或为满足如下特性的m叉树: 1)树中每个结点至多有m棵子树,即至多含有m-1个关键字。 2)若根节点不是终端结点,则至少有两棵子树。 3)除根节点外的所有非叶结点至少有棵子树,即至少含有个关键字。 4)所有非叶结点的结构如下: Ki(i = 1,2,...,n)代表关键字且满足K1<K2<...<Kn; Pi(i = 0,1,...,

李白 1万+

【用unity实现100个游戏之10】复刻经典俄罗斯方块游戏(附项目源码)

当今游戏产业中,经典游戏的复刻一直是一项受欢迎且具有挑战性的任务。俄罗斯方块是一个深入人心、令人上瘾的经典游戏,在过去几十年里一直享有广泛的流行度。其简单而富有策略性的玩法吸引了无数玩家的关注。因此,我决定利用Unity引擎来复刻这款经典游戏,以让更多的人重新体验其中的乐趣。通过使用Unity引擎,我能够利用其强大的工具和功能,从头开始构建一个与原版俄罗斯方块游戏相似的游戏。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2796

B树和B+树详解

Mysql调优之B树和B+ 树详解

一席之地 5万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

B树和B+树的区别

文章目录简述写在前面1、B树2、B+树深入浅出B树B树深入B-树的查找B+ 树B+树概述B-树和B+树的区别拓展:MySQL为什么使用B-Tree(B+Tree)&& 存储知识存储数据最小单元主存存取原理磁盘存取原理总结 简述 写在前面 B树 和B+树是 MySQL索引使用的数据结构,对于索引优化和原理理解都非常重要,下面我的写文章就是要把B树,B+树的神秘面纱揭开,让大家在面试的时候碰到这个知识点一往无前,不再成为你的知识盲点! 1、B树 这里的 B 是 Balance(平衡)的缩写。

JavaPub 2万+

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

数据结构——B树和B+树

平衡二叉树或红黑树的查找效率最高,时间复杂度是O(nlogn)。但不适合用来做数据库的索引树。因为磁盘和内存读写速度有明显的差距,磁盘中存储的数据需要先读取到内存中才能进行高速的检索。而数据库当中存储着海量的数据,光是数据库索引就有可能占据几个GB甚至更大的空间。当我们要查找数据的时候,显然不可能把整个索引树读到内存中。因此,我们只能以索引树的节点为基本单元,每次把单一节点从磁盘读取到内存当中,进行后续操作。

weixin_61015911的博客 1万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

B-树、B树和B+树

B-树、B树和B+树总结介绍

小码农想做大架构的博客 9619

b树和b+树的区别

一,b树b树(balance tree)和b+树应用在数据库索引,可以认为是m叉的多路平衡查找树,但是从理论上讲,二叉树查找速度和比较次数都是最小的,为什么不用二叉树呢? 因为我们要考虑磁盘IO的影响,它相对于内存来说是很慢的。数据库索引是存储在磁盘上的,当数据量大时,就不能把整个索引全部加载到内存了,只能逐一加载每一个磁盘页(对应索引树的节点)。所以我们要减少IO次数,对于树来说,IO次数就是树

login_sonata的博客 4万+

B树,B-树和B+树的区别

B树       即二叉搜索树:       1.所有非叶子结点至多拥有两个儿子(Left和Right);       2.所有结点存储一个关键字;       3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树;       如:              B树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中;否则,如果查询关键字比结点关键字小,就进入...

chensi16114的博客 2万+

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

B树 另一个名字就是二叉树索引。 1.每个节点的儿子节点都是两个,左边是比该节点小的,右边是比该节点大的,这两个索引的儿子节点同样是这种情况 2.所有的节点都是一个关键字 正常情况来说如下: 搜索的时候是从根节点开始搜索的。 比如搜索的是35,则直接命中。如果搜索“28“,那就是比35小,左边节点,“17”,“28”比“17”大,则右边节点,直到命中。 但是这种结构在进行节点删除等操作之后有可能...

weixin_41011482的博客 3万+

B树和B+树区别

一,b树 b树(balance tree)和b+树应用在数据库索引,可以认为是m叉的多路平衡查找树,但是从理论上讲,二叉树查找速度和比较次数都是最小的,为什么不用二叉树呢? 因为我们要考虑磁盘IO的影响,它相对于内存来说是很慢的。数据库索引是存储在磁盘上的,当数据量大时,就不能把整个索引全部加载到内存了,只能逐一加载每一个磁盘页(对应索引树的节点)。所以我们要减少IO次数,对于树来说,IO次数就是树的高度,而“矮胖”就是b树的特征之一,它的每个节点最多包含m个孩子,m称为b树的阶,m的大小取决于磁盘页的大

渣渣 1万+

B树和 B+树

B树和 B+树是两种广泛用于数据库和文件系统的平衡树数据结构,主要用于索引和存储大规模数据。它们的核心目标是提高磁盘 I/O 效率,从而加快查询和更新操作。:如果索引列不包含所有查询需要的字段,就必须回表,导致额外的磁盘 I/O。

m0_50920058的博客 2653

B树和B+树的插入、删除

树也称树,它是一颗多路平衡查找树。我们描述一颗树时需要指定它的阶数,阶数表示了一个结点最多有多少个孩子结点,用字母表示阶数。当取时,就是我们常见的二叉搜索树。一颗阶的每个结点最多有个关键字。根结点最少可以只有个关键字。非根结点至少有个关键字。每个结点中的关键字都按照从小到大的顺序排列,每个关键字的左子树中的所有关键字都小于该结点,而右子树中的所有关键字都大于该结点。所有叶子结点都位于同一层,或者说根结点到每个叶子结点的长度都相同。上图是一颗阶数为的树。

weixin_45092290的博客 4626
上一篇: 平衡二叉树AVL(JS实现)
下一篇: 字典树
PAT-python-zjw
博客等级 码龄10年 381粉丝 408原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值