B树和B+树的详解讲解

news2024/11/18 19:34:21

1.B树

前面我们已经学习了二叉查找树、2-3树以及它的实现红黑树。2-3树中,一个结点做多能有两个key,它的实现红黑树中使用对链接染色的方式去表达这两个key。接下来我们学习另外一种树型结构B树,这种数据结构中,一个结点允许多于两个key的存在。
B树是一种树状数据结构,它能够存储数据、对其进行排序并允许以O(logn)的时间复杂度进行查找、顺序读取、插入和删除等操作。

2.1 特性

B树中允许一个结点中包含多个key,可以是3个、4个、5个甚至更多,并不确定,需要看具体的实现。现在我们选择一个参数M,来构造一个B树,我们可以把它称作是M阶的B树,那么该树会具有如下特点:
每个结点最多有M-1个key,并且以升序排列;
每个结点最多能有M个子结点;
根结点至少有两个子结点;

在这里插入图片描述

2.2 存储数据

若参数M选择为5,那么每个结点最多包含4个键值对,我们以5阶B树为例,看看B树的数据存储。
在这里插入图片描述

2.3 B树的应用

在我们的程序中,不可避免的需要通过IO操作文件,而我们的文件是存储在磁盘上的。计算机操作磁盘上的文件是通过文件系统进行操作的,在文件系统中就使用到了B树这种数据结构。

2.B+树

2.1 B+树和B树区别

B+树是对B树的一种变形树,它与B树的差异在于:

  1. 非叶结点仅具有索引作用,也就是说,非叶子结点只存储key,不存储value;
  2. 树的所有叶结点构成一个有序链表,可以按照key排序的次序遍历全部数据。

2.2 B+树存储数据

若参数M选择为5,那么每个结点最多包含4个键值对,我们以5阶B+树为例,看看B+树的数据存储。
在这里插入图片描述

2.3 B+树和B树的对比

B+ 树的优点在于:
1.由于B+树在非叶子结点上不包含真正的数据,只当做索引使用,因此在内存相同的情况下,能够存放更多的key。 2.B+树的叶子结点都是相连的,因此对整棵树的遍历只需要一次线性遍历叶子结点即可。而且由于数据顺序排列并且相连,所以便于区间查找和搜索。而B树则需要进行每一层的递归遍历。
B树的优点在于:
由于B树的每一个节点都包含key和value,因此我们根据key查找value时,只需要找到key所在的位置,就能找到value,但B+树只有叶子结点存储数据,索引每一次查找,都必须一次一次,一直找到树的最大深度处,也就是叶子结点的深度,才能找到value。

2.4B+树的应用

应用在数据库中。
在数据库的操作中,查询操作可以说是最频繁的一种操作,因此在设计数据库时,必须要考虑到查询的效率问题,在很多数据库中,都是用到了B+树来提高查询的效率;在操作数据库时,我们为了提高查询效率,可以基于某张表的某个字段建立索引,就可以提高查询效率,那其实这个索引就是B+树这种数据结构实现的。
例:

执行select * from user where id>=12 and id<=18 ,如果有了索引,由于B+树的叶子结点形成了一个有序链表,
所以我们只需要找到id为12的叶子结点,按照遍历链表的方式顺序往后查即可,效率非常高。
在这里插入图片描述

参考:黑马程序员Java数据结构与java算法

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

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

相关文章

Java LinkedList

链表&#xff08;Linked list&#xff09;是一种常见的基础数据结构&#xff0c;是一种线性表&#xff0c;但是并不会按线性的顺序存储数据&#xff0c;而是在每一个节点里存到下一个节点的地址。 链表可分为单向链表和双向链表。 一个单向链表包含两个值: 当前节点的值和一个…

linux软件安装

软件安装1.安装方式2.安装jdk3.安装Tomcat4.安装mysql5.安装lrzsz1.安装方式 2.安装jdk &#xff08;1&#xff09;使用 Xftp 将jdk的二进制包上传到 Linux。 关于 Xftp 的下载和安装看这里&#xff1a; https://blog.csdn.net/weixin_56680764/article/details/126335138 本文…

C++:using : using的四大用法总结

1&#xff1a;using声明&#xff08;引入单个名称&#xff09; using声明是将命名空间中某个名字单独引入到当前作用域&#xff0c;这使得我们在当前作用域下可以直接使用该名字而无需使用作用域限定符 :: 。 #include <string> using std::string; int main() {string…

TKDE2022 | 基于关系的协同过滤算法,利用注意力机制来学习物品关系的嵌入特征...

嘿&#xff0c;记得给“机器学习与推荐算法”添加星标鉴于经典的协同过滤算法的有效性和易用性&#xff0c;基于物品的协同过滤方法已被广泛应用于工业领域&#xff0c;并在近年来被广泛研究。基于物品的协同过滤方法的关键在于物品之间的相似度测量&#xff0c;但本文认为这是…

推荐系统学习笔记-推荐系统数据流

一般数据流 数据流的定义 数据流&#xff08;data stream&#xff09;是一组有序&#xff0c;有起点和终点的字节的数据序列。包括输入流和输出流。数据流最初是通信领域使用的概念&#xff0c;代表传输中所使用的信息的数字编码信号序列。这个概念最初在1998年由Henzinger提…

《软件开发本质论》笔记——如何衡量价值

目录 一、使用数值来表示价值的做法 二、大多数与金钱有关的衡量指标的局限性 三、有没有一个简单的衡量方式 四、价值评估更好的做法 个人理解的价值 一、使用数值来表示价值的做法 这种方式可能让我们滑入深渊。 比如 如果公司开发产品的目的是赚钱&#xff0c;那么就可…

记一次:Keepalived安装高可用操作

前言&#xff1a;现在有许多现成的高可用产品&#xff0c;比如阿里的产品等等&#xff0c;直接购买就可以使用。这个只是笔者自己私下练习使用&#xff0c;成功了。所以记一次总结过程 安装方式一 下载安装包&#xff1a;https://keepalived.org/download.html网址下载2.2.7版…

【小程序】第一个小程序——创建小程序项目

目录 小程序简介 第一个小程序 安装开发者工具 创建小程序项目 小程序简介 1. 小程序与普通网页开发的区别 2. 体验小程序 可使用手机微信(6.7.2 及以上版本)扫码下方小程序码&#xff0c;体验小程序&#xff1a; 第一个小程序 1. 点击注册按钮 使用浏览器打开 https…

【大数据技术】Spark MLlib机器学习库、数据类型详解(图文解释)

机器学习的定义 机器学习是一种通过利用数据&#xff0c;训练出模型&#xff0c;然后使用模型预测的一种方法。机器学习的构建过程是利用数据通过算法构建出模型并对模型进行评估&#xff0c;评估的性能如果达到要求就拿这个模型来测试其他的数据&#xff0c;如果达不到要求就…

【图神经网络】Pytorch图神经网络库——PyG基础操作

Pytorch图神经网络库——PyG基础操作图数据处理常用的基准数据库Mini-BatchesData Transforms图学习方法参考资料PyG&#xff08;PyTorch Geometric&#xff09;是一个基于PyTorch构建的库&#xff0c;可轻松编写和训练图神经网络&#xff08;GNN&#xff09;&#xff0c;用于与…

【Web安全】访问控制

目录 1、权限与授权 2、垂直权限管理 3、水平权限管理 4、OAuth 1、权限与授权 权限控制&#xff0c;或者说访问控制&#xff0c;指的是当用户需要执行某个操作时&#xff0c;系统对这种操作的权限限制就是权限控制。 在网络中&#xff0c;一般是通过路由设备或者防火墙建立…

[oeasy]python0031_挂起进程_恢复进程_进程切换

查看进程 回忆上次内容 上次修改了 $PATH 路径 把当前用户shiyanlou的宿主文件夹 ~ 添加到 $PATH 中这样 sleep.py 就可以被找到于是就可以被执行了 还可以把配置 $PATH 的脚本 放到 zsh的配置文件(~/.zshrc) 中 配置 ~/.zshrc 就可以 设置 zsh 环境下默认的 $PATH 在当前路径…

攻防世界-easytornado

题目 访问题目路径 分别点击一下看看 然后我去百度了一下md5(cookie_secretmd5(filename))发现这是一个叫模板注入的东西 什么是模板 简单来说&#xff0c;就是网站内容的动态部分&#xff0c;如果有一个网站的内容几乎相同&#xff0c;但只有某些部分发生改变&#xff0c;那么…

javaweb学习之会话技术CookieSession05

目录 1.会话技术 2.快速入门 3.实现原理 4.cookiel的细节 2.cookie能不能存中文 3.cookie共享问题 4.Cooie的特点和作用 5.综合案例 记录上一次访问时间 1.会话技术 1会话&#xff1a;一次会话中包含多次请求和响应。 *一次会话&#xff1a;浏览器第一次给服务器资源发…

新冠确诊阳性后的第二篇博客,一文带你学习文件上传漏洞

新冠确诊阳性后的第二篇博客&#xff0c;一文带你学习文件上传漏洞1.什么是文件上传漏洞2.不要使用黑名单规定上传文件类型3.绕过文件上传检查功能4.Apache文件解析问题5.IIS文件解析问题6.设计安全的文件上传功能1.什么是文件上传漏洞 文件上传漏洞是指用户上传了一个可执行的…

RabbitMQ管理界面

&#x1f341;博客主页&#xff1a;&#x1f449;不会压弯的小飞侠 ✨欢迎关注&#xff1a;&#x1f449;点赞&#x1f44d;收藏⭐留言✒ ✨系列专栏&#xff1a;&#x1f449;Linux专栏 &#x1f525;欢迎大佬指正&#xff0c;一起学习&#xff01;一起加油&#xff01; 目录&…

记录我の秋招之旅【23届 CV算法岗】

文章目录碎碎念春招实习华为实习魔幻秋招尘埃落定碎碎念 今年(2022年)的秋招不能说"非常困难"吧&#xff0c;只能说是"地狱难度"&#xff0c;相信参与或者从侧面了解过的同学们也能感同身受。从今年的三月份开始着手秋招&#xff0c;期间也一直忙着实验室…

【基于Transformer和可逆神经网络】

Effective Pan-Sharpening With Transformer and Invertible Neural Network &#xff08;基于Transformer和可逆神经网络的有效泛锐化&#xff09; 可逆神经网络1 可逆神经网络2 在遥感成像系统中&#xff0c;全色锐化是从高分辨率全色图像及其对应的低分辨率多光谱图像获得…

30岁之后想转行,可行吗?这20条建议让你少走弯路!

都说三十而立&#xff0c;可眼看着到了意气风发的年龄&#xff0c;却突然意识到自己仍一事无成&#xff0c;甚至连养活自己都是问题。30多岁&#xff0c;大多数人还要开始买房、买车、结婚生子&#xff0c;养家糊口&#xff0c;于是各种压力逼迫之下&#xff0c;就想到了转行&a…

移动硬盘中安装ubuntu系统——Vmware Workstation安装

一. 简介 对于一个程序开发者来说&#xff0c;电脑系统开发环境非常重要。要使用相同的系统环境&#xff0c;可以的方式有&#xff1a;1、携带电脑&#xff0c;2、携带安装了系统的移动硬盘。相比来说&#xff0c;第二种方式更理想&#xff0c;如果是第一种方式携带电脑的话&a…