【数据结构(十一·多路查找树)】B树、B+树、B*树(6)

news2024/12/23 20:48:06

文章目录

  • 1. 二叉树 与 B树
    • 1.1. 二叉树存在的问题
    • 1.2. 多叉树 的概念
    • 1.3. B树 的基本介绍
  • 2. 多叉树——2-3树
    • 2.1. 基本概念
    • 2.2. 实例应用
    • 2.3. 其他说明
  • 3. B 树、B+树 和 B*树
    • 3.1. B树 的介绍
    • 3.2. B+树 的介绍
    • 3.2. B*树 的介绍


1. 二叉树 与 B树

1.1. 二叉树存在的问题

二叉树的操作效率较高,但是也存在问题, 请看下面的二叉树

在这里插入图片描述

二叉树需要加载到内存的,如果二叉树的节点少,没有什么问题,但是如果二叉树的节点很多(比如 1 亿), 就存在如下问题:
    问题 1:在构建二叉树时,需要多次进行 i/o 操作(海量数据存在数据库或文件中),节点海量,构建二叉树时,速度有影响
    问题 2:节点海量,也会造成二叉树的高度很大,会降低操作速度。

1.2. 多叉树 的概念

    在二叉树中,每个节点有数据项,最多有两个子节点。如果允许每个节点可以有更多的数据项和更多的子节点,就是多叉树(multiway tree),多叉树通过重新组织节点,减少树的高度,能对二叉树进行优化
    后面会讲到 2-3 树2-3-4 树就是多叉树

举例说明:
下面 2-3 树就是一颗多叉树
    
在这里插入图片描述

1.3. B树 的基本介绍

B 树通过重新组织节点,降低树的高度,并且减少 i/o 读写次数来提升效率。

在这里插入图片描述

  1. 如图 B 树通过重新组织节点, 降低了树的高度.
  2. 文件系统及数据库系统的设计者利用了磁盘预读原理,将一个节点的大小设为等于一个(的大小通常为 4k),这样每个节点只需要一次 I/O 就可以完全载入
  3. 树的度 M 设置为 1024,在 600 亿个元素中最多只需要 4 次 I/O 操作就可以读取到想要的元素,B 树(B+)广泛应用于文件存储系统以及数据库系统中

2. 多叉树——2-3树

2.1. 基本概念

    
2-3 树是最简单的 B 树结构, 具有如下特点:
    ① 2-3 树的所有叶子节点都在同一层(只要是 B 树都满足这个条件)
    ② 有两个子节点的节点叫二节点,二节点要么没有子节点,要么有两个子节点
    ③ 有三个子节点的节点叫三节点,三节点要么没有子节点,要么有三个子节点
    ④2-3 树是由二节点和三节点构成的树。

2.2. 实例应用

将数列{16, 24, 12, 32, 14, 26, 34, 10, 8, 28, 38, 20} 构建成 2-3 树,并保证数据插入的大小顺序。

构建结果如下:
在这里插入图片描述

插入规则:

  1. 2-3 树的所有叶子节点都在同一层.(只要是 B树都满足这个条件)
  2. 有两个子节点的节点叫二节点,二节点要么没有子节点,要么有两个子节点.
  3. 有三个子节点的节点叫三节点,三节点要么没有子节点,要么有三个子节点
  4. 当按照规则插入一个数到某个节点时,不能满足上面三个要求,就需要拆,先向上拆,如果上层满,则拆本层,拆后仍然需要满足上面 3 个条件。
  5. 对于三节点的子树的值大小仍然遵守(BST 二叉排序树)的规则

(这里关于如何构建2-3树讲并的不清楚,大家需要参考其他的资料学习)

2.3. 其他说明

除了 23 树,还有 234 树等,概念和 23 树类似,也是一种 B 树。 如图:

在这里插入图片描述

3. B 树、B+树 和 B*树

3.1. B树 的介绍

B-tree树B树,B 即 Balanced,平衡的意思。有人把 B-tree 翻译成 B-树,容易让人产生误解。会以为 B-树是一种树,而 B 树又是另一种树。实际上,B-树 就是指的 B 树。

前面已经介绍了 2-3树2-3-4树,他们就是 B树(英语:B-tree 也写成 B-树),这里我们再做一个说明,在学习 Mysql 时,经常听到说某种类型的索引是基于 B树 或者 B+树的,如图:

在这里插入图片描述

对上图的说明:

  1. B 树的阶:节点的最多子节点个数。比如 2-3 树的阶是 3,2-3-4 树的阶是 4
  2. B-树的搜索,从根结点开始,对结点内的关键字(有序)序列进行二分查找,如果命中则结束,否则进入查询关键字所属范围的儿子结点;重复,直到所对应的儿子指针为空,或已经是叶子结点
  3. 关键字集合分布在整颗树中, 即叶子节点和非叶子节点都存放数据.
  4. 搜索有可能在非叶子结点结束
    5)其搜索性能等价于在关键字全集内做一次二分查找

3.2. B+树 的介绍

B+树是 B 树的变体,也是一种多路搜索树。

在这里插入图片描述

对上图的说明:

  1. B+树的搜索与 B 树也基本相同,区别是 B+树只有达到叶子结点才命中(B树可以在非叶子结点命中),其性能也等价于在关键字全集做一次二分查找
  2. 所有关键字都出现在叶子结点的链表中(即数据只能在叶子节点【也叫稠密索引】),且链表中的关键字(数据)恰好是有序的。
  3. 不可能在非叶子结点命中
  4. 非叶子结点相当于是叶子结点的索引(稀疏索引),叶子结点相当于是存储(关键字)数据的数据层
  5. 更适合文件索引系统
  6. B 树和 B+树各有自己的应用场景,不能说 B+树完全比 B 树好,反之亦然

3.2. B*树 的介绍

B*树是 B+树的变体,在 B+树的非根和非叶子结点再增加指向兄弟的指针

在这里插入图片描述

B*树的说明:

  1. B*树定义了非叶子结点关键字个数至少为 (2/3)*M(树的度),即块的最低使用率为 2/3,而 B+树的块的最低使用率为的1/2。
  2. 从第 1 个特点我们可以看出,B*树分配新结点的概率比 B+树要低,空间使用率更高。

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

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

相关文章

【FPGA/verilog -入门学习7】 条件判断if与分支判断case语句的语法介绍

需求 使用if 和case 产生格雷码 / /*条件判断if与分支判断case语句的语法介绍 需求 使用if 和case 产生格雷码*/ / timescale 1ns/1ps module vlg_design(input [3:0] i_data, output reg [3:0] o_data,output reg [3:0] o_datac);always (*) begin if (4b0000 i_data) o_d…

ros的slam建图和导航(含工作空间)

工作空间的结构 准备工作 创建工作空间(ros_zy) mkdir ros_zy进入工作空间 cd ros_zy创建src文件夹(放源程序) mkdir src编译工作空间 catkin_make打开vscode(从终端打开此工程) code .进入工作空间的…

如何查看自己的文章是否被数据库收入?【查收查引】

致谢:特别感谢图书馆的蔡老师,告诉我怎么操作! 另外,查收查引报告中的文章可以分开开,放在一起开不是必须的。(放在一起开大概是院士工作量需要的。不是很了解。) 如何查看自己的文章是否被数据…

tomcat部署以及虚拟主机的部署

Tomcat概述 Tomcat是Java语言开发的,服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。一般来说,Tomcat虽然和…

c语言 词法分析器 《编译原理》课程设计

设计、编制并调试一个词法分析程序,加深对词法分析原理的理解。 针对表达各类词语的一组正规表达式,设计一个确定化的最简的有限自动机,对输入的符号串进行单词划分及词类识别。 要求词法分析器的输入是字符串,输出是源程序中各…

苍穹外卖项目笔记(8)— 缓存商品、购物车功能

前言 代码链接: Echo0701/take-out⁤ (github.com) 1 缓存菜品 1.1 问题说明 【注】很多时候系统性能的瓶颈就在于数据库这端 1.2 实现思路 通过 Redis 来缓存数据,减少数据库查询操作 【注】Redis 基于内存来保存数据的,访问 Redis 数据…

python:五种算法(GA、OOA、DBO、SSA、PSO)求解23个测试函数(python代码)

一、五种算法简介 1、遗传算法GA 2、鱼鹰优化算法OOA 3、蜣螂优化算法DBO 4、麻雀搜索算法SSA 5、粒子群优化算法PSO 二、5种算法求解23个函数 (1)23个函数简介 参考文献: [1] Yao X, Liu Y, Lin G M. Evolutionary programming made…

JVS物联网、低代码、智能BI本周更新功能已上线

物联网应用更新功能 新增: 1.新增驱动管理功能,可新增、编辑、修改、删除、查看驱动实例; 驱动管理功能主要负责管理物联网设备的驱动实例。这些驱动实例可以新增、编辑、修改、删除或查看。通过这些驱动实例,平台可以与设备进行通信&…

Git 常用命令速查

一、 Git 常用命令速查 git branch 查看本地所有分支git status 查看当前状态git commit 提交git branch -a 查看所有的分支git branch -r 查看远程所有分支git commit -am "init" 提交并且加注释git remote add origin git192.168.1.119:ndshowgit push origin mas…

XML学习及应用

介绍XML语法及应用 1.XML基础知识1.1什么是XML语言1.2 XML 和 HTML 之间的差异1.3 XML 用途 2.XML语法2.1基础语法2.2XML元素2.3 XML属性2.4XML命名空间 3.XML验证3.1xml语法验证3.2自定义验证3.2.1 XML DTD3.2.2 XML Schema3.2.3PCDATA和CDATA区别3.2.4 参考 4.xml解析4.1准备…

Onlyoffice本地部署超详细教程(附协作空间2.0新资讯)

陈老老老板🤴 🧙‍♂️本文专栏:生活(主要讲一下自己生活相关的内容)生活就像海洋,只有意志坚强的人,才能到达彼岸。 🧙‍♂️本文简述:ONLYOFFICE相信大家已经有所了解,本篇讲一下o…

香橙派orangepi5 定制ubuntu rootfs

问题与需求 公司3588s开发板外设少, 没有usb,网卡,扩展gpio. 需要使用其它3588开发板做验证. 香橙派orangepi5属于性价比很高的开发板. 需要部署环境rosopencv配置; 每次烧录,配置wifi, ip, frpc, 配置环境要30分钟. 问题: 烧录部署一台orangepi5, 需要30分钟, 浪费时间 …

用重建大师生成后的模型,和DLG有点偏差,不是特别吻合,是什么原因?另外这个读取实体多边形失败是为什么?

答:可以先检查下是否有先生成三维模型,三维模型和DLG是否位置是对应一起的。模型可以先检查位置精度是否满足要求。 重建大师是一款专为超大规模实景三维数据生产而设计的集群并行处理软件,输入倾斜照片,激光点云,POS…

参加汽车销售技巧培训师司铭宇老师的课程的总结

参加汽车销售技巧培训师司铭宇老师的课程的总结 作为一名汽车销售人员,我深知销售技巧对于提升销售业绩的重要性。为了进一步提升自己的销售能力,我参加了司铭宇老师的汽车销售技巧培训课程。通过这次课程的学习,我收获颇丰,以下…

计网 - TCP扫盲

文章目录 知识点TCP头格式TCP有限状态机(FSM)为何需要TCP协议TCP的定义TCP连接的概念如何唯一确定一个TCP连接TCP vs UDPTCP拥塞控制TCP流量控制 导图 知识点 TCP头格式 TCP头部包含多个字段,其中一些是必需的,而另一些是可选的…

基于docker容器化部署微服务

前言 在笔者系列文章中微服务配置隔离已经完成服务之间的配置隔离,服务整体来说是已经通了。 为了方便后续测试已经环境统一,笔者本章节会对服务进行容器化部署。由于服务器性能问题,本次部署采用maven完成镜像构建,结合docker-c…

Linux 系统 SSH 和 SCP 服务器搭建、配置、访问以及出现的问题

SSH是Secure Shell的缩写,是一种网络协议,用于通过本地或远程网络在计算机上进行远程登录和命令操作。SSH 是 Telnet 协议的演变:正如其名称所描述的,SSH 是安全的,并对通过网络传输的数据进行加密。 SSH 是目前较为可…

[Halcon模块] Halcon13.0查询算子模块归属

📢博客主页:https://loewen.blog.csdn.net📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢本文由 丶布布原创,首发于 CSDN,转载注明出处🙉📢现…

django实现增删改查分页接口

django实现增删改查分页接口(小白必备) 在上篇文章中我使用nodejs实现了增删改查分页接口,这一篇我们则使用django实现。 1.创建一个django项目,命令如下 python manage.py startapp myapp 2.在你自己的myapp文件夹中的models.py中定义你们自己的模型 f…

【每日一题】2697. 字典序最小回文串-2023.12.13

题目: 2697. 字典序最小回文串 给你一个由 小写英文字母 组成的字符串 s ,你可以对其执行一些操作。在一步操作中,你可以用其他小写英文字母 替换 s 中的一个字符。 请你执行 尽可能少的操作 ,使 s 变成一个 回文串 。如果执行…