b - 数据结构实验之查找二:平衡二叉树_文件系统的灵魂数据结构 B树

其实平衡二叉树的代码实现已经挺复杂的了,但是一山更比一山高,B树算法的原理和代码实现都比平衡二叉树要更为复杂。

我没有让大家知难而退的意思,面试的时候肯定不会让你写B树这么复杂的算法,大家先听我讲讲B树这种数据结构的思想吧。

一看文章标题就知道B树与文件系统的实现有很大关系,这个还是挺重要的。代码实现可能后面我会补上,其实意义也不大,真的f60c1656c62989c31c13bcf165bcbc3f.png

先声明一点:B-tree树即B树。B即Balanced平衡,因为B树的原英文名称为B-tree,而国内很多人喜欢把B-tree译作B-树,这是个非常不好的直译,很容易让人产生误解,人们可能会以为B-树和B树是两种树。

B树产生的背景不管是二叉树、二叉查找树还是平衡二叉树,它们都有诸多限制,比如:
  • 每个结点只能存储一个元素。

  • 结点的度至多为2,即使是平衡二叉树,在存储百万、千万级别的数据量时,也会导致树的深度特别大,而深度大就会影响查找效率。

这里提一下平衡二叉树的缺点:由于平衡二叉树需要左旋和右旋来调整树的结构,因此在频繁插入和删除的场景下,每插入或删除一个结点,都极有可能导致树的不平衡,性能也会大打折扣。红黑树(后面会介绍)就是来解决这个问题的。

28d4b7b1876d9585479bd6e9d994c667.png

前面讲的几种数据结构,都是纯内存操作,但是当数据量特别大(如数据库中千万级别的数据表、磁盘中的上万个文件等),内存都存不下了怎么办?在这种情况下,需要用外存(硬盘)来存储,而对数据的处理则需要不断地从硬盘调入调出。

此时,时间复杂度的计算就会发生变化,因为还要额外考虑对硬盘的访问次数和单次访问时间等。

为了降低对硬盘的访问次数,需要设计新的数据结构。前面讲的几种树,结点都只能存一个元素,因此,当元素非常多的时候,要么结点的度非常大,要么树的深度非常大,这两种情况都会导致对硬盘的访问次数偏大。如果每个结点能存多个元素,那么树的总结点数就会大大减少,对磁盘的访问次数也会相应的大大减少。

由于有如上限制,为此引入了多路查找树的概念。

多路查找树:结点的度可以大于2,并且每一个结点可以存储多个元素。由于是查找树,所以结点之间存在某种特定的排序关系。

B树的基本概念本文要讲的主题是B树,B树是一种平衡的多路查找树。其实B树和多路查找树是一个意思,网上很多资料也是这样认为的,但是也可以认为多路查找树和B树不是一个意思,因为多路查找树不一定是平衡的。B树的阶:所有结点中的最大孩子数。其实跟树的度一个意思。一个m阶B树的属性:
  • 如果根结点不是叶子结点,则其至少有两颗子树。

  • [m/2]<=k<=m,[m/2]为向上取整,比如9阶B树,5<=k<=9。每一个非根分支结点都有k个孩子和k-1个元素;叶子结点有k-1个元素。

  • 所有叶子结点在同一层(平衡)。

  • 所有分支结点有下列信息数据:(n,A0,K1,A1,K2,A2,...,Kn,An),n是结点存储的元素个数,Ai表示子树,Ki表示元素,而从A0到An的值是从小到大排序的,这跟二叉查找树的性质一样。

下面来演示一下如何在B树上查找元素,如下图,是一颗B树。

9f30e246c94159176bd3a72573666fcf.png

  1. 如果要查找元素7,首先从硬盘上读取根节点(第一次读磁盘)

  2. 即读到了3,5,8三个元素,发现7并不在其中,但由于5<7<8,因此找到了A2,然后根据A2再读取一次硬盘(第二次读磁盘)

  3. 此时读到了2,6,7三个元素,找到了元素7

两次磁盘读取就查找了我们想要的元素,非常高效,B树就是这样一种为内外存数据交互为设计的数据结构。

本文介绍了B树产生的背景和基本概念,下一篇文章将介绍B树结点的插入和删除操作,以及后面将陆续介绍B+树、红黑树等。

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

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

相关文章

计算机技术如何设计酶,百人学者Nature Chemical Biology发文,发现一种设计酶的新方法...

生物通报道&#xff1a;中科院微生物研究所&#xff0c;荷兰格罗宁根大学的研究人员发表了题为“Computational redesign of enzymes for regio- and enantioselective hydroamination”的文章&#xff0c;利用计算机方法重新设计了天冬氨酸酶&#xff0c;将其转化为不对称加氢…

全国计算机二级哪几门比较热,【热】全国计算机二级office难吗

摘要&#xff1a; 【热】全国计算机二级office难吗为你介绍计算机二级office难吗 计算机二级office比较难&#xff0c;计算机二级office考试通过率大致在22%左右&#xff0c;具有一定难度。想要通过考试&#xff0c;需要多刷计算机二级office真题。 计算机二级office考试难度对…

word总页数不包含封面_6个实用的word模板,让你快速制作表格和目录

Word是我们日常办公经常用到的一款软件&#xff0c;word中自带了一些常用操作的模板&#xff0c;可以方便我们快速实现相应的需求&#xff0c;而且颜值也会提升一个档次&#xff0c;但是不过我们很多朋友都不太知道&#xff0c;今天就给大家盘点一些word中都有哪些好用的模板&a…

前端面试技巧和注意事项_前端面试百分之九十九过的技巧

2020最全的前端面试指南&#xff0c;一个多月 1.8w 字的面试经验积累&#xff0c;凭借它最终成功入职大厂……今年的金三银四刚好赶上疫情&#xff0c;很多大公司都停止招聘甚至裁员&#xff0c;想跳槽的小伙伴被打的措手不及。需求减少要求肯定随之提高&#xff0c;谨以此面经…

node获取服务器cpu信息,听说你不知道如何监控Node服务的内存?

刚开始&#xff0c;先抛出一个问题&#xff1a;你知道你们生产环境的 Node 服务平时占用内存多少吗&#xff1f;或者说是多少量级&#xff1f;山月在面试 Node 候选人时&#xff0c;这个问题足够筛掉一半的自称Node精通者&#xff0c;不过没有回答上来&#xff0c;我往往会再补…

调python返回图片_三个好习惯,帮你写好Python里的异常处理

如果你用 Python 编程&#xff0c;那么你就无法避开异常&#xff0c;因为异常在这门语言里无处不在。打个比方&#xff0c;当你在脚本执行时按 ctrlc 退出&#xff0c;解释器就会产生一个 KeyboardInterrupt 异常。而 KeyError、 ValueError、 TypeError 等更是日常编程里随处可…

如何调位置_如何知道手表是偷停还是真没动力了?看完之后你在家也能测

导读&#xff1a;石英表如果出现偷停情况&#xff0c;通常是这几个地方出现问题&#xff1a;一、线路板接触不良&#xff1b;二、电池未安装到位&#xff1b;三、电池电量不足&#xff1b;四、受力导致的电池接触不良等&#xff1b;解决方案&#xff1a;一、修复或更换线路板&a…

怎么安装aptdaemon模块_自己开发一个React Native 模块

大纲为什么需要 React Native Module如何创建一个 React Native的模块编写 Android Toast 功能模块如何调试 React Native 模块---------官方文档中未提及或者我没有找到&#xff0c;这里是我自己探索的npm 发布一个 React Native 模块&#xff08;外链接&#xff09;为什么需要…

语言ppt课件猜拳_八年级语文上册第22课 孟子三章讲解及课件下载

八年级语文上册【第一单元】八年级语文上册第1课《消息二则》讲解及PPT课件下载八年级语文上册第2课《首届诺贝尔奖颁发》讲解及PPT课件下载八年级语文上册第3课《“飞天”凌空》讲解及PPT课件下载八年级语文上册第4课《一着惊海天》讲解及PPT课件下载八年级语文上册第5课《国行…

读取txt原理_Mysql客户端任意文件读取学习

前言最近打了 DDCTF和 国赛&#xff0c;发现都考了一个知识点&#xff0c;也就是 MysqlLocalInfile客户端文件读取这个漏洞&#xff0c;下面来详细的学习一个这个漏洞。漏洞形成原因此漏洞形成的主要原因在于 LOAD DATA INFILE这个语法上。在官方文档中的介绍为&#xff1a;该L…

jar包 jdk 停_一文读懂jar包的小秘密

简介java程序员每天不是在创建jar包就是在创建jar包的路上&#xff0c;并且各种依赖引用都是以jar包的形式展示的。但是随着现代IDE的出现&#xff0c;我想很多程序员已经基本上很少直接和jar包打交道了。换句话说&#xff0c;他们已经不认识jar包了。那么jar包到底是什么呢&am…

逻辑代数01律的理解_零基础学习计算机原理:布尔逻辑和逻辑门

Hello World&#xff01;我是老乔&#xff0c;欢迎来到超智星球。在这里&#xff0c;每篇都学一个小知识。微号&#xff1a;超智星球 网站:http://chaozhixingqiu.com这期呢&#xff0c;还是计算机原理系列&#xff0c;上期最后讲到了自动制表机和IBM。本期接着讲计算机历史。#…

文本标点英文对齐_电脑健盘中的所有英文组合意思超值解释建议收藏

电脑键盘上所有英文键的意思1、Esc :取消和退出键2、Tab :表格键切换键3、Caps Lock :字母大小写切换键4、Shift :转换键5、Ctrl: 控制键&#xff0c;需要配合其他键或鼠标使用&#xff0c; 例如复制CtrIC6、Alt: 可选(切换)键&#xff0c;-般与其它键组合使用&#xff0c; 例如…

众辰变频器参数设定_变频器被加密了怎么办?这20个品牌都可以解密

1、西门子6SE70书本型变频器&#xff1a;设定密码打不开时&#xff0c;将P358和P359中数据改为相同即可。2、ABBACS600变频器&#xff1a;在16.03参数中输入密码“23032”&#xff0c;102.01参数设置为false&#xff0c;可以进入设定所有主控板参数。3、三菱740系列变频器&…

怎么实现注解_通透!一口气搞懂注解到底怎么用

日志脱敏场景简介在日志里我们的日志一般打印的是 model 的 Json string&#xff0c;比如有以下 model 类public class Request { /** * 用户姓名 */ private String name; /** * 身份证 */ private String idcard; /** * 手机号 *…

嵌套饼图_你真的了解matplotlib吗?---环形图

环形图简介环形图是饼图衍生出来的统计图形&#xff0c;可以看作是两个以上饼图的叠合。环形图与饼图类似&#xff0c;其实是有差别的。饼图是用圆形及圆内扇形的面积来表示数值大小的图形&#xff0c;主要用于表示总体中各组成部分所占的比例。与之对比&#xff0c;环形图中间…

JAVA入门级教学之(零基础了解计算机)

JAVA小白入门级教学&#xff08;零基础了解计算机基础知识&#xff09; 多动手自己操作&#xff0c;一点一点积累 首先我们了解一下计算机的基础知识 1.计算机构成&#xff08;基础&#xff09;&#xff1a; 硬件&#xff1a;CPU、内存、硬盘、鼠标、显示器、鼠标等&#x…

JAVA入门级教学之(JAVA程序的加载和运行)

JAVA程序的加载和运行 多思考多动脑&#xff08;边参考文章最后的示意图&#xff0c;边按步骤理解&#xff09; 1.JAVA程序的加载和运行包括两个非常重要的阶段&#xff1a; 编译阶段运行阶段 2.我们先来了解一下什么是编译阶段&#xff1a; 首先&#xff0c;我们自己动手敲…

abstract类中可以有private的成员_C++|static成员与单例模式

如果需要一个全局对象&#xff0c;如对话框、系统日志、显卡等设备的驱动程序对象、一台PC连接一个键盘等。这样的全局对象只能是一个且是全局的&#xff0c;这就是单例模式&#xff0c;如何实现呢&#xff1f;1 不能在类外部通过构造函数新建对象&#xff1a;构造函数的访问方…

JAVA入门级教学之(JDK安装-JDK、JRE、JVM)

1.下面我们开支安装JDK【JDK开源、免费】 安装地址&#xff1a;https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 选择 Windows x64-->jdk-8u221-window-x64.exe 下载 下载完成后 双击JDK安装包-->进入安装界面&#xff08;…