B+树 [数据结构与算法][Java]

news2024/11/20 12:29:08

B+树

B+树是B树的一种变形

我们通过一颗四阶B+树来理解认识一下B+树:(如下:)

在这里插入图片描述

  • 我们其实从图上就可以看出B+树和B树是有很多不同之处的
    1. 比如我们的B+树中将叶子结点层的所有结点使用一个链表串联了起来
    2. B+树中对于非叶子结点都是只是存储的索引(指针), 并没有存储关键字, 所以我们最终查询一个结果的时候要么是查询不到对应的关键字, 如果可以查询出结果, 那么我们的结果一定是在叶子结点中 —> 因为我们的B+树中将所有的关键字都存储到了叶子节点层中
    3. B+树中的外部结点不是虚设的, 我们的每个叶子结点(也就是关键字)都对应着一个外部结点, 在我们的MySQL中我们就是使用B+树作为底层结构维护的索引, 当我们查找到某个关键字的时候这个关键字就对应着数据仓库中的一条记录 , 但是我们的B树中也外部结点是虚设的, 指向B树中的外部结点的指针都是为空的, 因为我们的外部结点其实都是不存在的, 当我们使用B树查询的时候如果是查询到了外部结点的时候这个时候就说明没有对应的关键字, 也就表示查询不到
    4. 在B+树中一个n个关键字的结点会有n个子节点(也就是一个n结点有n个指针), 我们的每个关键字都对应着一个子节点, 我们的每个关键字都是对应的子节点中的最大的关键字值, 但是我们的B树中一个有n个关键字的结点会有n+1个子节点 —> 其实这个原因说白了其实是因为我们的B+树中非叶子结点是不存储关键字的(但是为什么是这样需要我们细细思考)

B+树的定义 : 一颗m阶B+树满足下列要求:

  1. 每个分支结点至多有m颗子树
  2. 根节点要么没有子树, 要么至少有两颗子树
  3. 除了根节点以外, 其他每个分支结点(非叶子结点)至少有Math.celi(m / 2)个子树, 每个分支结点至少有Math.celi(m / 2)个关键字
    • 注意: 这里我们一定要注意我们B+树中的结点中的关键字的个数是和子节点的个数是相同的,并且都是Math.celi(m / 2)
  4. 所有叶子结点包含全部的关键字以及指向相应的记录的指针
    • 而且叶子结点中是按照关键字大小顺序连接的, 并且所有的叶子结点是连接在一个单链表上的
    • B+树中的外部结点是真实存储着数据的
  5. 所有分支结点(可以看做是索引的索引)中仅仅包含它的各个子节点(即下级索引的索引块)中最大关键字以及指向子节点的指针
    • 我们的非叶子结点都是存储索引的, 所以指向非叶子结点的结点我们就可以称之为"索引的索引"

数据库中的索引就是通过B树和B+树来维护的

补充:

一定要知道我们的树的阶数是说的树中的拥有子节点最多的结点的子节点数目

  • 我们一般将树中一个节点有多少个子节点称之为: “结点的度”
  • 而我们的树的阶其实就是树的度, 就是指的树中所有结点中最大的度

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

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

相关文章

离散数学数理逻辑部分

前言 本文创作的起因是,经历了离散数学的学习,深感学习离散之艰辛。所以产生了写一些内容帮助大家期末复习。虽然在csdn发表本文,有些不太合适,但是还是相信本文的质量和内容,可以给正在学习离散数学的大学生提供一些…

vscode使用shift+alt+f格式化html文件时不生效

关于vscode配置相关文章(方便作者之后复习): VScode如何在敲代码时自动导入包怎么在VScode中写代码模板【以创建express模板为例】如何根据项目的eslint去配置vscode的setting 1-1 下载Beautify插件 该插件已停止维护,输入下载其他插件 1-2 在…

【Linux】进程概念(上)

​🌠 作者:阿亮joy. 🎆专栏:《学会Linux》 🎇 座右铭:每个优秀的人都有一段沉默的时光,那段时光是付出了很多努力却得不到结果的日子,我们把它叫做扎根 目录👉冯诺依曼体…

1754. 构造字典序最大的合并字符串

摘要 1754. 构造字典序最大的合并字符串 一 贪心算法分析 题目要求合并两个字符串 word1 与 word2,且要求合并后的字符串字典序最大。首先需要观察一下合并的选择规律,假设当前需要从 word1​ 的第 i 个字符和 word2​ 的第 j个字符选择一个字符加入到…

24. 【gRPC系列学习】gRPC安全认证-TLS认证

TLS认证是gRPC比较常见的方式,利用PKI体系,生成客户端证书、服务端证书、以及CA证书,在交互期间进行身份验证,经秘钥协商后,以对称秘钥进行加密通信,保证数据隐私。Basic、Jwt都是要自实现,TLS是官方支持,操作简单。 1. TLS原理 双向认证简单来讲:服务端验证客户端证书…

前端小知识:返回浏览器上一页(back、go、referrer)

官方文档(document.referrer): https://developer.mozilla.org/zh-CN/docs/Web/API/Document/referrer   官方文档(history.back) https://developer.mozilla.org/zh-CN/docs/Web/API/History/back   官方文档&#…

DaVinci:曲线之 HSL 曲线

调色页面:曲线Color:CurvesH 指的是色相 Hue,S 指的是饱和度 Saturation,L 指的是亮度 Luminance。DaVinci Resolve 的曲线调板中,除了自定义曲线,还提供了六种基于色相、饱和度或亮度的调节曲线&#xff0…

Akka 进阶(二)Mailbox 邮箱

目录一 默认邮箱配置二 内置邮箱三 自定义邮箱四 配置邮箱五 RequiresMessageQueue接口Actor中的邮箱是一个队列结构,所有发送过来的消息都会在该队列进行排队,在默认情况下,它遵循先进先出(FIFO)的模式,假…

如何将ppt图片压缩?统一压缩ppt图片的简单方法

日常生活中经常需要用到ppt,一份PPT少则十几页多则上百页,就很容易造成PPT过大不易传送的情况,其实我们可以先把ppt图片压缩(图片压缩到指定大小 图片压缩大小至指定kb以下-压缩图)之后再制作成ppt文件,那么…

【推荐收藏】这份图解算法数据结构的材料太良心

5年前发生的一件事,成为了我职业生涯的重要转折点。当时的我在交大读研,对互联网求职一无所知,但仍然硬着头皮申请了 Microsoft 实习生。面试官让我在白板上写出“快速排序”代码,我畏畏缩缩地写了一个“冒泡排序”,并…

Unity 3D Inspector 视图 || Unity 3D Scene View 视图 || Unity 3D Game View 视图

Unity 3D Inspector 视图 Unity 3D 的 Inspector 视图用于显示当前选定的游戏对象的所有附加组件(脚本属于组件)及其属性的相关详细信息。 视图布局 以摄像机为例,在 Unity 3D 的 Inspector 视图中显示了当前游戏场景中的 MainCamera 对象所…

腾讯云轻量应用服务器使用 Cloudreve 应用镜像搭建个人私有云盘!

Cloudreve 是一款开源的网盘软件,支持服务器本机及腾讯云对象存储 COS 等多种存储方式,提供离线下载、拖拽上传、在线预览等功能,能够帮助您快速搭建个人使用或多人共享的云盘系统。该镜像基于 CentOS 8.2 64位操作系统,已集成宝塔…

OpenAI | GPT-3新模型Davinci,将AI写作提升到新水平!网友惊呼:GPT-4要来了?

文 | 王思若20年,OpenAI推出了1750亿参数量的屠榜‘杀器’GPT-3,但基于大模型至今悬而未决的伦理和社会风险以及商业盈利等因素的考量,OpenAI将GPT-3以付费API的形式向公众开放。通过调用GPT-3的API,问答、语义检索、翻译、数学推…

消息队列RabbitMQ学习笔记(四)死信队列和延迟队列

1. 死信的概念 先从概念解释上搞清楚这个定义,死信,顾名思义就是无法被消费的消息,字面意思可以这样理 解,一般来说,producer 将消息投递到 broker 或者直接到queue 里了,consumer 从 queue 取出消息 进行…

【Linux】调试器gdb的使用

​🌠 作者:阿亮joy. 🎆专栏:《学会Linux》 🎇 座右铭:每个优秀的人都有一段沉默的时光,那段时光是付出了很多努力却得不到结果的日子,我们把它叫做扎根 目录👉什么是gdb…

2022-忙碌的一年

(点击即可听音频)前言花有重开日,人无再少年.每当这个时候,回头驻足,不是感慨万千,就是惜时如金,一年悄无声息的从指尖划过,星海横流,岁月如碑.那些被偷走的时光,发生了大大小小的事无论是平淡无奇,还是历久难忘,有惊喜,有遗憾,终将都会隐入尘烟。大到国…

自定义coco数据集

1、环境 anaconda环境安装配置 2、工具 安装labelme工具 3、安装软件 3.1、打开anaconda控制台 3.2、创建虚拟环境 conda create -n labelme python3.73.3、激活环境 conda activate labelme3.4、下载labelme pip install labelme3.5、输入labelme打开软件 以后打开跳…

微信小程序--P2P消息收发模式(MQTT)

目录 前言 js demo 参数 new Paho.Client 创建对象 onConnectionLost 连接丢失回调 onMessageArrived 监听数据 connect (connectOptions)将此消息客户端连接到其服务器。 mqtt 频繁断开和重连问题 小程序实践 前言 P2P,顾名思义,是一对一的消…

vTESTstudio入门到精通 - vTESTstudio工具栏介绍_Layout

到今天这一篇vTESTstudio工具栏介绍就将暂时告一段落了,后续如果大家有需求的话可以私信我,我就继续再往深的介绍,如果没有催更的话,就当这部分是给大家做个普及,作为一个扫盲篇吧,实际项目使用和编程的内容…

Nginx反向代理的一个算法API的接口调用超时:504,GateWay Timeout,怎么破?

背景 服务端由第三方部署了一个基于 darknet (一个较为轻型的完全基于C与CUDA的开源深度学习框架)的识别算法服务,通过 Flask 的 Web 服务对业务服务暴露 API 接口。作为测试,一开始是直接通过 python3 app.py 的命令行启动的服务…