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

news/2024/4/28 0:30:32/文章来源:https://blog.csdn.net/m0_57001006/article/details/128427947

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.luyixian.cn/news_show_239637.aspx

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

相关文章

Linux系统基础——BIOS和Bootloader

BIOS和Bootloader 特此说明: 刘超的趣谈linux操作系统是比较重要的参考资料,本文大部分内容和所有图片来源于这个专栏。 1 了解背景 1.1 目的 操作系统不是在板子上电就直接运行的,上电到系统启动的中间过程要搞明白,比如了解linux系统启动…

火山引擎 DataTester 上线“流程画布”功能,支持组合型 A/B 实验分析

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 在精细化运营的时代,运营活动同样需要有精细化的策略,例如在年末大促活动中,设计 APP 弹窗提醒、满减、会员领券时,我…

TikTok 加速团结独立站,跨境电商的又一次红利期?

TikTok近年来在国际上非常流行。2021年8月,TikTok的全球下载量首次超过Facebook,成为全球最大的下载量。TikTok的诞生打破了海外社交媒体的垄断,TikTok营销成为许多跨境卖家的重点之一。 封号事件发生后,许多跨境卖家开始向独立站…

Python函数总结

在Python中,函数是一个带有名字的代码块,可以被反复调用。函数可以帮助你组织和重用代码,使你的程序更整洁,更易于维护。本文将会深入探索Python的秘密 目录 定义函数 自定义函数 内置函数 函数式方程 高阶函数 函数标注 …

读研2年,我选择从中科院退学转行做码农

从入学天坑材料专业到退学 先自我介绍一下:我天坑材料专业,本科某211,保研到中科院,但是我真是菜的抠脚,还懒,也不喜欢科研,论文达不到毕业要求,纠结之下研三退学转码农了。 读了2…

JVM【垃圾回收相关概念和垃圾回收器】

垃圾回收相关概念 System.gc()的理解 在默认情况下,通过**system.gc()**者Runtime.getRuntime().gc() 的调用,会显式触发FullGC,同时对老年代和新生代进行回收,尝试释放被丢弃对象占用的内存。 然而syste…

做跨境电商,如何从同类产品中脱颖而出?

随便打开一个跨境电商平台,你会发现自己售卖的产品有那么多类似的选择,如何确保你的产品能被客户选择?怎样在一系列产品中脱颖而出? 不少卖家提到了,搞差异化竞争,这是跨境电商卖家常挂在嘴边的一个词&…

k8s使用glusterfs(静态供给、动态供给)、glusterfs的安装与使用

目录前言主机准备配置主机名、关闭防火墙、关闭selinux挂载磁盘安装glusterfs服务端glusterfs的端口分布式集群的结构组成glusterfs集群创建存储卷启动卷k8s使用glusterfs作为后端存储(静态供给glusterfs存储)恢复初始化环境安装Heketi 服务(…

fpga实操训练(signal tap调试)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 编写软件的同学都知道,如果需要调试软件的话,除了要学会打印信息日志之外,另外一个很重要的方面,就…

maven的插件(命令)install介绍

maven的插件(命令)install介绍背景关于构建时使用的maven命令installmaven其他插件/命令的使用背景 今天在引入SpringCloudAlibaba时,pom.xml中的dependency报错了 到本地仓库去验证 验证无误,找原因 现象: 在maven…

数据挖掘期末-图注意力模型

PyGAT图注意力模型 ​  PyGAT实现的分类器: https://www.aliyundrive.com/s/vfK8ndntpyc 还在发烧,不是特别清醒,就简单写了写。用GAT进行关系预测,GAT可能是只做中间层,不过本来在GAT这一层就为了能懂就简化了很多…

Linux-系统随你玩之--用户及用户组管理

一、用户基本介绍 Linux 系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统 管理员申请一个账号,然后才可以以这个用户登陆系统。 二、Linux中用户和组 2.1、用户和组介绍 用户: 每一个用户都…

如何不改一行代码,让Hippy启动速度提升50%?

导读|Hippy使用JS引擎进行异步渲染,在用户从点击到打开首屏可交互过程中会有一定的耗时,影响用户体验。如何优化这段耗时?腾讯客户端开发工程师李鹏,将介绍QQ浏览器通过切换JS引擎来优化耗时的探索过程和效果收益。在分…

微导纳米科创板上市:市值125亿 无锡首富王燕清再敲钟

雷递网 雷建平 12月23日江苏微导纳米科技股份有限公司(简称:“微导纳米”,股票代码为:“688147”)今日在科创板上市。微导纳米此次发行4544.55万股,发行价为24.21元,募资总额为11亿元。微导纳米…

对Python的学习【如何查看路径和安装包】

1:怎么查看本地电脑的Python版本号及安装路径: 对于Windows平台,打开cmd 使用命令py -0p 【其中0是零】 显示已安装的 python 版本且带路径的列表,参见下图: 其中带星号*的为默认版本。 2:怎么查看python pip…

认识 Fuchsia OS

认识 Fuchsia OS 1 说明背景 1.1 基本信息 开发者: Google编程语言: C、C、Rust、Go、Python、Dart内核: Zircon运作状态: 当前源码模式: 开放源代码初始版本: 2016年8月15日支持的语言: 英语支持平台: ARM64、X86-64内核类别: 微内核 基于能力 实时操作系统许可证: BSD 3 c…

腾讯焦虑了,一向温文尔雅的马化腾也发脾气了

大家好,我是校长。昨天小马哥内部讲话在互联网上疯传,这应该是,腾讯这家公司创办以来,马化腾最焦虑也最外露的一次讲话了,重点大概涉及 3 大方面,8 大项内容:1、所有业务线 ROI 化,再…

该怎么选择副业,三条建议形成自己的副业思维

受经济环境的影响,许多年轻人觉得原来稳定的工作不那么稳定,看着周围的朋友因为企业破产和失业,生活变得没有信心,也想找到自己的副业,在紧急情况下赚更多的钱。所以,年轻人在选择副业时也面临着很多困惑&a…

LeetCode HOT 100 —— 581. 最短无序连续子数组

题目 给你一个整数数组 nums ,你需要找出一个 连续子数组 ,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。 请你找出符合题意的 最短 子数组,并输出它的长度。 思路 方法一:双指针 排序 最终目的是让…

2023春季招聘面试集锦:MYSQL数据库高频面试题

mysql索引的数据结构,各自优劣 索引的数据结构和具体存储引擎的实现有关,在MySQL中使用较多的索引有Hash索引,B树索引等, InnoDB存储引擎的默认索引实现为:B树索引。对于哈希索引来说,底层的数据结构就是…