弦外之音

目前处于大三的寒假,正在备考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. 所有非叶结点结构如下:其中,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 树中,叶结点包含的关键字和其他结点包含的关键字不会重复。

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

  1. 【组队学习】【30期】6. 树模型与集成学习

    树模型与集成学习 航路开辟者:耿远昊 领航员:姜萌 航海士:耿远昊 基本信息 开源内容:https://github.com/datawhalechina/machine-learning-toy-c ...

  2. 【树模型与集成学习】(task1)决策树(上)

    学习心得 (1)决策树常用于分类,目标就是将具有 PPP 维特征的 nnn 个样本分到 CCC 个类别中,相当于做一个映射 C=f(n)C = f(n)C=f(n) ,将样本经过一种变换赋予一个 la ...

  3. DataWhale-202110 树模型与集成学习(第一次)

    DataWhale-202110 树模型与集成学习 信息论的基础 节点纯度 不确定性函数H(P)H(P)H(P) 决策树分裂 信息增益 分类树的节点分裂 深度优先增长于最佳增益增长 CART树 均方误 ...

  4. 【树模型与集成学习】(task4)两种并行集成的树模型

    学习总结 (1)随机森林中的随机主要来自三个方面: 其一为bootstrap抽样导致的训练集随机性, 其二为每个节点随机选取特征子集进行不纯度计算的随机性, 其三为当使用随机分割点选取时产生的随机性( ...

  5. 【树模型与集成学习】(task8)阶段性总结(更新ing)

    学习总结 作业需要继续补! task1学习决策树基础,根据评价标准为信息增益.信息增益比.基尼指数分别分为ID3树,C4.5树和CART树 task2学习cart的分类和回归代码 task3基于偏差和 ...

  6. [算法学习] 线段树,树状数组,数堆,笛卡尔树

    都是树的变种,用途不同 [线段树 Interval Tree] 区间管理,是一种平衡树 可看做是对一维数组的索引进行管理.一维数组不需要是排序好的 深度不超过logL 任一个区间(线段)都分成不超过2 ...

  7. 【学习笔记】DAG / 一般有向图的支配树 / 灭绝树

    定义与声明 一个有向图 GGG.给定一个起点 sss,假设 sss 能到达所有点. 若去掉某个点 iii 后,sss 无法到达 jjj,则称 iii 为 jjj 的支配点. 显然支配点存在传递关系. ...

  8. b+树时间复杂度_前端大神用的学习笔记:线段树和树状数组

    全文篇幅较长,细心理解一定会有收获的♪(^∇^*). 1|0线段树 1|1一些概念     线段树是一种二叉搜索树,每一个结点都是一个区间(也可以叫作线段,可以有单点的叶子结点),有一张比较形象的图如 ...

  9. 家谱树java_树家族算法梳理

    树家族第一篇 树家谱 决策树 决策树模型可以看做是if-else指令集合,通过对特征空间的划分来完成分类或者回归任务. 如上图,是树模型的经典案例.根据天气.温度和风强度决策是否打网球.其过程就像是做 ...

  10. C语言实现“勾股树”——毕达哥拉斯树

    序 将所以的烦恼搓成几缕无须羁绊的情绪,抛之脑后~ 嗨!这里是狐狸~ 今天给大家带来了一个'勾股树'--毕达哥拉斯树! 毕达哥拉斯树(Pythagoras tree)是由毕达哥拉斯根据勾股定理所画出来 ...

最新文章

  1. 从零开始学 Java - Spring 集成 Memcached 缓存配置(二)
  2. [Unity热更新]04.卸载方式
  3. 两者相差百分比怎么算_不知道烘焙百分比的全拖出来打屁股!
  4. Python + Selenium 练习篇 - 获取页面所有邮箱
  5. 【JetPack】视图绑定 ( ViewBinding ) 各种应用 ( 视图绑定两种方式 | Activity 布局 | 对话框布局 | 自定义组件布局 | RecyclerView 列表布局 )
  6. html标签的下一级遍历,HTML遍历某个元素下的子元素
  7. 分布式数据库CAP原理和Base
  8. 企业能为员工储蓄点什么呢
  9. undefined reference to `std::cout'等错误
  10. 字节跳动面试真题:java实现远程控制
  11. getOutputStream() has already been called for this response异常的原因和解决方法[转]
  12. 从零开始创建react项目的三种方法(转)
  13. 【BZOJ 4007】[JLOI2015]战争调度 DP+搜索+状压
  14. 一、ssh 协议:SSH 传输层协议
  15. Word插入页码简单方法
  16. 微信支付 H5端 和小程序端 统一下单接口 4个JAVA源码文件代码
  17. 贪吃蛇小游戏编写心得
  18. 转帖:一生必读经典书籍大全,看看你读过几本?
  19. Visual Studio 2013安装使用方法
  20. java画太极加图片_通过Java 画一个太极图

热门文章

  1. 模拟仿造wifi信号登录界面(实验)
  2. xshell对imx6进行wifi设置
  3. QQ、微信、lol自动发消息工具
  4. 嵌入式实习ing(一)
  5. 2. Polyspace工程Configuaration配置
  6. 机器视觉硬件选型简析
  7. MATLAB-真彩色图像直方图均衡化及分别在RGB与HSI坐标系进行处理
  8. CSS3-7.5-飞机滑翔动画实现
  9. 函数CreateSemaphore和ReleaseSemaphore
  10. 计算机配置怎么复制,怎么设置别人无法使用U盘复制你的电脑文件 防止拷贝操作方法...