数据结构——B-树、B+树、B*树

一、B-树

1. B-树概念

        B树是一种适合外查找的、平衡的多叉树。一棵m阶(m>2)的B树,是一棵平衡的M路平衡搜索树,它可以是空树或满足以下性质:

        (1)根节点至少有两个孩子。

        (2)每个分支节点都包含k-1个关键字和k个孩子,其中ceil(m/2)<= k <= m。(ceil表示向上取整)

        (3)每个叶子节点都包含k-1个关键字,其中ceil(m/2)<= k <= m。

        (4)所有叶子节点都在同一层。

        (5)每个节点中的关键字从小到大排列,节点中k-1个元素正好是k个孩子包含的元素的值域划分。

        (6)每个节点的结构为:(n, A0, K1, A1, K2, A2……, Kn, An),其中Ki(1<=i<=n)为关键字,且ki<ki + 1(1<=i<=n)。Ai(0<=i<=n)为指向子树根节点的指针,且Ai所指子树所有节点中的关键字均小于Ki+1。n为节点中关键字的个数,满足ceil(m/2)-1 <=n <= m-1。

2. B树的插入

        采用m为3的一棵三叉B树的插入过程进行演示。根据B树性质可知,m为3,则每个节点最多有三个孩子(m-1个),每个节点包含k-1个关键字,2<=k<=3。注意:插入只能插入到叶子节点

(1)首先插入两个值20,30

(2)插入第三个值25,由于每个节点最多有2个关键字,所以此时会进行分裂来维持B树平衡。

2.1 B树分裂规则

        创建一个兄弟节点,拷贝当前节点内右半区间的数据到兄弟节点中,保留当前节点中左半区间的数据,将该节点内的中位数提到父节点中(若没有父节点,则创建新的父节点)。

(3)插入35

(4) 插入40

        此时根节点的右侧孩子内数据超过2个,则按照B树分裂规则分裂后如下:

 (5)插入33

(6)插入34

        此时根节点的中间孩子内数据超过2两个,进行分裂,当提取33到父节点后,根节点内数据也超过了2个,则根节点也会进行分裂,此时没有父节点,则会创建新的父节点,结构如下:

三、B+树

1. B+树概念

        B+树是B树的变形,它是在B树基础上进行优化的多路平衡搜索树,B+树的规则和B树基本类似,但在其基础上进行了以下优化:

        (1)分支节点的子树指针与关键字个数相同;

        (2)分支节点的子树指针p[i]指向关键字值大小在[k[i], k[i+1]]之间;

        (3)所有叶子节点增加一个链接指针链接在一起;

        (4)所有关键字及其映射数据都在叶子节点出现。

优点:

(1)简化了B树孩子币关键字多一个的规则,由多一个变成相等。

(2)所有值都在叶子节点中,且叶子节点通过指针链接起来,方便遍历。

2. B+树的插入

        B+树的插入过程与B树基本类似,区别在于:

        (1)第一次插入两层节点,一层做分支,一层做根;

        (2)B+树在分裂时,是将左半部分的数据保留,右半部分的数据放入新建兄弟节点中,并将新建节点中的最小值更新到父节点中。

三、B*树

1. B*树概念

        B*树又是B+树的变形,做了以下改动:

        (1)在B+树的非根和非叶子节点再增加指向兄弟节点的指针。

        (2)节点在分裂时,保证每个节点中值的数量至少为2/3 * M,最多为M个,也就是从1/2提高到了2/3,提高空间利用率。

 2. B*树的插入

        B*树的插入与B+树基本类似,区别主要在于分裂规则,B*树的分裂规则:

        如果它的下一个兄弟节点未满,则将一部分数据移到兄弟节点中,再在原节点中插入关键字,最后修改父节点中兄弟节点的关键字(因为兄弟节点的关键字范围发生了变化);

        如果兄弟节点也满了,则在原节点与兄弟节点之间添加新节点,并各复制1/3的数据到新节点中,最后在父节点中添加新节点的指针。

四、B树系列的优缺点

1. 优点

        (1)高效的查找操作:B树系列的数据结构通过将数据分布在多层节点上,使用索引快速导航到目标元素所在的叶子节点,从而实现了高效的查找操作。其时间复杂度通常为O(log_{M}^{N})

        (2)适应大规模数据集:B树系列的数据结构能够充分利用磁盘块的大小,减少磁盘I/O操作的次数,提高存储和访问效率。它们被广泛应用于数据库索引、文件系统等需要处理大规模数据集的场景。

        (3)自平衡特性:B树系列的数据结构通过节点的分裂和合并来自动保持树的平衡,保证了各个节点的高度相对较小,从而维持了高效的操作性能。

        (4)支持范围查询:由于B树系列的数据结构中数据是按照键的大小顺序进行排序,因此可以很方便地进行范围查询操作。

2. 缺点

        (1)空间利用率低,消耗高。

        (2)插入删除数据、分裂合并节点,都必然存在数据挪动。

        (3)虽然B树系列的高度更低,但是在内存中和哈希、平衡搜索树的查找效率处于同一量级。

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

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

相关文章

Qt关于hex转double,或者QByteArray转double

正常的00 ae 02 33这种类型的hex数据类型可以直接通过以下代码进行转换 double QDataConversion::hexToDouble(QByteArray p_buf) {double retValue 0;if(p_buf.size()>4){QString str1 byteArrayToHexStr(p_buf.mid(0,1));QString str2 byteArrayToHexStr(p_buf.mid(1,…

香蕉派社区推出带10G SFP+ 端口的Banana Pi BPI-R4 Wifi7开源路由器

香蕉派BPI-R4 根据著名Banana Pi品牌背后的公司Sinovoip提供的初步信息&#xff0c;他们即将推出的Banana Pi BPI-R4路由器板目前正在开发中。与之前的 Banana Pi R3 板相比&#xff0c;这在规格上将有显着提升。这就是我们目前所知道的。 您可以选择 R4 板的两种不同配置。具…

MySQL数据库的操作

目录 创建数据库字符集和校验规则查看系统默认字符集以及校验规则校验规则对数据库的影响 操纵数据库查看已经创建的数据库显示某个数据库的创建语句修改数据库删除数据库 数据库备份和还原备份还原 查看连接情况 创建数据库 语法: create database [if not exists] 数据库名字…

二、SQL,如何实现表的创建和查询

1、新建表格&#xff08;在当前数据库中新建一个表格&#xff09;&#xff1a; &#xff08;1&#xff09;基础语法&#xff1a; create table [表名]( [字段:列标签] [该列数据类型] comment [字段注释], [字段:列标签] [该列数据类型] comment [字段注释], ……&#xff0c…

java可变字符串

一、常用方法 以StringBuilder为例 1、append(String str) 添加 StringBuilder str new StringBuilder("hello"); System.out.println(str);//在源字符串后添加world StringBuilder add str.append("world"); System.out.println(add);//结果helloworl…

大数据时代,个人信息数据库保护的挑战及其对策

挑战&#xff1a; 数据泄露&#xff1a;大数据时代&#xff0c;个人信息数据库面临被黑客攻击、内部员工滥用权限等风险&#xff0c;导致个人信息泄露的风险增加。 隐私保护&#xff1a;随着大数据的快速发展&#xff0c;个人信息的采集和分析变得更加广泛和深入。但是&#xf…

kaggle注册不显示验证码

edge浏览器 1.点击浏览器右上角三个点 2.点击扩展 3.点击管理扩展 4.点击获取Microsoft Edge扩展&#xff0c;在左上角输入Head Editor 5.输入https://www.azurezeng.com/static/HE-GoogleRedirect.json 6.下载后&#xff0c;点保存 成功&#xff01;

天锐绿盾安全U盘系统

安全U盘系统 01 简介 天锐绿盾安全U盘系统&#xff0c;是一款致力于保障U盘数据内容安全的产品。通过严格身份认证、便捷安全的密保机制、智能的U盘锁定或自毁设置、详细的文件操作日志、文件粉碎、设置还原等&#xff0c;天锐绿盾安全U盘系统为您U盘的数据保驾护航&#xff0…

onvif中imaging setting图像画质总结!

前言&#xff1a; 大家好&#xff0c;今天给大家来分享一篇关于图像质量的内容&#xff0c;这个内容是我在做onvif中的imaging setting的时候&#xff0c;关注到里面有关于: brightness(亮度)color saturation(色彩饱和度)contrast(对比度)sharpness(锐度)white balance(白平衡…

素材准备——准备用于标注和训练的图片素材——从视频监控视频中生成图片素材

为了实现我们对特定场景下的图像识别功能,我们需要依托YOLO V8工具,对大量的图片进行目标标准和训练。因此我们首先要做的一项工作便是准备大量的用于标准和训练做续的图片。 由于在实际项目中,特别是以公安交管所需要的场景中,我们很难单纯依托网络下载的方式获得所需要的…

Java 实现证件照底图替换,Java 实现照片头像底图替换

效果图 这里前端用layui实现的案例截图 color底图颜色可以在网页上这样取色 new Color(34, 133, 255) 实现案例下载链接&#xff1a;https://download.csdn.net/download/weixin_43992507/88237432

Web 3.0 安全风险,您需要了解这些内容

随着技术的不断发展&#xff0c;Web 3.0 正在逐渐成为现实&#xff0c;为我们带来了许多新的机遇和挑战。然而&#xff0c;与任何新技术一样&#xff0c;Web 3.0 也伴随着一系列安全风险&#xff0c;这些风险需要被认真对待。在这篇文章中&#xff0c;我们将探讨一些与Web 3.0 …

基于QT4的GPX文件编辑器开发

GPX文件是记录地理点的文件,本质是一种xml文件。GPX文件目前没有很好的编辑器,因此作者决定开发一款无需安装的绿色编辑器。 在QT4开发中,XML可以用DOM来实现,但其逻辑并不是很清晰。使用模型视图反而会更加可读。因此在开发中,使用model-view模式来实现数据读写。 1 需…

攻防世界-warmup

原题解题思路 只有一张图片&#xff0c;就查看源代码&#xff0c;有一个source.php。 查看source.php&#xff0c;白名单中还有一个hint.php。 hint.php告诉我们flag的位置ffffllllaaaagggg 但是直接跳转是没用的&#xff0c;构造payload。 http://61.147.171.105:55725/sourc…

怎样理解三次握手和四次挥手?

1. 三次握手 三次握手的大致流程图如下所示 &#xff08;1&#xff09;当客户端想与服务端建立连接时&#xff0c;客户端会先发送连接请求到服务端&#xff0c;该请求需要服务器接收并确认&#xff0c;这是一次握手&#xff1b; &#xff08;2&#xff09;当服务端收到了客户…

TCP特点UDP编程

目录 1、tcp协议和udp协议 2、多线程并发和多进程并发&#xff1a; &#xff08;1&#xff09;多进程并发服务端 &#xff08;2&#xff09;多进程并发客户端&#xff1a; 3、tcp: 4、粘包 5、UDP协议编程流程 (1)服务器端&#xff1a; (2)客户端&#xff1a; 6、tcp状…

Lnton羚通云算力平台如何在OpenCV-Python 中,来进行图像算术运算?

在 OpenCV-Python 中&#xff0c;可以使用函数 ​​cv2.add()​​、​​cv2.subtract()​​、​​cv2.multiply()​​ 和 ​​cv2.divide()​​ 来进行图像算术运算。这些函数接受两个输入图像&#xff0c;并对其进行逐像素的运算。 1.图像加法&#xff1a; ​​OpenCV​​ 是…

rust踩雷笔记(4)——刷点Vec相关的题(持续更新)

俗话说&#xff0c;孰能生巧&#xff0c;今天是第六天接触Rust&#xff0c;感觉基础语法和特性没什么问题了&#xff08;当然如果你整天都学这个可能2天半就够了&#xff09;&#xff0c;但是想达到熟练使用&#xff0c;还需要刷点题。算法我相信能来看rust博客的人都是大牛&am…

深度学习基本理论下篇:(梯度下降/卷积/池化/归一化/AlexNet/归一化/Dropout/卷积核)、深度学习面试

深度学习基本理论上篇&#xff1a;&#xff08;MLP/激活函数/softmax/损失函数/梯度/梯度下降/学习率/反向传播&#xff09; 深度学习基本理论上篇&#xff1a;&#xff08;MLP/激活函数/softmax/损失函数/梯度/梯度下降/学习率/反向传播&#xff09;、深度学习面试_会害羞的杨…