数据结构学习笔记——查找算法中的树形查找(B树、B+树)

目录

  • 前言
  • 一、B树
    • (一)B树的概念
    • (二)B树的性质
    • (三)B树的高度
    • (四)B树的查找
    • (五)B树的插入
    • (六)B树的删除
  • 二、B+树
    • (一)B+树的概念
    • (二)B+树的性质
    • (三)B+树的查找

前言

B树和B+树属于树形查找算法中的一种,主要用于数据库系统、文件系统和磁盘存取等方面,都是用于存储和索引大量的数据,以提高检索效率。例如,在磁盘存储中,通过将数据分散到多个磁盘块中,并使用树形结构来组织这些磁盘块,从而提高了查找速度和查找效率。若设B树中所有结点的孩子结点个数的最大值为m,则该B树是一棵m阶B树,另外B+树则是B树的变形。

一、B树

(一)B树的概念

二叉排序树也称为查找树(注意:与二分查找的判定树不同),其中各结点值的大小关系是:左子树<根结点<右子树,且左、右子树也是一棵二叉排序树满足其条件。

前面给过二叉查找树的定义,简单的来说,B树是二叉查找树的推广,即一棵m阶B树可看作一棵m叉查找树,但两者有些方面不同,如下:
1、结点与关键字不同:二叉查找树遵循二叉树的原则,每个结点最多只有两个孩子结点,且每个结点只包含一个关键字;而B树的每个结点最多有m个结点,即最多含有m-1个关键字。
2、平衡性:二叉查找树不一定是一棵平衡二叉树,查找过程中查找效率可能随着查找树的结构变化;而B树是一棵多路平衡查找树,通过限制结点的子树和关键字数量,使B树的高度保持相对稳定,从而提高查找效率。B树也正是在保持平衡的前提下能够更高效地处理大量数据,从而非常适合应用在需要高效存储和访问大量数据的场景中。

(二)B树的性质

B树中与二叉查找树相同的性质,二叉查找树各结点值的大小关系是:左子树<根结点<右子树,而B树中关键字的值的大小关系是:子树1<关键字1<子树2<关键字2<子树3…,一棵m阶B树中,除了根结点外所有结点中关键字个数为:⌈m/2⌉-1 ≤ n ≤ m-1。例如,一棵5阶B树中,除了根结点外所有结点中关键字的个数为2 ≤ n ≤ 4,即关键字个数最少为2,最多为4。
在这里插入图片描述
1、m阶B树中,根结点至多有m棵子树,若B树的根结点不是终端结点,则该B树至少有两棵子树。
2、B树中结点内关键字均以升序或降序排列。
3、B树是一棵多路平衡查找树,所有结点的平衡因子均为0。
4、m阶B树中,若根结点没有关键字,则B树无子树,B树为空;若有关键字,由于子树个数等于关键字个数加1,所以子树一定大于或等于两棵。
5、m阶B树中,根结点最少含1个关键字,而除根结点外,每个非叶子结点至少有⌈m/2⌉棵子树,且至少有⌈m/2⌉-1个关键字;由于最少情况下,根结点至少有一个关键字,所以B树中所有结点包括的关键字个数至少为(n-1)(⌈m/2⌉-1)+1个。
6、结点的孩子结点的个数等于该结点关键字的个数加1,即具有n个关键字的m阶B树,应有n+1个叶结点。另外,B树中所有的叶子结点均在一层上,且不带任何信息,这一点与二分查找判定树中查找失败的结点类似,实际上这些叶子结点不存在,代表查找失败的情况,如下:
在这里插入图片描述

(三)B树的高度

在求B树的高度时,不计入叶子结点,若设m阶B树中包括n(n≥1)个关键字,其高度为h,可得到B树的最小高度和最大高度范围区间:logm(n+1) ≤ h ≤ log⌈m/2⌉[(n+1)/2]+1。

⌈ ⌉表示向上取整,取比自己大的最小整数,⌊ ⌋表示向下取整,取比自己小的最大整数。

(四)B树的查找

B树的查找类似二叉查找,首先在B树中查找结点,然后在结点所包含的关键字K1,…,Kn中查找给定的关键字,可通过顺序查找二分查找进行查找,若找到等于给定值的关键字,则查找成功;否则,继续查找,直至找到或指针为空时,此时查找失败,即查找到B树的叶子结点时失败。

(五)B树的插入

B树的插入操作不仅需要找到要插入的位置(定位),而且需判断插入后是否会导致不满足B树的定义,由于B树中查找成功结点的关键字个数在 ⌈m/2⌉-1 ≤ n ≤ m-1间,如下:
1、第一种情况:若插入后结点的关键字个数小于m,则直接插入。
在这里插入图片描述
2、第二种情况:若插入后结点的关键字个数大于m-1,则需要进行调整,从关键字中间位置⌈m/2⌉处将关键字分为两部分,左半部分放在原结点中,右半部分放在新的相邻右边结点中,中间关键字元素⌈m/2⌉上移到原结点的父结点中,另外,若父结点的空间也不够,则继续按照以上方式进行调整。
在这里插入图片描述

(六)B树的删除

B树的删除分两种情况,如下:
1、第一种情况
若要删除的关键字在终端结点中时:
(1)若要删除的关键字所在结点的关键字个数大于或等于⌈m/2⌉时,即关键字删除后结点仍满足相应的关键字个数,则可直接删去。
(2)若要删除的关键字当前所在结点的关键字个数等于⌈m/2⌉-1时,且左/右兄弟很充裕时,即其关键字个数大于或等于⌈m/2⌉时,需要进行调整(向兄弟借),用当前结点的前驱/后继、前驱的前驱/后继的后继代替,从而满足B树的定义。
在这里插入图片描述
(3)若要删除的关键字当前所在结点的关键字个数等于⌈m/2⌉-1时,且左/右兄弟不是很充裕时,即其关键字个数只等于⌈m/2⌉-1时,则将关键字删除后需要进行合并,即与当前结点的兄弟结点以及双亲结点中的关键字合并。
在这里插入图片描述
2、第二种情况
若要删除的关键字不在终端结点中时,用该关键字的直接前驱或直接后继代替,转换成第一种情况,再进行删除。
在这里插入图片描述
在这里插入图片描述

二、B+树

(一)B+树的概念

B+树可以由分块查找推广,所以也称为多级分块查找,即m阶B+树,它是B树的变形,与B树相同,B树和B+树都是平衡的多叉树,都用在文件索引结构和数据库索引中,但B+树更加适用。B树的结点包含关键字对应记录的存储地址,且B树中的叶子结点不带信息,而B+树的叶子结点带信息,而其中其他的非叶子结点只是作索引作用。

(二)B+树的性质

B+树中,n个关键字对应n棵子树,即每个关键字对应一棵子树,且子树的个数与结点的关键字个数相等,每个分支结点至少有 ⌈m/2⌉棵子树。
在这里插入图片描述
B树与B+树中结点的关键字个数对比如下表:

名称B树B+树
根结点关键字个数1 ≤ n ≤ m-12 ≤ n ≤ m
非根结点关键字个数⌈m/2⌉-1 ≤ n ≤ m-1⌈m/2⌉ ≤ n ≤ m

(三)B+树的查找

B树支持随机查找,而B+树支持顺序查找和随机查找。

B树不支持顺序查找的原因是查找时可能查找到树中的任何一层,所以其查找速度和稳定性没有B+树高。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/293821.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

科技助力教育:数字化如何改变家校社协同育人?

近年来,随着社会的快速发展,教育的责任已不再仅局限于学校。家庭、学校和社会协同育人理念,正成为促进教育高质量发展的关键要素。 2023年初,教育部等十三部门联合印发《关于健全学校家庭社会协同育人机制的意见》,提出到“十四五”时期末,形成更加完善的由“学校积极主导、家…

Excel如何将单元格设为文本

文章目录 一、打开excel文件二、选中单元格三、右键设置单元格格式四、设置界面选择文本后点确定五、其他问题 在caa开发过程中遇到从CATUnicodeString转成CString时&#xff0c;通过SetItemText写入将ID号写入单元格&#xff0c;无法保存ID号中的数字0&#xff0c;故将单元格格…

统信UOS_麒麟KYLINOS修改图标显示名称

原文链接&#xff1a;统信UOS/麒麟KYLINOS修改图标显示名称 hello&#xff0c;大家好啊&#xff01;今天我要给大家介绍的是在统信UOS及麒麟KYLINOS操作系统上如何修改软件的名称。这种自定义可以帮助您更快地识别和访问常用的应用程序&#xff0c;也可以使您的桌面环境更加个性…

【MATLAB】CEEMD_LSTM神经网络时序预测算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 CEEMD-LSTM神经网络时序预测算法是一种结合了完全扩展经验模态分解&#xff08;CEEMD&#xff09;和长短期记忆神经网络&#xff08;LSTM&#xff09;的时间序列预测方法。 CEEMD是一种改…

基于MyCat2.0实现MySQL分库分表方案

目录 一、MyCat概述 二、MyCat作用 2.1 数据分片 2.1.1 垂直拆分 2.1.1.1 垂直分库 2.1.1.2 垂直分表 2.1.1.3 总结 2.1.2 水平拆分 2.1.2.1 水平分库 2.1.2.2 水平分表 2.1.2.3 总结 2.2 读写分离 2.3 多数据源整合 三、MyCat 与ShardingJDBC的区别 3.1 MyCat …

易基因:ChIP-seq等揭示Runx2通过转录调控Itgav表达激活肝星状细胞以促进肝纤维化|科研进展

这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 肌成纤维细胞&#xff08;myofibroblasts&#xff09;主要由肝脏中活化的肝星状细胞(hepatic stellate cells HSC)组成&#xff0c;在肝纤维化进展中发挥着核心作用。由于肌成纤维细胞主要负责细胞外基质蛋…

代码随想录刷题第三十六天| 435. 无重叠区间 ● 763.划分字母区间 ● 56. 合并区间

代码随想录刷题第三十六天 无重叠区间 (LC 435) 题目思路&#xff1a; 代码实现&#xff1a; class Solution:def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:intervals.sort(keylambda x: (x[0],x[1]))count 0right intervals[0][1]for i in ra…

拼题A 跨年挑战赛 2024 赛后提交入口 + 题目 + 题解

赛后也想提交&#xff1f;点击进入 拼题A教育超市 周三&#xff0c;搞学长&#xff1a;“小柳进前十了&#xff01;想要奖品过来拿&#xff01;” 等了好几天的比赛结果终于出来了&#xff0c;四年来的跨年挑战赛第一次做满分&#xff0c;第一次进前十&#xff01;&#xff0…

MyBatis学习二:Mapper代理开发、配置文件完成增删改查、注解开发

前言 公司要求没办法&#xff0c;前端也要了解一下后端知识&#xff0c;这里记录一下自己的学习 学习教程&#xff1a;黑马mybatis教程全套视频教程&#xff0c;2天Mybatis框架从入门到精通 文档&#xff1a; https://mybatis.net.cn/index.html Mapper代理开发 目的 解决…

【nginx】linux(centos版本)安装nginx

目录 一、下载安装包1.1 官网下载1.2 linux命令下载 二、安装2.1 安装依赖包2.2 安装nginx 三、启动四、访问五、关停六、重载配置 一、下载安装包 1.1 官网下载 1.官网地址 https://nginx.org/en/download.html2.版本说明 1.Mainline version-主线版本 2.Stable version-稳…

剪映业务的大前端实践:创新以用户需求为导向

近日&#xff0c;由51CTO主办的WOT全球技术创新大会2023深圳站成功举办&#xff0c;众多企业CTO、技术团队负责人在会场分享了优秀的技术实践。其中&#xff0c;剪映前端开发工程师赵培霏分享了主题为《剪映业务的大前端实践》的演讲。 近日&#xff0c;由51CTO主办的WOT全球技…

如何给6000微信好友打好标签? 快速操作技巧!

微信好友一多&#xff0c;管理起来就变得麻烦。要管理好好友&#xff0c;就必须要给好友打好标签。今天分享一个快速给微信好友打标签的方法。 一、微信电脑端给好友打标签的操作方法&#xff1a; 桌面端打标签速度是很快的&#xff0c;不仅仅是好操作&#xff0c;而且搜索功能…

Spark调优解析-GC调优3(七)

1 GC调优 Spark立足内存计算&#xff0c;常常需要在内存中存放大量数据&#xff0c;因此也更依赖JVM的垃圾回收机制。与此同时&#xff0c;它也兼容批处理和流式处理&#xff0c;对于程序吞吐量和延迟都有较高要求&#xff0c;因此GC参数的调优在Spark应用实践中显得尤为重要。…

2023 IoTDB Summit:清华大学软件学院长聘副教授龙明盛《IoTDB 新组件:内生机器学习》...

12 月 3 日&#xff0c;2023 IoTDB 用户大会在北京成功举行&#xff0c;收获强烈反响。本次峰会汇集了超 20 位大咖嘉宾带来工业互联网行业、技术、应用方向的精彩议题&#xff0c;多位学术泰斗、企业代表、开发者&#xff0c;深度分享了工业物联网时序数据库 IoTDB 的技术创新…

Starknet 开发实战训练营邀你挑战,1000 美元大奖等你赢取!

Starknet 免费公开课来啦&#xff01;&#x1f680; ZK L2 明星项目 Starknet 不久前透露其 STRK 空投计划引发了诸多关注&#xff0c;而全链游戏同样是今年 Web3 行业的热门领域之一&#xff0c;Starknet 便是全链游戏领域中的重要生态&#xff0c;开发者借助其链上游戏引擎 D…

【驱动序列】C#获取电脑硬件基本组合以及基础信息

大家好&#xff0c;我是全栈小5&#xff0c;欢迎阅读《小5讲堂之知识点实践序列》文章。 这是2024年第7篇文章&#xff0c;此篇文章是C#知识点实践序列文章&#xff0c;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 要开发一款驱动小助手&…

Linux内存管理:(六)页交换算法

文章说明&#xff1a; Linux内核版本&#xff1a;5.0 架构&#xff1a;ARM64 参考资料及图片来源&#xff1a;《奔跑吧Linux内核》 Linux 5.0内核源码注释仓库地址&#xff1a; zhangzihengya/LinuxSourceCode_v5.0_study (github.com) 1. 引言 在Linux操作系统中&#x…

企业数据治理的三个阶段:从起步到成熟的数据管理之旅

随着数字化时代的到来&#xff0c;企业数据已经成为企业的重要资产和驱动业务发展的重要力量。然而&#xff0c;要想充分利用数据的价值&#xff0c;企业需要对其数据进行有效的管理和治理。本文将对企业数据治理的三个阶段进行详细的探讨&#xff0c;以帮助企业了解其在数据治…

Zookeeper(持续更新)

VIP-01 Zookeeper特性与节点数据类型详解 文章目录 VIP-01 Zookeeper特性与节点数据类型详解正文1. 什么是Zookeeper&#xff1f;2. Zookeeper 核心概念2.1、 文件系统数据结构2.2、监听通知机制2.3、Zookeeper 经典的应用场景3.2. 使用命令行操作zookeeper 正文 什么是Zookee…

新品发布 | 思腾合力深思系列IW2235-2GR GPU服务器

思腾合力深思系列 IW2235-2GR GPU服务器支持第四代英特尔至强可扩展处理器&#xff0c;采用全新微架构内核&#xff0c;支持最高的350W型号&#xff0c;计算性能强劲&#xff1b;支持32个DDR5内存&#xff0c;频率最高可达4800MHz&#xff0c;内存带宽相比上一代提升50%&#x…