关于B树、B+树的学习总结以及一些闲谈

弦外之音

目前处于大三的寒假,正在备考2021年12月的研究生招生考试,同时还要着手准备中级软考 + 二刷六级。惆怅、苦闷,生活各种艰辛,好在选择的是自己喜爱的,没有借口去逃避。总觉得自己挺菜的,真正做选择的时候又心有不甘、自命不凡,所以还是想着重开吧,去考研,去新的环境,去博来自己想要的生活。。。
由于复习初试,电脑已经吃灰数月,今天是碰巧复习到B树、B+树,想着来整个summary,顺带写点儿代码。插一脚,博主准备了一份计算机、软工考研择校相关的资料,极其用心,有需要者可以联系博主,希望能够帮到你。
下面进入主题~

前言

首先进行知识梳理。
搞清楚B树是什么,下面是某度某热心网友给的答案:
在这里插入图片描述

貌似有点问题?下面小张来解释一下:

1、B树的定义

B树,又称多路查找树,B树中所有结点的孩子个数的最大值称为B树的,通常表示为一颗m阶树空树(强调空树是因为图不能为空图)。
通俗来讲就是指小树苗里最有出息的那个结点拥有的子树的数量作为阶数。下面看示例:
在这里插入图片描述
这棵B树中,每个树除根结点以外的结点都有两个关键字(结点内的数字),那么任取某个2个关键字的结点,都有三个子树,所以最大有三个子树,称之为三阶B树。同样的下面这棵树因为有一个结点有3个关键字,有4个子树,所以称之为四阶B树。
在这里插入图片描述

2、B树的特性

  1. 树中每个结点至多有m棵子树,即至多含有m-1个关键字。
  2. 若根结点不是终端结点,则至少有两棵子树。
  3. 除根结点以外的所有非叶结点至少有**m/2(向上取整)棵子树,即至少含有(m/2)-1(向上取整)**个关键字。
  4. 所有非叶结点结构如下:[外]议将图片上https://传(imblog.csdnimg.cnRGpB0210118185119846.pn)(https://img-bl0og.csdnimg.cn/20210118185119846.png)]其中,Ki(i=1,2,····,n)为关键字,且满足 K1<K2<···<Kn;Pn(i=1,2,···,n)为指向子树根结点的指针,且指针 Pi-1 所指子树中的所有结点的关键字均小于 Ki,Pi 所指子树中的所有结点的关键字均大于 Ki,n 为结点中关键字的个数。
  5. 所有的叶结点都出现在同一层次上,并且不带信息。(可以视为外部结点或类似于折半查找判定树的失败结点,实际上这些结点不存在,指向这些结点的指针为空。在计算B树高度时,也不包括这一层。

3、B树的性质

  1. 结点的孩子个数等于该结点关键字个数加1。
  2. 如果根结点没有关键字就没有子树,此时 B 树为空;如果根结点有关键字,则其子树必然大于等于两棵。
  3. 结点中关键字从左到右递增有序,关键词为子树构成了一些去心邻域。
  4. 所有叶结点均在最后一层,代表查找失败的位置。

4、B树的高度(磁盘存取次数)

B 树中的大部分操作所需的磁盘存取次数与 B 树的高度成正比。
树的高度有一个范围:
(logm)(n+1) <= h <= (log(m/2))((n+1)/2+1)
若考研可继续深究,否则了解即可。

5、B树的查找

与二叉查找树类似,只是每个结点都是多个关键字的有序表,在每个结点上所做的不是两路分支决定,而是根据该结点的子树所做的多路分支决定。
B 树的查找包含两个基本操作:
1、在 B 树中找结点;
2、在结点内找关键字。
由于 B 树常存储在磁盘上,因此前一个查找操作是在磁盘上进行的,而后一个查找操作是在内存中进行的,即在找到目标结点后,先将结点信息读入内存,然后在结点内采用顺序查找法或折半查找法。

6、B树的插入

与二叉查找树的插入操作相比,B 树的插入操作要复杂的多。B 树中找到要插入的位置后,不能简单地将其添加在终端结点上,因为此时可能会导致整棵树不再满足 B 树的定义要求。具体插入过程如下:
10. 定位。利用查找算法,找出插入该关键字的最底层中的某个非叶结点。
11. 插入。在 B 树中,每个非叶结点的关键字个数都在区间 [ (m/2)-1 , m-1 ]内。插入后的结点关键字个数小于m,可以直接插入;当插入后结点关键字个数大于 m-1 时,必须对结点进行分裂。

分裂:
在这里插入图片描述
若分裂后导致父结点的关键字个数也超过了上限,则继续这种分裂操作,直至这个过程传到根结点为止,进而导致B树高度增1。

7、B树的删除

明天继续写…

8、B+ 树的概念

B+ 树是应数据库所需而出现的一种 B 树的变形树。
在这里插入图片描述
一棵 m 阶的 B+ 树需满足下列条件:

  1. 每个分支结点最多有 m 棵子树。
  2. 非叶根节点至少有两棵树,其他每个分支结点至少有(m/2)(向上取整) 棵子树.
  3. 结点的子树个数等于关键字的个数。
  4. 所有叶结点包含全部关键字及指向相应记录的指针,叶结点中将关键字按大小顺序排列,并且相邻叶结点按大小顺序相互链接起来。
  5. 所有分支结点中仅包含它的各个子结点中关键字的最大值及指向其子结点的指针。

如图所示,分支结点的某个关键字是其子树中最大关键字的副本。通常在 B+ 树中有两个头指针:一个指向根结点,另一个指向关键字最小的叶结点。因此,可以对 B+ 树进行两种查找运算: 一种是从最小关键字开始的顺序查找,另一种是从根结点开始的多路查找。

9、B树与B+树的差异

  1. 在 B+ 树中,具有n个关键字的结点只含有n棵子树,即每个关键字对应一颗子树;而在 B 树中,具有n个关键字的结点含有n+1棵子树。
  2. 在 B 与 B+ 树中,每个结点的关键字个数范围不同,可由1分析得出。
  3. 在 B+ 树中,叶结点包含信息,所有非叶结点仅起索引作用,非叶结点中的每个索引项只含有对应子树的最大关键字和指向该子树的指针,不含有该关键字对应记录的存储地址。
  4. 在 B+ 树中,叶结点包含了全部的关键字;而在 B 树中,叶结点包含的关键字和其他结点包含的关键字不会重复。

猜你喜欢

转载自blog.csdn.net/qq_34533266/article/details/112790436
今日推荐