数据结构 —— B树和B+树

前面一章总结了一下数据结构以及查找树和红黑树的一些知识点,现在接着上面的内容说一下我们常用的B树和B+树。

所以要想更加容易读懂这篇文章,必须要先点这里看看我们的上一章

先加个目录:


目录

1、B树

1.1 何谓B树?

1.2 B树的结构是什么?

1.3 B树有什么优缺点?

1.4 B树的应用

2 B+树

2.1 什么是B+树?

2.2 B+树的优缺点?

2.3 B+树的应用


1、B树

灵魂三问:何谓B树?B树的结构是什么?B树有什么优缺点?

这里是一个大佬的漫画讲解,很到位

1.1 何谓B树?

注意注意注意:B-树就是B树,不是B减树

B树就是一个有2-3树(查看上一章内容)的所有结构和原理的多阶查找树,又叫多路平衡查找树。定义一棵B树必须指定它的阶。

那么问题来了,什么是多阶查找树呢?阶是什么呢?

简单来说呢,一棵树中的每个节点可以拥有的最多子节点树就叫做 -- 。比如2-3树就是一个阶数为3的B树。

1.2 B树的结构是什么

上一小节中我们已经说过了,2-3树就是一个阶数为3的B树,这么说,B树的结构就类似于2-3树喽。为什么说是类似呢?因为这里还有阶一说。那么如果阶数为4,为5的B树长什么样子呢?

其实就是每个节点最多能连接的子节点不一样而已,其他完全一样,包括保持平衡的逻辑。

这里是详细逻辑结构的 传送门 。就不仔细说了。

知道了结构我们就可以知道它的一些特性了。Look(假设这里的B树的阶为 m):

  • 一棵B树的阶是预定义的(因为数据保存在磁盘中,通过磁盘页的大小决定阶的大小)
  • 一棵B树的叶子节点总在同一层(因为它是平衡的,B树使用节点上移保证平衡)
  • 一棵B树的所有节点上的数据个数等于其子节点个数减一(查看2-3树结构图)
  • 一棵B树的所有中间节点的子节点个数k为: m/2 <= k <= m(因为数据插入只会发生在叶子节点,需要做平衡化的时候提取中间数据到上层,所以k>=m/2。具体根据结构理解)
  • 一棵B树中的所有节点中的每个数据的左子树的所有数据小于等于该数据,右子树的所有数据大于等于该数据(数据有序便于二分查找)

1.3 B树有什么优缺点?

我们使用任何东西肯定是无利不起早,没有好处我们怎么会用,怎么会发明出来呢?说起B树的好处,往下看:

  • 和二叉树相比较,因为我们的数据都是保存在磁盘中,我们读取的时候是需要消耗IO,而树的读取,我们一层需要读取一次IO。所以二叉树过于消耗我们的IO。而B树相对就会节省我们的IO。其实就是把“瘦高”的二叉树变成“矮胖”的B树。

当然任何东西都有两面性,B树也有:

  • 和二叉树比较,我们每次操作一个节点的时候就需要去操作节点中的所有数据,相对于二叉树性能肯定有所不如。

总的来说,相比于这个缺点,内存要比磁盘快的多,所以对于消耗的一点内存交互来说,省下来的IO大大提高了树的性能。

1.4 B树的应用

  • 文件系统
  • 数据库索引,比如现在流行的非关系型数据MongoDB

 

2 B+树

既然说了B树,那么B+树也就不得不提了

同样,还是上面那位大佬,讲的很到位

那么,B+树为什么叫B+树呢?它与B树有什么不同呢?

2.1 什么是B+树?

B+树其实就是B树的一个升级版。相对于B树,B+树做了以下修改,大大提升了索引效率:

  • 子节点保存父节点的值,父节点的值作为子节点的最大值或者最小值;
  • 所有叶子节点包含了整棵树的所有值,并且它们之间使用指针相连,形成了一个有序列表;
  • 只有叶子节点保存数据,其他节点都只保存索引(指针)。

所以B+树的结构是这个样子的:

2.2 B+树的优缺点?

B树的所有优点B+树全部都有。而且相对于B树还有一些新增的优点:

  • 不保存数据在根节点和中间节点,所以可以保存更多的索引,从而支持树的阶数更大,从而比B树更加矮胖,可以省下更多的IO。
  • 每次查询都必须从根节点遍历到叶子节点,查询性能相较于B树稳定(B树最优直接查询根节点,最差查询到子节点。)
  • 范围查询直接遍历叶子节点就OK,B树需要遍历N次(N为满足条件数据量)

2.3 B+树的应用

  • 数据库索引:典型的就是Mysql数据库。

暂时做一个总结,文章接着前面一章。觉得有疑问或者不正确的地方的,欢迎指正,一起学习,一起进步。有需要这些流程图资料的可以留言。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值