B树

B树,⼜称多路平衡查找树,B树中所被允许的孩⼦个数的最⼤值称为B树的阶,通常⽤m表示。⼀棵m阶B树或为空树,或为满⾜如下特性的m叉树:
1)树中每个结点⾄多有m棵⼦树,即⾄多含有m-1个关键字。
2)若根结点不是终端结点,则⾄少有两棵⼦树。
3)除根结点外的所有⾮叶结点⾄少有 棵⼦树,即⾄少含有 -1个关键字。
5)所有的叶结点都出现在同⼀层次上,并且不带信息(可以视为外部结点或类似于折半查找判定树的查找失败结点,实际上这些结点不存在,指向这些结点的指针为空)。

m阶B树的核⼼特性:
1) 根节点的⼦树数∈[2, m],关键字数∈[1, m-1]。
其他结点的⼦树数∈[ ⌈m/2⌉, m];关键字数∈[ ⌈m/2⌉-1, m-1]
2)对任⼀结点,其所有⼦树⾼度都相同
3)关键字的值:⼦树0<关键字1<⼦树1<关键字2<⼦树2<…. (类⽐⼆叉查找树 左<中<右)

408算B树的⾼度不包括叶⼦结点(失败结点)

最⼤⾼度——让各层的分叉尽可能的少

n个关键字的B树必有n+1个叶⼦结点

B树的插入删除

对于这里的知识点的话,我们只要求处理手算实现,具体的代码实现我们不要求,在考试中应该也不会涉及得到。

接下来我们从头开始建立一棵树

这里超出来了

在插⼊key后,若导致原结点关键字数超过上限,则从中间位置( ⌈m/2⌉)将其中的关键字分为两部分,左部分包含的关键字放在原结点中,右部分包含的关键字放到新结点中,中间位置( ⌈m/2⌉)的结点插⼊原结点的⽗结点

新元素⼀定是插⼊到最底层“终端节点”,⽤“查找”来确定插⼊位置

第二层节点也已经满了

其实B树的插入就一句话总结,

核⼼要求:
①对m阶B树——除根节点外,结点关键字个数≤n≤m-1
②⼦树0<关键字1<⼦树1<关键字2<⼦树2<….

记住m阶B树的性质节点最多m-1个关键子(最少二分之m向上取整减一,最少二分之m向上取整个子树,最多m个子树)

简言之就是符合B树的定义然后向上拱中间的元素就好。

B树的删除

若被删除关键字在终端节点,则直接删除该关键字(要注意节点关键字个数是否低于下限 ⌈m/2⌉ − 1)删除了60

删除了80

若被删除关键字在⾮终端节点,则⽤直接前驱或直接后继来替代被删除的关键字
直接前驱:当前关键字左侧指针所指⼦树中“最右下”的元素

接下来采取采用直接后继代替的方式

接下来删除了节点77

若被删除关键字在⾮终端节点,则⽤直接前驱或直接后继来替代被删除的关键字
直接前驱:当前关键字左侧指针所指⼦树中“最右下”的元素
直接后继:当前关键字右侧指针所指⼦树中“最左下”的元素

右孩子宽裕

若是删除38则不满住B树的定义了节点关键字少于2(⌈m/2⌉ −1)个了

兄弟够借。若被删除关键字所在结点删除前的关键字个数低于下限,且与此结点右(或左)兄弟结
点的关键字个数还很宽裕,则需要调整该结点、右(或左)兄弟结点及其双亲结点(⽗⼦换位法)

这里删除了38需要将49部位下来满足最低m-1向上取整减一个个元素此处需要最低2个元素。

49落下来以后第二层元素也就少了一个也不满足此时就需要从孩子节点选一个后继来不即右下结点的第一个元素也就是70

说⽩了,当右兄弟很宽裕时,⽤当前结点的后继、后继的后继 来填补空缺

接下来删除90这里是针对于左孩子宽裕的情况。

当左兄弟很宽裕时,⽤当前结点的前驱、前驱的前驱 来填补空缺

直接前驱是左子树的最右下角元素

直接后继是右子树的最左下角元素

兄弟不够借。

对于兄弟不够借就涉及到了一个问题就是合并的问题,这里需要注意一下B树的另外一个性质就是树高相同。

若被删除关键字所在结点删除前的关键字个数低于下限,且此时与该结点相邻的左、右兄弟结点的关键字个数均=⌈m/2⌉ − 1,则将关键字删除后与左(或右)兄弟结点及双亲结点中的关键字进⾏合并

接下来删除49

删除49以后最下面一层不够元素(m/2向上取整减一个元素)

注意一下这里的动态过程25 70 71 72需要先合并成一个元素

然后第二层就只剩下了73也不符合且没有借的地方,此时就需要再一次的合并,合并73 80 87 93

就是这样的

为什么这里合并25 70 71 72后不向74 75 76借元素呢?

因为只能同借元素,你现在如果要向 74 75 76借元素的话就是跑向下层借了这是不允许的。所以只能再次向上层元素合并了。

这些就是B树的删除操作,最麻烦的就是不够借的情况,记住不够借就合并一定不可以向下面的元素借。

接下来介绍一下B+树

B+树

⼀棵m阶的B+树需满⾜下列条件:
1)每个分⽀结点最多有m棵⼦树(孩⼦结点)。
2)⾮叶根结点⾄少有两棵⼦树,其他每个分⽀结点⾄少有 棵⼦树。
3)结点的⼦树个数与关键字个数相等。
4)所有叶结点包含全部关键字及指向相应记录的指针,叶结点中将关键字按⼤⼩顺序排列,并且相邻叶结点按⼤⼩顺序相互链接起来。
5)所有分⽀结点中仅包含它的各个⼦结点中关键字的最⼤值及指向其⼦结点的指针。(联系一下索引的概念)

其实简述一下就是一颗B树但是终端节点下面连接的是一条条记录同时,所有元素都存在于总端,允许非终端节点存在终端元素值,且分支节点包含子节点的最大值及其指针。

允许按照链表来查找也支持索引查找

索引查找其实揉合了B树查找和索引的方法。

B+树的查找一定要到终端节点里面去,而B树就可以停在半路。这是由于B树不允许节点中关键字重复。

接下来对比一下

因为B+树是直接连接子树,而B树是通过区域链接这就导致了B树多一个

因为B+树是直接连接子树,而B树是通过区域链接这就导致了B树多一个,如果B树不减一的话就会不满足定义会变成M+1叉B树

!!!!!!!!!!!!!最后声明一下B树以及B+树的内容看到不懂得情况可以战略性放弃。

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

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

相关文章

【版本控制】Perforce Helix Core (P4V) 完全入门指南(含虚幻引擎实战)

目录引言第一章&#xff1a;认识 Perforce Helix Core1.1 什么是 Perforce&#xff1f;1.2 P4V 是什么&#xff1f;1.3 核心概念速览1.4 为什么选择 Perforce&#xff1f;1.5 与 Git 的核心区别本章总结第二章&#xff1a;安装与配置2.1 安装原则&#xff1a;先服务端后客户端2…

LlamaFactory/unsloth Demo

内部叫Tuning-Factory 参数文档https://llamafactory.readthedocs.io/zh-cn/latest/index.html 高级技巧&#xff0c;如加速&#xff1a;https://llamafactory.readthedocs.io/zh-cn/latest/advanced/acceleration.html 0.环境 conda env list conda remove --name llm --all c…

水务工程中自动化应用:EtherNet/IP转PROFIBUS DP连接超声波流量计

在水务工程领域&#xff0c;自动化技术的应用愈发广泛。随着工业4.0概念的普及&#xff0c;不同通信协议的设备之间实现高效互联互通变得尤为关键。EtherNet/IP和PROFIBUS DP作为两种常见的工业通信协议&#xff0c;各有优势&#xff0c;在实际应用中&#xff0c;常需要将它们进…

网络协议和基础通信原理

网络协议和基础通信原理是理解互联网和各种网络应用的关键。让我用通俗易懂的方式&#xff0c;带你逐一深入讲解这些内容。 一、基础概念总览 TCP/IP协议族&#xff1a;互联网通信的基础&#xff0c;由一组协议组成&#xff0c;包括TCP、IP、UDP等。HTTP协议&#xff1a;基于T…

T16IZ遥控器教程__遥控器与无人机对频

文章目录前言一、准备设备二、对频步骤总结前言 在使用自组PX4无人机时&#xff0c;有的小伙伴可能会遇到遥控器无法与无人机对频连接的问题&#xff0c;别担心&#xff0c;这篇文章会解决它。 一、准备设备 如下图&#xff0c;无人机信号接收器&#xff0c;与无人机。 遥控器…

pyspark中map算子和flatmap算子

在 PySpark 中&#xff0c;map 和 flatMap 是两个常用的转换算子&#xff0c;它们都用于对 RDD&#xff08;弹性分布式数据集&#xff09;或 DataFrame 中的元素进行处理&#xff0c;但处理方式和应用场景有所不同。下面详细讲解它们的用法和适用场景。1. map 算子功能对 RDD 或…

jenkins部署前端vue项目使用Docker+Jenkinsfile方式

文章目录前言一、前提准备二、准备构建文件三、Jenkins中构建项目总结前言 前面通过jenkinsdocker的方式部署了若依前端vue项目&#xff0c;接下来接着学习使用Jenkinsfile的方式部署前端vue项目。 一、前提准备 已经安装好centos服务器&#xff0c;并且安装了jenkins和docke…

Cadence操作说明

一.allegro修改丝印字体大小的方法 1.选择Edit–>Change&#xff0c;右侧弹出Options选项&#xff0c;选择Class : New subclass Ref Des : Silkscreen_Top&#xff0c;设置Text block&#xff0c;后面的数字代表字号的大小。菜单菜单栏选择Setup–>Design Parameters&a…

使用Stitch来生成CrypyTrack的app程序

结果&#xff1a; &#x1f9ed; 第一步&#xff1a;访问 Stitch 平台 打开网址&#xff1a;stitch.withgoogle.com使用你的 Google 账号登录&#xff0c;无需安装任何软件 &#x1f9f1; 第二步&#xff1a;选择设计模式 Stitch 提供两种模式&#xff1a; 标准模式&#xf…

告别繁琐:API全生命周期管理的新范式——apiSQL

API&#xff08;应用程序接口&#xff09;是连接数据与服务的生命线&#xff0c;是数字世界的基石。然而&#xff0c;一个高质量API的诞生并非易事&#xff0c;它涉及一个漫长而复杂的全生命周期——从规划设计到最终退役&#xff0c;每个环节都需要专门的工具和技能&#xff0…

R 语言科研绘图第 64 期 --- 哑铃图

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式&#xff1a; R 语言科研绘图模板 --- sciRplothttps://mp.…

基于MaxCompute MaxFrame 汽车自动驾驶数据预处理最佳实践

一、背景及挑战在汽车自动驾驶场景中&#xff0c;车端&#xff08;量产车、研采车&#xff09;持续产生并采集海量数据&#xff0c;包括图片、音视频、雷达、GPS等内容&#xff0c;这些数据通常以 ROSbag文件形式进行存储。行业需求&#xff1a;自动驾驶依赖海量多模态数据&…

NLP:RNN文本生成案例分享

本文目录&#xff1a;一、导入工具包二、数据集三、 构建词表四、 构建数据集对象五、 构建网络模型六、 构建训练函数七、构建预测函数前言&#xff1a;上篇文章讲解了RNN&#xff0c;这篇文章分享文本生成任务案例&#xff1a;文本生成是一种常见的自然语言处理任务&#xff…

AI时代的接口自动化优化实践:如何突破Postman的局限性

编者语&#xff1a;本文作者为某非银金融测试团队负责人。其团队自 2024 年起局部试用 Apipost&#xff0c;目前已在全团队正式投入使用 。在推进微服务 API 自动化测试的过程中&#xff0c;研发和测试人员常常需要在接口请求中动态构造带有特定业务规则的数据。我们团队就遇到…

动态规划题解_将一个数字表示成幂的和的方案数【LeetCode】

2787. 将一个数字表示成幂的和的方案数 给你两个正整数 n 和 x 。 请你返回将 n 表示成一些 互不相同 正整数的 x 次幂之和的方案数。换句话说&#xff0c;你需要返回互不相同整数 [n1, n2, ..., nk] 的集合数目&#xff0c;满足 n n1x n2x ... nkx 。 由于答案可能非常…

C#常用的LinQ方法

LINQ&#xff08;Language Integrated Query&#xff09;是 .NET 中用于处理集合的强大工具&#xff0c;它提供了多种方法来简化数据查询和操作。以下是一些常用的 LINQ 方法及其功能&#xff1a;Where: 根据指定的条件筛选集合中的元素。var filteredResults matchResults.Wh…

目标检测之数据增强

数据翻转&#xff0c;需要把bbox相应的坐标值也进行交换代码&#xff1a;import random from torchvision.transforms import functional as Fclass Compose(object):"""组合多个transform函数"""def __init__(self, transforms):self.transform…

DiffDet4SAR——首次将扩散模型用于SAR图像目标检测,来自2024 GRSL(ESI高被引1%论文)

一. 论文摘要 合成孔径雷达&#xff08;SAR&#xff09;图像中的飞机目标检测是一项具有挑战性的任务&#xff0c;由于离散的散射点和严重的背景杂波干扰。目前&#xff0c;基于卷积或基于变换的方法不能充分解决这些问题。 本文首次探讨了SAR图像飞机目标检测的扩散模型&#…

html案例:编写一个用于发布CSDN文章时,生成有关缩略图

CSDN博客文章缩略图生成器起因&#xff1a;之前注意到CSDN可以随机选取文章缩略图&#xff0c;但后来这个功能似乎取消了。于是我想调整一下缩略图的配色方案。html制作界面 界面分上下两块区域&#xff0c;上面是参数配置&#xff0c;下面是效果预览图。参数配置&#xff1a; …

lightgbm算法学习

主要组件 Boosting #mermaid-svg-1fiqPsJfErv6AV82 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-1fiqPsJfErv6AV82 .error-icon{fill:#552222;}#mermaid-svg-1fiqPsJfErv6AV82 .error-text{fill:#552222;stroke:#…