B树系列

文章目录

  • B树系列
    • 1. B树
      • 1. B树特点
      • 2. B树的分裂过程:(插入)
      • 3. B树的删除操作
    • 2. B+树
      • 1. B树和B+树的相同点:
      • 2. B树和B+树的不同点
      • 3. B+树的插入操作
    • 3. B树和B+树总结⭐
    • 4. 搜索树总结

B树和B+树的出现是为了查询数据时减少磁盘的IO次数,我们知道平衡二叉查找树是一种查询速度很快的数据结构。它的时间复杂度为(logN),但是它由于是一个二叉树,所以树的高度相对于多叉树来讲是比较高的,所以为了平衡磁盘IO与时间复杂度直接的关系,我们引入了B树和B+树;

1. B树

上图为一个3-4树,或者叫4阶树,即一个节点最多存储3个key,一个节点最多有4个孩子(3+1);

在B树里,一个节点里面有多个key;

1. B树特点

  • 每个节点最多有m-1个关键字(可以存有的键值对);
  • 根节点最少可以只有一个关键字;
  • 非根节点至少有m / 2 个关键字;
  • 每个节点中的关键字都按照从小到大的顺序排列,每个关键字的左子树中的所有关键字都小于它,而右子树中的所有关键字都大于它;
  • 所有叶子节点都位于同一层,或者说根节点到每个叶子节点的长度都相同;
  • 每个节点都存有索引和数据,也就是对应的key和value;

所以得到结论:

  • 根节点的关键字数量范围:1 <= k <= m-1;
  • 非根节点的关键字数量范围:m/2 <= k <= m-1;

所以我们在描述一个B树的时候需要指定它的阶数,阶数表示了一个节点最多有多少个孩子节点,一般用 m 表示阶数;

2. B树的分裂过程:(插入)

分裂:高度是分裂出来的

  • 插入的时候永远在最下面的节点中进行插入(该在哪一块,从上往下找呗,因为这也是搜索树啊);
  • 中间的那个数往上走成为一个新的节点,将分为左和右;

3. B树的删除操作

  • 如果删除的是叶子节点中的元素,且删除之后,那个叶子节点数还是大于m/2,这种情况直接删除即可;

  • 删除非叶子节点中的元素,如下图:
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    要删除22这个节点,对于非叶子节点的删除,我们要将后继key覆盖要删除的key,然后在后继key所在的子支中删除这个key,结果如下:

    此时发现26所在节点只有一个元素了,小于m/2,不符合B树特点,如果它的兄弟节点的元素大于m/2,此时就要向它的兄弟节点借取,具体方法就是先向父节点借取,然后兄弟节点再给父节点补充,如下图:

2. B+树

1. B树和B+树的相同点:

  • 根节点至少一个元素;
  • 非根节点的元素范围:m/2 <= k <=m-1

2. B树和B+树的不同点

  • B+树有两种类型的节点:内部节点(也称索引节点)和叶子节点

    • 内部节点就是非叶子节点,内部节点不存储数据,只存储索引,数据都存储在叶子节点;
  • 内部节点中的key都按照从小到大的顺序排列,对于内部节点中的一个key,左树种所有key都小于它,右树中所有key都大于等于它,叶子节点中的记录也按照key的大小排列;
  • 每个叶子节点都存有相邻叶子节点的指针,叶子节点本身依关键字的大小自小而大顺序链接;
  • 父节点存有右孩子的第一个元素的索引

下面看一个B+树的图片来感受感受:

3. B+树的插入操作

以下面的这颗5阶的B+树(m为5)为例,5阶B+树的节点最多4个元素,最少2个元素;

  • 插入5,10,15,20
  • 然后插入25,此时元素个数大于m-1,需要分裂:
  • 接着插入26,30,继续分裂:

3. B树和B+树总结⭐

B+树相对于B树有一些自己的优势,可以归结为下面几点:

  • 单一节点存储的元素更多,使得查询的IO次数更少,所以也就使得它更适合作为数据库MySQL的底层数据结构;
  • 所有的查询都要查找到叶子节点,查询性能是稳定的,而B树,每个节点都可以查找到数据,所以不稳定;
  • 所有的叶子节点形成了一个有序链表,更加便于查找;

4. 搜索树总结

模型:

  • key模型(Set)
  • Map模型

哈希表和搜索树的比较:

  • 哈希表的时间复杂度为O(1)
  • 搜索树不会遭到恶意冲突
  • 搜索树的中序是有序的
    • 这个优点比如在数据库的ORDER BY语句中,假如使用了索引,则直接返回其中序遍历索引即可;
  • hash表只支持等值查询,不易于范围查询,而搜索树实现范围查询就很容易;

B-树、B+树、B树的区别(B只做了解即可)

数据库中的索引就是在原有的数据之外又建立了一个B系列树(MySQL中InnoDB为B+树);

数据库也支持hash索引,这种索引只用于等值查询;

B树和B+树画图详解相关推荐

  1. 线段树扫描线求矩形周长详解

    线段树扫描线求矩形周长详解 原创 wucstdio 最后发布于2018-04-24 16:12:09 阅读数 841 收藏 发布于2018-04-24 16:12:09 版权声明:本文为博主原创文章, ...

  2. K近邻算法和KD树详细介绍及其原理详解

    相关文章 K近邻算法和KD树详细介绍及其原理详解 朴素贝叶斯算法和拉普拉斯平滑详细介绍及其原理详解 决策树算法和CART决策树算法详细介绍及其原理详解 线性回归算法和逻辑斯谛回归算法详细介绍及其原理详 ...

  3. 蒙特卡洛树搜索(MCTS)详解

    蒙特卡洛树搜索(MCTS)详解 蒙特卡洛树搜索是一种经典的树搜索算法,名镇一时的 AlphaGo 的技术背景就是结合蒙特卡洛树搜索和深度策略价值网络,因此击败了当时的围棋世界冠军.它对于求解这种大规模 ...

  4. AVL树的实现(图文详解)

    AVL树的实现 AVL树定义 AVL树其实就是一棵特殊的二叉树,为什么会出现AVL树,AVL树比普通二叉树优势在什么地方呢? 我们知道,一棵普通的二叉搜索树,以其特殊的性质(左<根<右), ...

  5. Android vector Path Data画图详解

    下面来解释一下"M 100,240 C510,300 80,100 300,160 H40 v80"这样字符串的意义.  分为四种情况来解释:  1. 移动指令:Move Comm ...

  6. HDU - 3333 Turing Tree 线段树区间不同值和+详解+思想

    传送门 首先第一次做这种求不同元素和的线段树题,猜想是个裸题.但是题目中有一句话显然给题目降低了很大的难度,就是 想想其实它就是在暗示你这道题你要结合多次询问来处理,也就是所谓的离线,而不是一次一次的 ...

  7. 【线段树合并】解题报告:luogu P4556雨天的尾巴 (树上对点差分 + 动态开点 + 线段树合并)线段树合并模板离线/在线详解

    题目链接:雨天的尾巴 本题本身是一个非常简单的一道树上差分的模板题,但是由于变态的数据范围,我们直接用数组是存不下的(本来使用一颗普通的线段树直接维护最大值即可.但是本题的空间只有128MB,直接按照 ...

  8. 树状数组基本用法详解

    树状数组 重点是在树状的数组 大家都知道二叉树吧 叶子结点代表A数组A[1]~A[8] - 现在变形一下 现在定义每一列的顶端结点C[]数组 如下图 C[i]代表 子树的叶子结点的权值之和// 这里以 ...

  9. wxpython使用方法_python图形界面开发之wxPython树控件使用方法详解

    wxPython树控件介绍 树(tree)是一种通过层次结构展示信息的控件,如下图所示是树控件示例,左窗口中是树控件,在wxPython中树控件类是wx.TreeCtrl. wx.TreeCtrl常用 ...

最新文章

  1. java控制台输入的数据存放在数据库表中_JDBC完成修改(使用控制台输入)
  2. 【OpenCV 4开发详解】Canny算法
  3. “/”应用程序中的服务器错误
  4. mysql自动备份脚本linux_一个Mysql自动备份脚本,定时备份MYSQ脚本,linux下Mysql自动备份脚本...
  5. 【工业控制】PolyWorks 2020基础教程
  6. c/c++教程 - 1.9 指针 空指针 野指针 const修饰指针 指针常量 常量指针 指针和数组 指针和函数
  7. python中两个文件如何互相传参_argparse模块如何在jupyter notebook中用于传参?
  8. FreeMarker语言【页面静态】
  9. 发卡网源码附企业发卡网源码搭建安装教程
  10. 关于多目标跟踪的一点理解
  11. 《HTML CSS JavaScript 网页制作》第六章-创建框架结构网页
  12. java一个整数加100是完全平方_Java计算一个数加上100是完全平方数,加上168还是完全平方数...
  13. 国外问卷调查详细讲解
  14. bukgu 杂项 图穷匕见
  15. Autofac基础知识学习
  16. 斯考特·杨(Scott Young)快速学习方法
  17. 如何解决Win10上OneNote 2016的同步问题
  18. Java实现深度优先遍历-DFS
  19. linux的crontab定时任务完整配置和定时任务不执行分析
  20. 前端实现导出excel

热门文章

  1. 微软承诺删除竞业限制条款 普通员工可自由跳槽到竞争对手
  2. 被称为逆天改命的5大中国工程,曾轰动世界,你知道几个?
  3. 从零开始搭建一个web图书管理项目(增删改查功能)
  4. Ghost软件使用详解
  5. Vue--》Vue3打造可扩展的项目管理系统后台的完整指南(三)
  6. Ubuntu配置万能五笔输入法
  7. 世界读书日-读还是不读~
  8. 新时代,新思潮,人人受益
  9. 【学习笔记】CF1322
  10. 会计学原理学习笔记——第一章——总论(1.3会计对象)