【数据结构学习】有关B树

数据结构与算法之B树的机器学习应用 本文旨在探索传统数据结构B树在现代机器学习系统中的创新应用。我们将分析B树如何解决机器学习中的特定问题,特别是在处理大规模特征数据和优化模型训练过程方面的优势。本文不仅涵盖理论分析,还包括实际应用案例和性能优化技巧。文章首先介绍B树的基本概念,然后深入探讨其在机器学习中的具体应用。我们将提供数学建模、算法实现和性能分析,最后讨论未来发展方向。B树:一种自平衡的树数据结构,保持数据有序并允许高效检索、顺序访问、插入和删除机器学习特征:用于描述数据的变量或属性,是模型训练的输入特征存储。 阅读详情

1 概述

从直觉的角度看,二叉搜索树貌似较好地解决了快速搜索的问题,其实不然。如果给定一个关键字序列<1, 2, 3, 4, 5, 6>,要求按照这个顺序构建一个搜索二叉树,则这个二叉树的高度为5,从而退化为一个链表,并且浪费大量的空间。因此,二叉树在具体的实践中几乎没有应用。

针对二叉搜索树的问题,本文主要讲解B树,也会简单提到B+树(有些数据库索引使用B+树)。下面的内容首先介绍B树的背景,然后重点讲解B树上的相关操作(本文大部分内容参考算法导论和维基百科)。

2 背景

B树系列主要用在哪里?答:主要用在文件系统和数据库系统。大家知道,文件和数据库主要存储在磁盘(外存)上,特别是大数据时代,大规模的数据很难一次性导入到硬盘,即使可以导入,其耗费的时间是也无法容忍的(笔者2012年的时候曾经帮一个公司优化过MySQL数据库,在未经优化的前提下,从100万条数据中查询数据都非常耗时)。下面对磁盘上数据的操作基本原理进行解释。

这里写图片描述
图1:机械磁盘
当前应用广泛的机械磁盘如图1所示。数据存储在磁盘盘片上的磁道中,机械磁盘中的盘片围绕机械轴运行,读写磁头定位到需要读写的磁道(机械操作),然后再进行读写操作(电子操作)。机械操作的时间比电子操作的时间要高出5个数量级,因此,读写操作的效率取决于定位磁道(机械操作)的次数,即读写磁盘的次数。因此,降低磁盘读写操作次数是提高读写效率的关键。这时,就需要某种合理的数据组织形式来降低磁盘读写的次数。B树即是解决此类问题的基本数据结构,B树大致的样子如图2所示:

这里写图片描述
图2: B树的长相
与二叉搜索树不同,B树是一颗平衡树,即各子树的高度是一致的,且每个节点中存放的关键字数量t通常远大于2(通常是1000左右)。假设除根节点外的所有节点都存储在磁盘上,一次读写操作访问一个B树节点,对于查找操作,定位到任何一个节点需要访问磁盘的次数不超过树的高度h,如果每个节点中存放的关键字越多,则其高度h越小,即访问磁盘的次数越少,这样就可有效降低读写磁盘的次数。

如果t=1000,则高h为2的B树,其存储的关键字个数达10亿个,定位任何一个关键字需要的磁盘操作树不超过2。

3 B树的结构

B树是一颗有根树(设为T.root),所有节点具有如下性质(有点多,从背景的角度容易理解):

每个节点node具有如下属性:

node.n,存储node中的关键字数量;
node.n个关键字本身node.key1,node.key2, …, node.keyn以非降序的方式存放;
node.leaf是一个布尔值,标示当前节点是否是叶子节点;
每个内部节点(非叶子节点)node包含指向node.n+1个孩子节点的指针node.c1,node.c2,…,node.cn+1;

关键字node.keyi对各子树中的关键字加以分割,假设其左右孩子分别为node.ci、node.ci+1,则node.ci中的所有关键字不大于node.keyi,node.ci+1的所有关键字不小于node.keyi;

每个叶子节点具有相同的深度;

每个节点包含的关键字个数有规定的取值范围,由B树的度d(>= 2)决定:

除根节点外,其它节点至少有d-1个关键字,即除根节点外,所有节点至少包含d个孩子节点。如果树非空,根节点至少又个关键字。(注:这里没有说根节点只有一个关键字)
每个节点至多包含2d-1个关键字。因此,一个内部节点,至多有2d个节点,当一个节点恰好有2d-1个节点时,则称此节点时满的(非常重要,插入删除操作需要关注的重点)
B树的高度h满足: h <= logd((n+1)/2),其证明分析如下图3所示:

这里写图片描述
图3: B树的高度分析过程

4 B树的操作

在B树定义的基础上,如何查询、增加、删除是关键。在后面的算法描述中,引入磁盘读写操作,分别记作diskRead(t,x), diskWrite(t, x),表示从子树t中读写x。

4.1 查询操作:BTreeSearch

查询操作的思路很容易理解:对于子树t,要搜寻关键字key,首先在子树t中寻找,若存在关键字,则返回,若不存在,则定位到对应的子树(假设一次读取一个节点,这一过程要继续读磁盘),递归搜索。其算法描述如下:
BTreeSearch(t, k){ i =1; while i <= t.n and k > t.key[i]{ i++; } if i <= t.n and k == t.key[i] return (t, i); // t表示子树根,i表示这个根节点中的index elif t.leaf return nil; else diskRead(t, c[i]) return BTreeSearch(t.c[i], k); }
显然,BTreeSearch算法的执行时间分为两部分:1)内存类遍历时间O(t);2)读写磁盘次数为O(h),设读取一次磁盘的时间为T,则总的时间为: O(ht) + TO(h).

4.2 插入操作BTreeInsert(t, k)

B树中的插入操作比较麻烦,因为要保持B树的特征不变。其关键在于要保持除根节点外的所有节点的关键字数目满足:d -1 <= n <= 2d,根据这一规则,分情况讨论如下:

如果t为空树,则直接构造一个节点t,并将此节点作为根;
如果t非空,则遍历t中的关键字,寻找插入点,此时情况又分几种情况:

  1. 如果t.leaf = true(为叶子节点),且t.n < 2d,则按照非降序原则插入关键字k;
  2. 如果t.leaf = true,且t.n = 2d - 1,即此节点是满的,则此节点t需要分裂以保持特性,分裂规则为:将关键字为[t.key1,t.key2,…,t.key2d-1]分裂为tleft=[t.key1,t.key2,…,t.keyd-1]、tright=[t.keyd+1,t.key2,…,t.key2d-1]两棵子树,然后将t.keyd插入到其父节点t.p的合适位置location, 并将tleft和tright分别作为t.p.key[location]的左右子树;如果在向父节点t.p插入t.keyd前,父节点已满,则按照此情况继续分裂父节点t.p;
  3. 如果t.leaf = false(为内部节点,非叶子节点),可以有两种思路,一种思路是先检查当前节点是否已满,如果已满,则分裂,然后再插入节点;另一种则是,先定位到需要插入的叶子节点位置,如果叶子节点已满,则分裂,分裂完成之后,再插入节点,分别介绍如下:
    如果t中的节点已满,则按照2)中的方法分裂,分裂后t.key[d]移到父节点t’.key[m],t.key[1]…t.key[d-1]作为t’.key[m]的左孩子left,t.key[d+1]…t.key[2d-1]作为t’.key[m]的右孩子right;然后根据k与t’.key[m]的大小决定插入到哪个子树,若k < t’.key[m],执行BTreeInsert(left, k),反之,则执行BTreeInsert(right, k);
    在t中寻找合适的位置m,使其满足: t.key[m] < k < t.key[m+1]或k < t.key[0];当t.key[m] < k < t.key[m+1]满足时,进入t.key[m]的右子树t.child[m],继续执行BTreeInsert(t.child[m], k);当k < t.key[0]时,进入 t.key[0]的左子树t.child[0],执行BTreeInsert(t.child[0], k);直到叶子节点,然后再从叶子节点逐层向上回溯,判断是否需要逐层向上分裂。(显然,这种方法比前一种方法多了一个回溯判断非叶子节点的情况,但是从总体执行效率上讲,两者是一致的,两种方法分裂的次数是一致的,前一种方法将分裂的情况分摊在每一次的插入操作中了,而后者则有可能在某次操作中执行更多的分裂,总体上而言,前者的均衡效果更好,现实中基本上都采用前者)
    为了不让大家搞晕,请查阅图4所示直观理解。

这里写图片描述
图4:B树中插入节点的过程(d=3)
其算法为:
BTreeInsert(t, k){ r = t.root; if r.n = 2d - 1{ s = allocateNode(); // 构造一个B树节点 t.root = s; s.leaf = false; s.n = 0; s.child[1] = r; BTreeSplitChild(s, 1); // 将t分裂 BTreeInsertNotFull(s, k); // 向非空B树中插入节点 } else BTreeInsertNotFull(r, k); }
分析BTreeInsert,读取磁盘的次数为O(h),分裂B树的次数也为O(h),即写磁盘的次数也为O(h),因此,读写总次数为O(h)

4.3 B树删除

在B树中删除节点时,同样要保持B树的特征,此时,关注的重点是:待删除的节点中,删除节点后,其节点个数是否会小于d-1.如果只满足这个要求,是否会出现问题,下面看一个具体的例子:

这里写图片描述
图5: d=3的B树

若删除关键字为1的元素,则变为:
这里写图片描述

图6: 删除1后的树的情况
非常幸运的是,在这个例子中貌似没有问题,因为根节点的关键字个数可以保持一个,如果图5中的(50, 100)不是根节点,而是内部节点,则删除关键字为1的元素后,图6就违反了B树的特征。

从上面分析可以看出,如果只要求删除节点过程中,仅仅满足节点数不小于d-1,会造成图5->图6变化的问题。

如果在B树T删除k的过程中,始终能够保持当前节点node中数量至少为d,则可以保证不会出现图5图6中那样的问题。在当前节点node中删除k的方法BTreeDelete(node, x)可分为如下几种情况(始终注意当前节点的意义,如下的几种情况明确说明了k是否在当前节点中的情况):

如果node为叶子节点(意味着node.n >=d)且k在node中,则直接删除k;
如果node为内部节点,且k在node中,则分为如下几种情况:
a. 如果node中,k的左孩子left至少包含d个关键字,则以左孩子left为当前节点,寻找left中的最大关键字k’, 执行BTreeDelete(left, k’),并返回k’,以k’代替node节点中的k;
b. 如果node中,k的右孩子right至少包含d个关键字,则以右孩子right为当前节点,寻找right中的最小关键字k’, 执行BTreeDelete(right, k’),并返回k’,以k’代替node节点中的k;
c. 如果node中k的左右孩子关键字均只包含d-1个关键字,则将左右孩子合并即可;
如果关键字k不在当前内部节点node中,若k在树中,则必然在node的某棵子树node.c[i]中。如果node.c[i].n >= d,已满足前面讨论的要求,递归删除即可;若node.c[i].n = d - 1,则要求通过某种操作满足node.c[i].n = d,以规避图5图6中出现的状况,然后继续执行BTreeDelete(node.c[i], k),具体可分为如下两种情况:
a. 若node.c[i].n = d - 1,但它的相邻左兄弟或有兄弟的关键字数量不少于d,则通过node,将左兄弟或右兄弟的某个关键字移至node中(具体移动哪个关键字其实很容易获取),将node中的对应的关键字移至node.c[i]中;
b. 若a不成立,则必然是左右兄弟关键字数量都是d-1,将两者合并即可.
分析这一删除过程,由于在当前子树中删除k时,始终保持了当前子树根节点的个数始终不小于d(整棵树的根节点除外),因此,不会出现在删除过程中向上回溯的过程,即节点中关键字移动控制在当前子树中。同样,在分析的过程中,始终是单向由树根向叶子前进,其访问磁盘的次数为O(h)次(h为树高)。

具体的例子如图7所示:

这里写图片描述
图7:删除节点图示
关于B树中删除元素的方法其实不止这一种,笔者本人最近也在尝试结合概率算法对B树中的操作进行优化,感兴趣的童鞋也可以进一步思考。

5 总结

B树在算法中的地位至关重要,它对高效访问外存提供了坚实的算法基础。在很多场合,童鞋们可能也听说过B+树,B+树其实就是B树的一个变体,其最大的不同之处在于B+树中的所有节点可以看成是索引,最终的数据内容在叶子节点上,且所有叶子节点组成链表的方式,因此,在B+树中寻找节点,可以同时使用B树搜索和链表搜索,结合具体场景,选择一个更加高效的搜索方法。

作者:CodingTech
链接:http://www.jianshu.com/p/c33c3f9fc422
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

数据结构与算法之B树的学习经验分享 B树是一种自平衡的树数据结构,广泛应用于数据库和文件系统中。本文旨在深入探讨B树的核心原理、实现细节以及实际应用,帮助读者全面理解这一重要数据结构。文章将从B树的基本概念入手,逐步深入到算法实现、数学分析、实际应用和优化技巧,最后讨论相关变体和未来发展趋势。B树:一种自平衡的多路搜索树,保持数据有序并允许搜索、顺序访问、插入和删除在对数时间内完成阶数(m):B树中节点最多可以拥有的子节点数目关键字:存储在B树节点中的数据项内部节点:非叶子节点,包含指向子节点的指针叶子节点:不包含子节点的最底层节点。 阅读详情

相关推荐

保姆级教程:在通达信V7.611上配置欧奈尔RPS曲线(附完整公式与每日更新流程)

本文提供通达信V7.611配置欧奈尔RPS曲线的保姆级教程,涵盖从环境准备、基础设置到核心公式配置的全流程。详细讲解如何创建股票池、编写EXTRS基础公式及RPS显示公式,并附每日更新流程与实战应用技巧,帮助投资者精准捕捉强势股。

weixin_30000735的博客 463

B树

http://www.sohu.com/a/280609547_818692 B树:平衡树+查找树+多叉树 B+树:B树+顺序链表 1.为什么要引入平衡性?二叉排序树在数据单调的情况下会退化成链表,为了保证查找效率引入平衡性 2.为什么B树要设计成多路?首先明确的是B树是平衡树和查找树,设计成多路是为了降低树高,设计成多路后每一层存放的节点多了,树高自然就低了,树高低就降低了I/O读取的次数 3....

weixin_45097458的博客 264

用Python+ArcGIS分析厦门共享单车数据:5分钟搞定订单时长与距离分布的可视化

本文详细介绍了如何利用Python和ArcGIS Pro 3.x快速分析厦门共享单车数据,实现订单时长与距离分布的可视化。通过数据清洗、预处理和高级可视化技巧,揭示用户行为特征,为运营优化提供数据支持。文章还提供了环境配置、代码示例和业务洞察,帮助开发者高效完成数据分析任务。

weixin_28327051的博客 337

数据结构-B树

文章目录一、概念二、查找三、插入 平衡二叉树不会退化为线性结构,所以查找效率高,在此基础上设计出了B树 一、概念 B树又称多路平衡查找树,B树中所有结点的孩子结点数的最大值称为B树的阶。 一棵m阶B树或为空树,或为满足如下特性的m叉树: 树中每个结点至多有m棵子树(即至多含有m-1个关键字) 若根结点不是终端结点,则至少有两棵子树 除根结点外的所有非叶结点至少有⌈m/2T⌉棵子树(即⌈m/2⌉-1 个关键字) 非叶子节点结构: 所有叶子节点(失败节点)都出现在同一层次上,并不带任

衍射的博客 343

《科研伦理与学术规范》期末考试答案2023

26单选(2 分)某学术杂志的评稿人同时是某高校相关专业的硕士生导师,在评判一个稿件的时候,他发现该作者研究的题目很有价值, 他便一边压下这个稿子,一边将稿子的纲要传给自己门下的硕士生, 指导他们使用这个题目独立写出一篇论文,并帮助他们发表在其他期 刊上。D.要善待实验动物,是指在饲养管理和使用实验动物过程中,要采取有效措施,使实验动物免遭不必要的伤害、饥渴、不适、惊恐、折磨、疾病和疼痛,保证动物能够实现自然行为,受到良好的管理与照料,为其提供清洁、舒适的生活环境。张某在压力之下不得不屈从。

Glenseeds的博客 4万+

深入解析Matlab phantom函数:从基础模体到自定义头部仿真

本文深入解析了Matlab中的phantom函数,它是医学图像处理算法测试的核心工具。文章详细介绍了如何使用内置的Shepp-Logan及其改良版头部仿真模体,并重点讲解了通过自定义参数矩阵来构建专属模体的方法。通过从生成模体到模拟投影(正弦图)再到图像重建的完整实战流程,展示了phantom函数在CT等算法开发与验证中的关键作用。

m3n5b7v8c9x的博客 950

将二叉树拆成链表

/* 问题描述:将一棵二叉树按照前序遍历拆解成为一个假链表。所谓的假链表是说,用二叉树的 right 指针,来表示链表中的 next 指针。 来源:LintCode 作者:syt 日期:2017-11-13 思路:通过后序遍历,先对左子树进行转换,在对右子树进行转换,在变成链表时,若该节点root的左子树为NULL,则不用操作,若左子树不为空, 找到左子树的叶子节点tmp,将该节点ro

孙小小子的博客 265

保姆级拆解:HP 1312NF/CM1415打印机进纸离合器清洁与更换全记录(附B站/油管视频指路)

本文详细记录了HP 1312NF打印机进纸离合器故障的诊断与修复全过程,包括故障判断、工具准备、拆解步骤、清洁更换技巧及预防措施。特别针对离合器内部海绵老化粘连问题,提供了电工胶布和硬纸片两种实用替代方案,并附有B站/油管视频指路,帮助用户轻松完成打印机维修。

weixin_31102231的博客 376

【八股文】HashMap相关考点

1.HashMap的底层是用什么实现的?答:jdk1.7之前是用的数组+链表,jdk1.8之后是是数组+链表+红黑树。1.1 为什么会用红黑树?答:当多个键的哈希值散列到同一个数组的位置时,插入和删除的时候会退化到O(N)的复杂度,而如果用红黑树会将查询,插入和删除的复杂度降低到O(logN)。而为什么红黑树能够做到这一点,因为红黑树又叫自平衡的二叉搜索树。而二叉搜索树满足左边节点都小于根节点,右边节点都大于根节点的值。

qq_45249273的博客 1268

HDMI协议介绍(二)--DataIsland Packets

前文简单介绍了HDMI传输的三个周期:控制周期、DataIsland周期和Video周期。DataIsland传输音频和辅助数据,这些数据以Packet的形式传输。本文简单介绍DataIsland Packet。

SlamDunk的博客 5674

UE5新手必看:如何在UMG控件中嵌入浏览器实现Web页面展示(附完整步骤)

本文为UE5新手提供了在UMG控件中无缝集成Web浏览器的完整实战指南。详细介绍了从启用WebBrowser插件、创建并配置WebBrowser控件蓝图,到编写动态加载与交互逻辑,以及在游戏关卡中实例化UI的全过程。文章还分享了性能优化技巧与常见问题排查方法,帮助开发者高效实现游戏UI内的Web页面展示与交互。

weixin_29243063的博客 710

面试题27:二叉搜索树与双向链表

题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。比如输入下图中左边儿茶搜索树,则输出转换后的排序双向链表。 10 / \ 6 14 / \ / \ 4 8 12 16 4=6=8=10=12=14=16  将二叉搜索树转化为有序双向链表,类似于中序遍历,中序遍...

weixin_33827731的博客 367

基于Pycatia的智能孔特征识别技术:无参模型圆心自动化提取方案

基于Pycatia的智能孔特征识别技术:无参模型圆心自动化提取方案

KE17RS的博客 2877

数据结构学习——红黑树、B+树、hash

红黑树要满足以下条件:1.树中的节点都是红色或者黑色2.红色节点不能相邻3.所有的都是4.从任意节点到叶子节点的5.红色节点的两个叶子节点是黑色节点。

niudeyipi的博客 872

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

数据结构学习笔记之B树与B+树

B树与B+树,与二叉排序树一样,也常用于查找算法中,本文学习这两种结构的基本概念与基本操作。

御承扬的博客 1万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

【数据结构】图解2-3树(学习红黑树、B树的基础)

一、基本介绍 2-3树:满足二分搜索树的基本性质,是一颗绝对平衡的树,节点可以存放一个或两个元素,每个节点有2个或3个孩子(如果对二分搜索树不太了解,可以去看这篇文章【数据结构】二分搜索树小结) 如下图所示都是2-3树,左边是节点存放了一个元素,右边是节点存放了两个元素,对于右边的图,左子树<b,中间的孩子树则在b、c之间,右孩子则大于c。 ...

offer! 1176

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【高阶数据结构学习笔记】高阶数据结构之B树B+树B*树

摘要:本文介绍了B树、B+树和B*树三种高阶数据结构,重点分析了B树的插入过程。B树是一种多路平衡搜索树,适用于外存数据存储,能有效降低树高和磁盘访问次数。文章详细讲解了B树的6个性质、节点结构,并通过示例展示了插入操作的分裂过程,最后给出了查找算法的伪代码实现。这些数据结构在大规模数据存储和高效检索场景中具有重要应用价值。

大白的编程日记. 950

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

B树、B+树的定义及基本操作,对比

小人物,大梦想! 1118

408数据结构学习笔记——B树、B+树、散列表

1.B树 2.B+树 3.散列表

JiangNan_1002的博客 4398

数据结构学习系列 -- 漫画B B+树

最近在梳理数据结构的相关知识,在梳理到B树时发现网上有一篇图文并茂介绍B树相关知识的文章,特转载自此。原文链接。 一个m阶的B树具有如下几个特征: 根结点至少有两个子女。 每个中间节点都包含k-1个元素和k个孩子,其中 m/2 <= k <= m 每一个叶子节点都包含k-1个元素,其中 m/2 <= k <= m 所有的叶子结点都位于同...

ydm东方旭日的专栏 4496

认真学习数据结构之B/B+/B*树

前面我们学习了二叉树、AVL树、23树以及红黑树等。接下来我们研究B树/B+树。 # 【1】多路查找树 这里我们首先引入多路查找树的概念。多路查找树(MuitlWay Search Tree)是二叉树的演进,也就是允许一个节点存储一个以上的key。比如前面我们学习的23树,其就是一个一棵多路查找树。 二叉树中每个结点有一个数据项,最多有两个子节点。如果允许树的每个节点可以有两个以上的子节点,那么这个树就称为n阶的多叉树,或者称为n叉树。 **那么为什么演进多路查找树呢?** 有没有那么一个场景,

小小默:进无止境 1128

算法与数据结构学习(46)-B树、B+树和B*树

B树的介绍 B-tree树即B树,B即Balanced,平衡的意思。有人把B-tree翻译成B-树,容易让人产生误解。会以为B-树是一种树,而B树又是另一种树。实际上,B-tree就是指的B树。 前面已经介绍了2-3树和2-3-4树,他们就是B树(英语:B-tree 也写成B-树),这里我们再做一个说明,我们在学习Mysql时,经常听到说某种类型的索引是基于B树或者B+树的,如图: B树的说明:...

九岁ya的博客 2478

数据结构学习笔记——查找算法中的树形查找(B树、B+树)

B树和B+树属于树形查找算法中的一种,主要用于数据库系统、文件系统和磁盘存取等方面,都是用于存储和索引大量的数据,以提高检索效率。例如,在磁盘存储中,通过将数据分散到多个磁盘块中,并使用树形结构来组织这些磁盘块,从而提高了查找速度和查找效率。若设B树中所有结点的孩子结点个数的最大值为m,则该B树是一棵m阶B树,另外B+树则是B树的变形。B+树可以由分块查找推广,所以也称为多级分块查找,即m阶B+树,它是B树的变形,与B树相同,B树和B+树都是平衡的多叉树,都用在文件索引结构和数据库索引中,但B+树更加适用。

小宇y的博客 3195

每日学习一个数据结构-B+树

B+树是一种自平衡的树数据结构,广泛应用于数据库和操作系统的索引结构中,特别是在MySQL的InnoDB存储引擎中。它通过保持数据排序,使得搜索、插入、删除等操作都能在对数时间内完成。

wendao76的专栏 2202

数据结构学习——浅谈B树的一些相关总结

B-树 —— 平衡的多叉搜索树。 1.优势: 如果一个节点中保存的信息多一些,那么树的高度就会降低;多个孩子节点指针意味着降低了树的高度(提高查找效率) 数据节点多一些,相应的也会降低IO次数。我们应该知道的是Mysql这些数据库的索引的底层实现部分就是用B-树这种结构来实现的。 2.规则: 一棵m阶B树(balanced tree of order m)是一棵平衡的m路搜索树。它或者是...

现从事游戏开发领域 | 团队项目be_with开发进行中 web方向感兴趣者私 ——We can do all things. 548

【算法学习笔记】高级数据结构 B树

参考算法导论第18章 B树

memcpy0的博客 977
上一篇: Codeblocks environment error编译器找不到问题解决方法
下一篇: 【数据结构学习】线性表
Algorithm_goddness
博客等级 码龄10年 25粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Algorithm_goddness

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值