【数据结构】B树、B+树的知识点学习总结

news2024/12/24 9:25:17

目录

1、B树

1.1 定义

1.2 特性

1.3 查找操作

1.4 插入操作

1.5 删除操作 

2、B+树

2.1 定义 

2.2 特性

3、B树与B+树的对比


1、B树

1.1 定义

        B树是一种平衡树数据结构,用于存储和访问大量数据。B树的每个节点可以存储多个键值,节点中的键值按照大小顺序排列。B树的特点是具有多个关键字,且每个节点中关键字的数目通常介于m/2和m之间,其中m称为B树的阶数。B树的根节点至少有两个子节点,且每个非根节点至少有m/2个子节点。所有叶子节点都在同一层,即具有相同的深度,从而保证B树的平衡性。B树被广泛应用于文件系统、数据库索引和其他数据存储领域中。

1.2 特性

B树是一种自平衡的数据结构,主要特点包括:

  1. B树是一种多路搜索树,每个节点可以拥有多个子节点。
  2. B树的每个节点最多可以包含m个孩子(子节点),其中m>=2。这也就意味着B树的高度相对较小。
  3. B树的每个节点都可以包含多个关键字,且关键字按照升序排列。这也就保证了B树的查找效率。
  4. B树的所有叶子节点都位于同一层。这也就保证了B树的平衡性。
  5. B树的插入、删除、查找操作都具有较好的平均时间复杂度,通常为O(logn)。

1.3 查找操作

        B树查找是一种常见的数据结构,用于快速查找一个键值对应的值。B树是一种平衡树,能够有效地支持数据的插入、删除和查找操作。与二叉查找树不同,B树每个节点可以拥有多个子节点,从而可以存储更多的数据。

B树的查找操作可以分为以下几步:

1. 从根节点开始,依次比较键值和每个节点中的键值,找到一个最合适的子节点。
2. 如果该子节点是叶子节点,则根据键值找到相应的值并返回。
3. 如果该子节点不是叶子节点,则重复第1步直到找到叶子节点或者遍历完整棵树。

        由于B树的节点通常比较大,所以通常需要从磁盘中读取数据,而不是从内存中读取。因此,B树的查找过程通常需要进行磁盘访问,而磁盘访问的速度通常比内存访问慢得多。为了减少磁盘访问的次数,B树通常具有较小的高度,每个节点存储更多的关键字,同时尽可能保持节点的平衡性。

1.4 插入操作

B树的插入操作包括两个步骤:

1.找到要插入的位置:

        首先,需要遍历B树找到插入位置。在遍历过程中,比较当前结点的关键字和插入关键字的大小,如果插入关键字小于当前结点的最小关键字,就继续往左子树遍历;如果插入关键字大于当前结点的最大关键字,就继续往右子树遍历;如果插入关键字在当前结点的关键字范围内,就说明插入位置就在当前结点,直接向该结点插入关键字即可。

2.插入新结点:

        插入新关键字的方法和二叉搜索树类似,将新插入结点的关键字和指针插入到对应位置。如果插入该关键字后,该结点的关键字个数超过了B树的阶数,就需要进行分裂操作。分裂的方法是将该结点分成两个子结点,并将中间的关键字提升到父结点。如果父结点的关键字个数超过了B树的阶数,就需要继续分裂父结点,直到所有父结点的关键字个数都不超过B树的阶数。

1.5 删除操作 

B树的删除操作包含以下步骤:

  1. 在B树中搜索需要删除的关键字K。

  2. 如果K位于叶子节点上,直接删除K,然后进行必要的调整,使树仍然满足B树的性质。如果K不在叶子节点上,则转到步骤3。

  3. 如果K位于非叶子节点上,则找到其后继节点S。S一定在K的右子树中,并且是右子树中关键字最小的节点。将S的关键字复制到K中,并将S删除。

  4. 如果S的子树中的节点数小于B树的最小度数,则需要进行必要的操作来保证树仍然满足B树的性质。这些操作可能包括以下三种情况:

    1. 如果S的右兄弟节点有足够的子节点,则将S的一个关键字移到K的位置上,并将S的右兄弟节点的一个关键字移到S的位置上。
    2. 如果S的左兄弟节点有足够的子节点,则将S的一个关键字移到K的位置上,并将S的左兄弟节点的一个关键字移到S的位置上。
    3. 如果S的左兄弟节点和右兄弟节点都只有最小的子节点数,则将S与其左或右兄弟节点合并,并将K的一个关键字移到新节点中以保证树仍然满足B树的性质。
  5. 重复步骤3和4,直到K被删除,并树仍然满足B树的性质。

2、B+树

2.1 定义 

        B+树是一种数据结构,属于B树的一种特殊形式。B+树的每个节点通常包含多个关键字,每个关键字对应一个指针指向子树节点。B+树通常被用来实现关系数据库的索引,因为B+树的叶节点包含了所有的数据,可以支持快速的范围查询操作。

2.2 特性

B+树的特点如下:

1. 所有关键字都在叶节点中出现,且叶节点按关键字大小排序;
2. 非叶节点存储的仅是其子节点的最大/小关键字值,而不是真正的数据;
3. 所有叶节点都有一个指向相邻叶节点的指针,因此可以支持区间查找等操作;
4. B+树的高度通常比B树低,因为非叶节点存储的是子节点的最大/小关键字值,可以减少树高度,提高查询效率。

 

3、B树与B+树的对比

B树和B+树都是常见的数据结构,用于实现关系型数据库中的索引。它们有以下主要区别:

1. 结构不同:B树的每个节点既可以存储数据,又可以存储下级节点的指针;而B+树的所有数据都只存储在叶子节点上,同时内部节点只存储指向叶子节点的指针。

2. 特性不同:B树的所有节点都可以用于查询,而B+树只有叶子节点存储数据,内部节点只用于索引。因此,在进行范围查询的时候,B+树更加适合,因为只需要遍历叶子节点即可。

3. 存储性质不同:由于B+树所有数据都存储在叶子节点上,因此,它具有更加顺序存储的特点,可以提高磁盘预读取的效率。而B树的数据分散在各个节点上,因此存储效率不如B+树。

4. 指针数量不同:B+树每个节点存储的指针数量比B树少,因为B+树的节点只存储指向叶子节点的指针。

综上,B树适用于随机查询,而B+树适用于范围查询;B树指针较多,存储不太紧凑,而B+树指针少,存储更加顺序。

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

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

相关文章

虚幻4学习笔记(15)读档 和存档 的实现

虚幻4学习笔记 读档存档 B站UP谌嘉诚课程:https://www.bilibili.com/video/BV164411Y732 读档 添加UI蓝图 SaveGame_UMG 添加Scroll Box 修改Scrollbar Thickness滚动条厚度 15 15 勾选 is variable 添加text 读档界面 添加背景模糊 添加UI蓝图 SaveGame_Slot …

Linux初识+环境部署

文章目录 版权声明Linux初识Linux的诞生Linux内核Linux发行版 环境部署vmcentosWSL-Ubuntu 版权声明 本博客的内容基于我个人学习黑马程序员课程的学习笔记整理而成。我特此声明,所有版权属于黑马程序员或相关权利人所有。本博客的目的仅为个人学习和交流之用&…

100天精通Python(可视化篇)——第102天:Pyecharts绘制多种炫酷关系网图参数说明+代码实战

文章目录 专栏导读一、关系网图介绍1. 关系网图是什么?2. 关系网图的应用场景 二、关系网图类配置选项1. 导包2. add函数3. 关系网络图的节点4. 关系网络图的边5. 节点分类的类目 三、关系网图实战1. 普通关系网图2. 复杂关系网图3. 带边信息的关系网络图4. 微博转发…

2023 年解锁物联网端点安全

物联网 (IoT) 和端点安全的融合已成为小型企业的关键焦点。这些企业正在努力保护其数字环境。物联网的集成彻底改变了运营流程。通过这样做,它们为创新和增长提供了前所未有的机会。然而,它也带来了无数的安全挑战,需要采取强有力的保护措施。…

(一)NIO 基础

(一)NIO 基础 non-blocking io:非阻塞 IO 1、三大组件 1.1、Channel & Buffer Java NIO系统的核心在于:通道(Channel)和缓冲(Buffer)。通道表示打开到 IO 设备(例…

开关电源-交流220V降压电路-电阻电容降压原理

阻容降压原理 电容电阻降压的原理其实比较简单。它的工作原理是电容在交流信号的情况下,产生容抗来限制最大的工作电流。说白了就是电容使用它自己的通交流阻直流的性能,在交流信号输入时电容产生容抗。我们通过他的这个特性,可以设计出&…

Java基础(一)——Hello World,8种数据类型,键盘录入

个人简介 👀个人主页: 前端杂货铺 🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 📃个人状态: 研发工程师,现效力于中国工业软件事业 🚀人生格言: 积跬步…

腾讯mini项目-【指标监控服务重构-会议记录】2023-07-21

2023-07-21 组长会议纪要 A组 文档学习差不多,还没掌握如何使用sdk进行上报venus启动服务的3个ToDo 添加什么错误处理 ErrHandler : fiber的错误处理,是运行过程Handler中的错误,在全局的ErrHandler,进行错误处理&am…

APP备案公钥,指纹获取

APP备案公钥,指纹获取 下载已有的apk,文件后缀名改为zip 2,找到META-INF文件夹,然后再找到文件CERT.RSA 后缀改名为CERT.p7b 3,双击后: 4,双击右侧证书点开:显示颁发给。 5&#xf…

Unity引擎更新收费模式:从收入分成转向游戏安装量,将会有哪些影响呢

一、前言 Unity 引擎宣布自 2024 年 1 月 1 日起,将根据游戏安装量对开发者进行收费。官网通知如下 收费模式如图 这张图的大致意思就是, 从2024年1月1日开始,Unity将对所有达标的用户(开发者)根据游戏安装量征收“安…

游戏扫码登录+多功能工具箱 微信小程序源码

一个集合了多种实用功能的微信小程序,这个微信小程序源码不仅具备美观的界面设计,还拥有许多实用的功能,而且最重要的是,它无需服务器和域名,所有功能都无需API接口,因此不用担心功能失效的问题。这意味着&…

移除元素【快慢指针】

移除元素 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新…

刷题Day1

目录 一、选择题二、编程题2.1 组队竞赛2.2 删除公共字符 一、选择题 二、编程题 2.1 组队竞赛 参考代码&#xff1a; #include <queue>int main() {priority_queue<int> pq;int n0;cin>>n;int tmp0;for(size_t i0;i<3*n;i){cin>>tmp;pq.push(tmp…

YOLOv5、YOLOv8改进:Swin Transformer-V2

1.介绍 论文地址&#xff1a;https://arxiv.org/abs/2111.09883 综述 该论文作者提出了缩放 Swin Transformer 的技术 多达 30 亿个参数&#xff0c;使其能够使用多达 1,536 个图像进行训练1,536 分辨率。通过扩大容量和分辨率&#xff0c;Swin Transformer 在四个具有代表性…

Linux内核源码的make zImage过程

一. 内核镜像文件 zImage 前面几篇文章重点讲 vmlinux 是如何编译出来的&#xff1f; vmlinux 是 ELF 格式的文件&#xff0c;但是在实 际中我们不会使用 vmlinux &#xff0c;而是使用 zImage 或 uImage 这样的 Linux 内核镜像文件。 本文简单说明一下 内核镜像文…

【知识分享】Java获取全年每个月的有几周且每周是几号到几号

加哥本周给大家分享一期怎么用java把全年每个月有几周&#xff0c;本周是几号到几号的工具类。便于大家根据需求获取想要的形式进行改造。话不多说&#xff0c;直接给大家上代码。 package com.techfantasy.common.utils; import com.techfantasy.common.entity.DateRange; i…

DAZ To UMA⭐三.导入Blender的配置, 及Blender快捷键

文章目录 🟥 Blender快捷键1️⃣ 3D视图快捷键2️⃣ 视角快捷键3️⃣ 编辑快捷键4️⃣ 对物体的操作🟧 Blender导入FBX的配置🟩 设置脸部骨骼大小1️⃣ 切换视角2️⃣ 缩小脸部骨骼3️⃣ 本节效果预览🟦 设置眼角膜透明度🟥 Blender快捷键 1️⃣ 3D视图快捷键 快捷键…

Hello World启示录:Java编程的起点

&#x1f451;专栏内容&#xff1a;Java⛪个人主页&#xff1a;子夜的星的主页&#x1f495;座右铭&#xff1a;前路未远&#xff0c;步履不停 目录 一、Java基本结构1、一个简单的Java程序2、运行Java程序3、JDK | JRE | JVM之间的关系 二、代码注释标准1、注释规则2、注释规范…

git | 合并merge、衍合rebase与同步更新cherry-pick

git | 合并merge、衍合rebase与同步更新cherry-pick 文章目录 git | 合并merge、衍合rebase与同步更新cherry-pickgit meregegit rebasegit rebase和git merge的区别总结 cherry-pick 把别的分支的改动内容同步更新到自己的分支Example: Reference 欢迎关注公众号“三戒纪元” …

外卖霸王餐系统 美团试吃系统-代理系统

微客云免费提供外卖霸王餐系统&#xff0c;支持分站、运营商、商家后台、独立域名&#xff0c;自定义品牌&#xff0c;自主收款。 想做霸王餐的可以参考下联系微客云。地址&#xff1a;微客云 - 淘宝客CMS,公众号,小程序,淘客APP,外卖返利CPS,私域电商系统 分站后台演示&…