7.4.2B+树

B+树:

(1)每个分支节点最多有m个子树(孩子节点)。

阶:即看当前的B+树是几阶B+树,就看每个分支节点最多有几个子树,还是看最下一层有几个分叉就是几阶???

叶子节点:最下边的一层叫叶子节点(不是跟B树一样的失败节点)

非叶根节点:当前的B+树中根节点下边还有子节点,即根节点不是最下边的一层节点(叶子节点),则当前的根节点叫非叶子节点的根节点,即非叶根节点。

叶根节点:当前的B+树只有一层,即只有一层根节点,根节点下边再没有子树节点,则当前的根节点也是叶子节点(如图2中的左一)

(2)非叶根节点至少有2棵子树,其他每个分支节点至少有m/2向上取整个子树,前者是为了让B+树尽可能的低,使查找效率高一点,所以要保持绝对平衡,即假如当前的根节点是非叶根节点,它如果有左子树,则它必定有右子树,否则不满足B+树要求(如图2中的中间的图),后者是为了让B+树的每个节点上的关键字尽可能的多,也是为了保证B+树的高度没那么高,提高查找效率

(3)节点的子树个数与关键字的个数相等。即一个节点上有几个关键字,则它就有几个分叉,即就有几个子树,如(3,9,15)节点上有3个关键字,则它就有3个分叉,即3个子树,(1,3)(6,8,9)(13,15)。注意与B树区分,B树上一个节点上有2个关键字它得有3个分叉,即3个子树

(4)叶节点包含以上成所有的关键字+指向相应记录的指针,叶节点中的关键字按大小顺序排列,相邻叶节点按大小顺序相互链接起来,即叶节点那一层支持横向顺序查找。每个关键字对应了一个指向详细记录的指针(如叶节点的关键字是一个个学号,学号连接着每个学生的具体信息,即学号连接着记录)

(5)跟分块查找的索引表类似,所有分支节点上的各个关键字都只包含了关键字指向子节点上的所有关键字的最大值。比如(3,9,15)中的3就是它的子节点(1,3)中关键字最大值,9是子节点(6,8,9)中的最大值,15是子节点(13,15)的最大值

对比分块查找:

B+树的查找:

查找成功目标元素9(实际查找的是9所指的记录): 从根节点开始找,第一个关键字15是它所有的子节点(所有的子节点指的是它的整个左子树节点,包括子节点和孙子节点等待)中最大的关键字的值,15>9则如果目标元素存在,则它只能在15所指向的分块中,让指针指向下一级节点3,3是它所指的分块中最大的关键字,3<9则9肯定不在3所指的分块里,让指针右移指向9,9==9,则在9所指的分块里,让指针下移,从左往右开始比较叶子节点,直到找到9==9,则9关键字所保存指针信息就可以找到9号元素的详细记录信息,进而读出相应记录

查找失败目标元素7(实际查找的是7所指的记录): 从根节点开始找,15>7则如果目标元素存在,则它只能在15所指向的分块中,让指针指向下一级节点3,3<7则7肯定不在3所指的分块中,让指针右移9,7<9则如果7存在7一定在9所指的分块中,让指针下移指向(6,8,9)节点,从左往右开始比较叶子节点,6<7指针右移,7<8,因为已经找的是最下一层的叶子节点了,如果没找到7证明7不存在,则查找失败

无论查找成功还是失败都要走到最下一层即叶子节点处才能确定到底是否查找成功,因为分支节点上的范围并不是实际的关键字,实际有哪些关键字其实是在叶子节点存放,但是B树查找不是,可能停留在任何一层就能知道 是否能查找成功了。

B+树VSB树:

m阶B树:

(1)节点中的n个关键字对应n+1个分叉,即n+1个子树

(2)B树中为了保证树不太高,节点上的关键字不太空,所以要求B树中的根节点的关键字个数不能少于1个,即根节点关键字个数范围(1,m-1)【根节点中最多的关键字个数和其他节点的关键字个数最多一样】,其他节点的分叉不能少于m/2向上取整,则关键字个数不能少于m/2向上取整-1个,对于m阶B树,则每个节点的最多分叉有m个,即最多的关键字个数有m-1个,即其他节点的关键字个数范围(m/2向上取整-1,m-1)

(3)在B树中,各个节点包含的关键字是不会重复出现的

(4)B树中的各个关键字也存储了实际关键字对应的记录存储地址,即不用找到叶子节点,只要找到了这个关键字就相当于找到了记录存储地址即记录信息,但是B+树不行,B+树一定要在叶子节点上找到了这个关键字,才能找到这个关键字的存储记录的地址,才能找到实际存放的数据信息

 

m阶B+树:

(1)节点中的n个关键字对应n个分叉,即n个子树

(2)B+树中为了保证树不太高,节点上的关键字不太空,所以要求B+树中的根节点的关键字个数不能少于1个,即根节点关键字个数范围(1,m)【根节点中最多的关键字个数和其他节点的关键字个数最多一样】,其他节点的分叉不能少于m/2,则关键字个数不能少于m/2向上取整个,对于m阶B+树,则每个节点的最多分叉有m个,即最多的关键字个数有m个,即其他节点关键字个数范围为(m/2,m)

(3)B+树叶子节点中包含全部的关键字,则某个关键字可能会在其他非叶子节点多次出现,如下图2中的15关键字在3处出现

(4)在B树中,所有非叶子节点仅起到索引查找作用,实际并不包含目标元素记录的存储地址,而只有找到叶子节点了,才能找到该关键字对应记录的存储记录,如学生信息,学生信息是记录,关键字是学号,一个学号对应一个学生记录。非叶子节点的每个索引项(指非叶子节点中的关键字)只包含了子树的最大关键字和指向该子树的指针

B+树中的各个节点存储在磁盘,操作系统对磁盘的读写一般是以一个磁盘块为单位,一般B+树的一个节点就会存储在某个磁盘块中,即B+树中所有的节点都是存储在不同的磁盘块里,因此从根节点开始查找,会先确定根节点到底在哪个磁盘块中,然后把根节点所在的磁盘块读入内存,即把(15,56)所在磁盘块读入内存,读入内存之后计算机就可以处理查询数据,就可以知道要去哪个分支去找,比如要找关键字42,在读入内存之后就知道要去56指向的分块去找,现在知道了56所指的分块存储在磁盘什么位置之后,就会把56所指的分块读入内存,即(35,42,56)读入内存后,九三级去查询分块内的数据,然后计算机发现42存储在42所指的分块中,然后通过内存中的信息就可以知道,42所指的叶子节点存储在磁盘的哪个位置,然后操作系统再把42所指的分块读入内存,读入内存之后就可以知道42这个关键字它所对应的记录到底存储在磁盘的哪个位置,然后再把记录读入内存。磁盘是一个慢速设备,每次要读取磁盘块数据都会花费大量时间,因此假如B+树高度越高就意味着在读取磁盘的过程中读取次数越多,导致查找速度更慢,如何降低B+树高度,即让B+树节点存储更多的关键字,即这也是为什么B+树上的非叶子节点不存储实际的记录地址了,这样能节省更多的空间来存储关键字,并且这些一个个节点是存储在每个磁盘块中,而每个磁盘块大小基本固定如1kb,而让每个磁盘块包含尽可能多的关键字的信息,当节点的空间大了则每个节点存储的关键字就多了,则磁盘上就包含了尽可能多的关键字信息了。。。。。。,即每个关键字不存储记录指针,会让关键字更多,即分叉更多,即B+树的高度越矮,即读取磁盘的次数减少,即效率更高。B树的一个关键字中还包含了记录的存储地址,这就意味着一个节点存储的关键字就会少,这也就意味着磁盘块中存储的节点上的关键字就会少,则B树会导致磁盘块读取次数增多,而磁盘块读取又耗时,则会降低效率

知识回顾:

 

好罗里吧嗦。。。。。。。。。。。。。。。。。。。。。 

 

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

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

相关文章

MFC获取本机所有IP、局域网所有IP、本机和局域网可连接IP

获取本机所有IP地址 // 获取本机所有IP地址 int CMachine::GetLocalIPs(std::vector<CString>& vIPValue) {//返回IP数量&#xff0c; -1表示获取失败vIPValue.clear();int IpNum 0;//1.初始化wsa WSADATA wsaData;int ret WSAStartup(MAKEWORD(2, 2), &wsaD…

【C语言】贪吃蛇小游戏

1. 所需知识 C语言函数、枚举、结构体、动态内存管理、预处理指令、链表、Win32 API... 2. Win32 API介绍 2.1 Win32 API windows这个多作业系统除了协调应用程序的执行、分配内存、管理资源之外&#xff0c;它同时也是一个很大的服务中心&#xff0c;调用这个服务中心的各种…

PostgreSQL 容器化分布式技术方案

&#x1f4cb; 目录 引言&#xff1a;为什么选择容器化PostgreSQLPostgreSQL容器化基础分布式架构设计高可用实现方案读写分离架构动态扩缩容策略生产环境实践总结与展望 引言&#xff1a;为什么选择容器化PostgreSQL 在数字化转型的浪潮中&#xff0c;数据库作为企业的"…

NV025NV033美光固态闪存NV038NV040

美光固态闪存技术突破与市场布局深度解析 一、技术突破&#xff1a;232层NAND闪存与高密度存储的革新 美光NV系列固态闪存的核心竞争力源于其232层NAND闪存技术&#xff0c;这一技术通过垂直堆叠工艺&#xff0c;将存储单元层层叠加&#xff0c;宛如在指甲盖面积内构建超过20…

Matplotlib 绘图库从入门到精通:Python 数据可视化全解析

引言 在数据科学的世界里&#xff0c;"一图胜千言" 这句话有着深刻的含义。数据可视化不仅是数据分析师展示成果的重要手段&#xff0c;更是数据科学家探索数据、发现规律的强大工具。Matplotlib 作为 Python 生态系统中最著名的数据可视化库&#xff0c;为我们提供…

北斗导航 | 基于CNN-LSTM-PSO算法的接收机自主完好性监测算法

接收机自主完好性监测 原理概述1. 算法架构2. 核心创新点3. 工作流程数学模型1. CNN特征提取2. LSTM时序建模3. PSO优化决策MATLAB完整代码算法优势性能对比应用场景扩展方向原理概述 1. 算法架构 #mermaid-svg-fITV6QrXL1fNYFwG {font-family:"trebuchet ms",verda…

【微信小程序】9、用户拒绝授权地理位置后再次请求授权

1、获取用户当前的地理位置 在本专栏的上一篇文章中讲了如何 获取用户当前的地理位置 首次请求 wx.getLocation API 后&#xff0c;会拉起用户授权界面 但这时用户可能会拒绝授权&#xff0c;当你再次请求 wx.getLocation API 后&#xff0c;没有任何效果。 2、打开设置 用…

嵌入式Linux驱动开发基础-1 hello驱动

1:APP打开的文件在内核中如何表示 1.1 APP 打开文件时&#xff0c;可以得到一个整数&#xff0c;这个整数被称为文件句柄。对于 APP 的每一个文件句柄&#xff0c;在内核里面都有一个“struct file ”与之对应 当我们使用 open 打开文件时&#xff0c;传入的 flags 、 mode…

目标跟踪存在问题以及解决方案

3D 跟踪 一、数据特性引发的跟踪挑战 1. 点云稀疏性与远距离特征缺失 问题表现&#xff1a; 激光雷达点云密度随距离平方衰减&#xff08;如 100 米外车辆点云数不足近距离的 1/10&#xff09;&#xff0c;导致远距离目标几何特征&#xff08;如车轮、车顶轮廓&#xff09;不…

JavaSE-JDK安装

目录 一.在官网下载安装包 二.安装JDK 三.检测JDK是否安装成功 四.配置系统环境变量 一.在官网下载安装包 Oracle官网https://www.oracle.com/cn/java/technologies/downloads/ 二.安装JDK 1.首先在C盘以为的其他盘中创建一个自己可以找到的存放JDK路径&#xff1a; 2.双击下…

使用docker搭建redis主从架构,一主2从

使用Docker搭建Redis主从架构&#xff08;一主两从&#xff09; Redis主从架构是提高系统可用性和读取性能的重要方案&#xff0c;通过Docker可以快速搭建该架构。下面将详细介绍搭建步骤。 架构设计 我们将搭建包含以下组件的架构&#xff1a; 1个主节点&#xff08;Maste…

机器学习3——参数估计之极大似然估计

参数估计 问题背景&#xff1a; P ( ω i ∣ x ) p ( x ∣ ω i ) P ( ω i ) p ( x ) p ( x ) ∑ j 1 c p ( x ∣ ω j ) P ( ω j ) \begin{aligned} & P\left(\omega_i \mid \mathbf{x}\right)\frac{p\left(\mathbf{x} \mid \omega_i\right) P\left(\omega_i\right)…

Spring AOP Pointcut 表达式的语法是怎样的?(execution(...) 是最常用的,还有哪些

Pointcut 表达式是 AOP 的核心&#xff0c;我将详细解析最常用的 execution 表达式&#xff0c;并介绍其他几种同样非常有用的表达式。 1. execution 指示符 (最常用&#xff0c;最强大) execution 用于匹配方法的执行&#xff08;Join Point&#xff09;。它的语法结构最为完…

基于 SpringBoot+Vue 的台球厅管理系统的设计与实现(毕业论文)

基于 SpringBootVue 的台球厅管理系统的设计与实现&#xff08;模板&#xff09;[三号宋体加粗&#xff0c;居中] 摘 要[首行缩进2字符&#xff0c;五号黑体加粗]&#xff1a;摘要内容[五号楷体]本文所提出的基于J2EE/EJB标准的电子化采购平台及其CRM组件综合解决方案&#xf…

运营医疗信息化建设的思路

医疗机构加强运营管理&#xff0c;必须依赖强有力的医院信息系统。信息化很重要&#xff0c;但不能为了信息化而信息化。运营信息化必须有明确的建设目标。 运营信息化建设的目标&#xff0c;包括几个方面&#xff1a; 1.实时反映业务&#xff1b; 2.体现内控思维&#xff1b…

6.24_JAVA_微服务day07_RabbitMQ高级

1、 RabbitListener(queuesToDeclare/*此处是固定写法&#xff0c;只能写这个玩意儿&#xff0c;因为这里是库里的方法*/ Queue(name "lazy.queue",//如果不存在就创建lazy.queue队列durable "true",//把耐用打开arguments Argument(name "x-que…

Python打卡:Day38

知识点回顾&#xff1a; Dataset类的__getitem__和__len__方法&#xff08;本质是python的特殊方法&#xff09;Dataloader类minist手写数据集的了解 浙大疏锦行

质量管理五大核心工具之SPC

SPC&#xff08;Statistical Process Control&#xff0c;统计过程控制&#xff09;是一种基于统计学的质量控制方法&#xff0c;旨在通过监控和分析生产过程数据&#xff0c;识别异常波动并消除异常因素&#xff0c;从而确保过程稳定受控&#xff0c;提升产品质量一致性145。以…

【世纪龙科技】新能源汽车VR虚拟体验展示馆-解锁认知新维度

解锁新能源汽车深度认知新维度&#xff1a;沉浸式 VR 虚拟体验展示馆 在科技不断突破边界的当下&#xff0c;人们对新能源汽车的探索渴望愈发强烈。无论是希望深入了解行业发展脉络的求知者&#xff0c;还是想要直观掌握汽车技术原理的学习者&#xff0c;传统的展示方式似乎总…

oracle基础审计管理

Oracle数据库审计功能详解(简单易懂!) 更新时间&#xff1a;2024年01月30日 16:21:27 作者&#xff1a;前程的前程也迷茫 Oracle审计查询是一项重要的任务,可以帮助DBA更好的管理Oracle数据库,下面这篇文章主要给大家介绍了关于Oracle数据库审计功能的相关资料,文中通过代码介绍…