当前位置: 首页 > news >正文

数据结构学习笔记——查找算法中的树形查找(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+树高。

相关文章:

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

目录 前言一、B树&#xff08;一&#xff09;B树的概念&#xff08;二&#xff09;B树的性质&#xff08;三&#xff09;B树的高度&#xff08;四&#xff09;B树的查找&#xff08;五&#xff09;B树的插入&#xff08;六&#xff09;B树的删除 二、B树&#xff08;一&#xf…...

python包chromadb安装失败总结

1&#xff0c;背景&#xff1a; 最近在学习langchain的课程&#xff0c;里面创建自己的知识库的Retrieval模块中&#xff0c;需要用到向量数据库。 所以按照官方的教程&#xff08;vectorstores&#xff09;&#xff0c;准备使用chroma的向量数据库。图片来源 2&#xff0c;问…...

机器学习(四) -- 模型评估(2)

系列文章目录 机器学习&#xff08;一&#xff09; -- 概述 机器学习&#xff08;二&#xff09; -- 数据预处理&#xff08;1-3&#xff09; 机器学习&#xff08;三&#xff09; -- 特征工程&#xff08;1-2&#xff09; 机器学习&#xff08;四&#xff09; -- 模型评估…...

泊松分布与二项分布的可加性

泊松分布与二项分布的可加性 泊松分布的可加性 例 : 设 X , Y X,Y X,Y 相互独立 , X ∼ P ( λ 1 ) X\sim P(\lambda_1) X∼P(λ1​) , Y ∼ P ( λ 2 ) Y\sim P(\lambda_2) Y∼P(λ2​) , 求证 Z X Y ZXY ZXY 服从参数为 λ 1 λ 2 \lambda_1 \lambda_2 λ1​λ2​ …...

【PostgreSQL】约束-排他约束

【PostgreSQL】约束链接 检查 唯一 主键 外键 排他 排他约束 排他约束是一种数据库约束&#xff0c;用于确保某一列或多个列中的值在每一条记录中都是唯一的。这意味着任何两条记录都不能具有相同的值。 排他约束可以在数据库中创建唯一索引或唯一约束来实现。当尝试插入或更…...

Java重修第一天—学习数组

1. 认识数组 建议1.5倍速学习&#xff0c;并且关闭弹幕。 数组的定义&#xff1a;数组是一个容器&#xff0c;用来存储一批同种类型的数据。 下述图&#xff1a;是生成数字数组和字符串数组。 为什么有了变量还需要定义数组呢&#xff1f;为了解决在某些场景下&#xff0c;变…...

【C#】知识点实践序列之Lock的锁定代码块

大家好&#xff0c;我是全栈小5&#xff0c;欢迎来到《小5讲堂之知识点实践序列》文章。 2024年第1篇文章&#xff0c;此篇文章是C#知识点实践序列之Lock知识点&#xff0c;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 本篇验证Lock锁定代…...

StringBad ditto (motto)

第12章 类和动态内存分配 StringBad ditto (motto): // calls StringBad (comst StringBad &) StringBad metoo - motto: // calls StringBad (const StringBad &) StringBad also StringBad (motto): // calls StringBad (const StringBad &) StringBad * pStri…...

Redis缓存击穿、缓存雪崩、缓存穿透

缓存击穿&#xff08;某个热点key缓存失效&#xff09; 概念 缓存中没有但数据库中有的数据&#xff0c;假如是热点数据&#xff0c;那key在缓存过期的一刻&#xff0c;同时有大量的请求&#xff0c;这些请求都会击穿到DB&#xff0c;造成瞬时DB请求量大、压力增大和缓存雪崩的…...

【PCB专题】Allegro封装更新焊盘

在PCB封装的绘制中&#xff0c;有时会出现需要更新焊盘的情况。比如在制作封装的过程中发现焊盘做的不对而使用PAD_Designer重新更新了焊盘。 那在PCB中如何更新已经修改过的焊盘呢&#xff1f; 打开封装&#xff0c;选择Tools->Padstack->Refresh... 选择Refresh all …...

ES6之Reflect详解

✨ 专栏介绍 在现代Web开发中&#xff0c;JavaScript已经成为了不可或缺的一部分。它不仅可以为网页增加交互性和动态性&#xff0c;还可以在后端开发中使用Node.js构建高效的服务器端应用程序。作为一种灵活且易学的脚本语言&#xff0c;JavaScript具有广泛的应用场景&#x…...

文件监控-IT安全管理软件

文件监控和IT安全管理软件是用于保护企业数据和网络安全的工具。这些工具可以帮助企业监控文件的变化&#xff0c;防止未经授权的访问和修改&#xff0c;并确保数据的安全性和完整性。 一、具有哪些功能 文件监控软件可以实时监控文件系统的活动&#xff0c;包括文件的创建、修…...

达梦数据库安装超详细教程(小白篇)

文章目录 达梦数据库一、达梦数据库简介二、达梦数据库下载三、达梦数据库安装1. 解压2. 安装 四、初始化数据库五、DM管理工具 达梦数据库 一、达梦数据库简介 ​ 达梦数据库管理系统是达梦公司推出的具有完全自主知识产权的高性能数据库管理系统&#xff0c;简称DM。 达梦数…...

复试 || 就业day09(2024.01.04)算法篇

文章目录 前言验证外星语词典在长度 2N 的数组中找出重复 N 次的元素找到小镇的法官查找共用字符数组的相对排序分发饼干分发糖果区间选点(AcWing)最大不相交区间数量(AcWing)无重叠区间关于重写小于号 前言 &#x1f4ab;你好&#xff0c;我是辰chen&#xff0c;本文旨在准备考…...

Win10电脑关闭OneDrive自动同步的方法

在Win10电脑操作过程中&#xff0c;用户想要关闭OneDrive的自动同步功能&#xff0c;但不知道具体要怎么操作&#xff1f;首先用户需要打开OneDrive&#xff0c;然后点击关闭默认情况下将文档保存到OneDrive选项保存&#xff0c;最后关闭在这台电脑上同步设置保存就好了。接下来…...

linux(centos)相关

文件架构&#xff1a; bin--binary--二进制命令&#xff0c;可直接执行 sbin systembin系统二进制命令&#xff0c;超级管理员 lib 库目录 类似dll文件 lib64 64位系统相关的库文件 usr 用户文件 boot 引导分区的文件&#xff0c;链接&#xff0c;系统启动等 dev device设备目录…...

外贸网站显示不安全警告怎么办?消除网站不安全警告超全指南

外贸网站显示不安全警告怎么办&#xff1f;当用户访问你的网站&#xff0c;而您的网站没有部署SSL证书实现HTTPS加密时&#xff0c;网站就会显示不安全警告&#xff0c;这种警告&#xff0c;不仅有可能阻止用户继续浏览网站&#xff0c;影响网站声誉&#xff0c;还有可能影响网…...

Java:HeapMemory和DirectMemory配置与使用介绍

目录 一、Heap内存 1、查看Heap内存配置的最大值 2、配置Heap内存最大值的方式 3、配置Heap内存最小值的方式 4、查看已使用Heap内存的方式 5、查看未使用Heap内存的方式 二、Direct内存 1、查看Direct内存配置的最大值 2、配置Direct内存最大值的方式 3、获取Direct…...

记 -bash: docker-compose: command not found 的问题解决

docker-compose: command not found 错误表明系统无法找到 docker-compose 命令。这可能是因为 docker-compose 并未正确安装&#xff0c;或者其可执行文件的路径未包含在系统的 PATH 变量中。 以下是我遇到时解决方法&#xff1a; 确保 Docker 和 Docker Compose 已安装&…...

分享10篇优秀论文,涉及图神经网络、大模型优化、表格分析

引言 第38届AAAI人工智能年度会议将于2024年2月在加拿大温哥华举行。今天给大家分享十篇AAAI2024论文&#xff0c;主要涉及图神经网络&#xff0c;大模型幻觉、中文书法文字生成、表格数据分析、KGs错误检测、多模态Prompt、思维图生成等。 论文获取方式&#xff0c;回复&am…...

Ubuntu 24.04 Preview 版安装 libtinfo5

Ubuntu 24.04 Preview 版安装 libtinfo5 0. 背景1. 安装 libtinfo52. 安装 cuda 0. 背景 Ubuntu 24.04 Preview 版安装 Cuda 时报确实 libtinfo5 的错误。 1. 安装 libtinfo5 wget http://archive.ubuntu.com/ubuntu/pool/universe/n/ncurses/libtinfo5_6.4-2_amd64.deb dpk…...

Spring AOP<一>简介与基础使用

spring AOP 基础定义 含义使用切面组织多个Advice,Advice放在切面中定义。也就是说是定义通知的自定义类。自定义的AOP类Aspect连接点方法调用&#xff0c;异常抛出可以增强的点JoinPoint &#xff1a;也就是**被增强的方法的总称&#xff0c;可以获取具体方法的信息&#xff…...

react ant tree节点没有children也会显示展开框 节点有children却不显示展开框

1.背景 最近处理树状结构时遇到了一个诡异问题&#xff0c;后端返回了组织树&#xff0c;组织树里面可能有组织&#xff0c;也可能有用户&#xff0c;很奇怪的是所有用户都会显示展开图标&#xff0c;而组织有些会显示展开图标&#xff0c;有些不会显示 2.分析 一开始找到了用…...

【Linux】进程查看|fork函数|进程状态

&#x1f984; 个人主页——&#x1f390;开着拖拉机回家_Linux,大数据运维-CSDN博客 &#x1f390;✨&#x1f341; &#x1fa81;&#x1f341;&#x1fa81;&#x1f341;&#x1fa81;&#x1f341;&#x1fa81;&#x1f341; &#x1fa81;&#x1f341;&#x1fa81;&am…...

LeetCode第98题 - 有效的括号

题目 解答 方案一 class Solution {public boolean isValidBST(TreeNode root) {if (root null) {return true;}if (root.left null && root.right null) {return true;}if (root.left ! null && root.left.val > root.val) {return false;}if (root.…...

Nacos学习思维导图

一、服务注册 参考文档&#xff1a;http://www.bryh.cn/a/118936.html https://blog.csdn.net/Saintmm/article/details/121981184 二、服务续约 参考文档&#xff1a;http://www.bryh.cn/a/118936.html https://blog.csdn.net/Saintmm/article/details/121981184 三、服务…...

新视野英语课本复盘1

the triumpth of years of hard work 多年的辛勤付出的胜利 get by on very little sleep 靠很少的睡眠勉强维持生活或工作 pursue new passions 追求新的热爱之事 reap the benefits of this opportunity 收获这个机会带来的益处 you will not only emerge as a more broadly …...

Sentinel整合OpenFeign

1、配置文件 feign:sentinel:enabled: true 2、 编写一个工厂类 import com.cart.cartservice.client.ItemClient; import com.cart.cartservice.entity.Item; import lombok.extern.slf4j.Slf4j; import org.springframework.cloud.openfeign.FallbackFactory; import org.sp…...

PyTorch实战:基于Seq2seq模型处理机器翻译任务(模型预测)

文章目录 引言数据预处理加载字典对象en2id和zh2id文本分词 加载训练好的Seq2Seq模型模型预测完整代码结束语 引言 随着全球化的深入&#xff0c;翻译需求日益增长。传统的人工翻译方式虽然质量高&#xff0c;但效率低&#xff0c;成本高。机器翻译的出现&#xff0c;为解决这…...

stm32学习总结:5、Proteus8+STM32CubeMX+MDK仿真串口并使用串口打印日志(注意重定向printf到串口打印的问题)

stm32学习总结&#xff1a;5、Proteus8STM32CubeMXMDK仿真串口并使用串口打印日志&#xff08;注意重定向printf到串口打印的问题&#xff09; 文章目录 stm32学习总结&#xff1a;5、Proteus8STM32CubeMXMDK仿真串口并使用串口打印日志&#xff08;注意重定向printf到串口打印…...

建公司网站步骤/天津网络推广公司

往期精彩回顾前言 基于上一期的理论知识&#xff0c;我们本期跟大家分享一下如何通过Python和R语言完成Logistic回归分类器的构建。大家都知道&#xff0c;Logistic模型主要是用来解决二元分类问题&#xff0c;通过构建分类器&#xff0c;计算每一个样本为目标分类的概率&#…...

苏州服务器托管哪家好/站长工具的使用seo综合查询排名

01 下载 macOS 系统安装程序的方法 本文来自: https://discussionschinese.apple.com/docs/DOC-250004259 简介 Mac 用户时不时会需要下载 macOS 的安装程序&#xff0c;目的不同&#xff0c;或者升级或者降级&#xff0c;或者研究或者收藏。为了方便不同用户&#xff0c;除…...

网站建设需要些什么东西/seo工具在线访问

javascript浏览器Ajax请求在现代网站中大量使用。 除了使用执行Ajax请求的内置方法之外&#xff0c;还使用XMLHttpRequest实例&#xff0c;许多开发人员还使用jQuery的方法来执行相同的任务。 在本文中&#xff0c;我们将介绍两个替代库&#xff0c;它们使您可以实现相同的目标…...

wordpress文件管理器/seo怎么发外链的

前言&#xff1a;你对手机存储到底了解多少&#xff1f;从安卓4.4以后在外置内存卡中有没有存储过东西。先上两张图片。第一张图片是酷我音乐下载设置的选项&#xff1a;酷我下载截图第二张是网易云音乐下载设置的选项&#xff1a;网易云下载截图从上面两张图可以看到外置卡的名…...

杭州网站建设开发有限公司/搜索引擎是网站吗

参考http://www.cnblogs.com/showson/p/5602460.html 一样的解法&#xff0c;注意到在后面添加/删除与树形结构的互相转换。 【code】 http://uoj.ac/submission/77367转载于:https://www.cnblogs.com/showson/p/5602502.html...

wordpress基础模板/如何制作一个网址

图数据库作为新兴NoSQL数据库的代表&#xff0c;可以分为四种类型。图数据库应用广泛&#xff0c;无论是互联网行业还是传统的金融、地产、医疗等行业&#xff0c;都可以通过图数据库的应用进一步提升企业效率。数易轩致力于图数据库技术服务&#xff0c;为您介绍图数据库的四个…...