一次区分 B树、B+树,B*树

简介: 一次区分 B树、B+树,B*树

前言

动态查找树主要有:二叉查找树(Binary Search Tree),平衡二叉查找树(Balanced Binary Search Tree),红黑树(Red-Black Tree ),B-tree/B+-tree/ B*-tree
(B~Tree)。前三者是典型的二叉查找树结构,其查找的时间复杂度O(log2N)与树的深度相关,那么降低树的深度自然会提高查找效率。

1.B树

具体讲解之前,有一点,再次强调下:有的文章里面出现的B-树,即为B树。因为B树的原英文名称为B-tree,而国内很多人喜欢把 B-tree 译作B-树,其实,这是个非常不好的直译,很容易让人产生误解。如人们可能会以为 B-树是一种树,而B树又是一种一种树。而事实上是,B-tree就是指的B树。特此说明。

定义

一颗m阶的B树定义如下:

1)每个结点最多有m-1个关键字。

2)根结点最少可以只有1个关键字。

3)非根结点至少有Math.ceil(m/2)-1个关键字。

4)每个结点中的关键字都按照从小到大的顺序排列,每个关键字的左子树中的所有关键字都小于它,而右子树中的所有关键字都大于它。

5)所有叶子结点都位于同一层,或者说根结点到每个叶子结点的长度都相同。

2.B+树

特点:

  • 有k个子树的中间节点包含有k个元素(B树中是k-1个元素),每个元素不保存数据,只用来索引,所有数据都保存在叶子节点。
  • 所有的叶子结点中包含了全部元素的信息,及指向含这些元素记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接。
  • 所有的中间节点元素都同时存在于子节点,在子节点元素中是最大(或最小)元素。

B-和B+树对比

  • B+树的中间节点没有卫星数据,所以同样大小的磁盘可以容纳更多的节点元素;
    在数据量相同的情况下,B+树的结构比B-树更加“矮胖”,因此查询的IO次数也更少;

  • B+树的查询必须最终查找到叶子节点,而B-树只要查找匹配的元素即可,无论匹配的元素处于中间节点还是叶子节点。

  • B-树的查找性能并不稳定(最好情况只查询根节点,最坏情况是查找叶子节点)。而B+树的每一次查找都是稳定的。

B+树比B-树的优势三个:

1. 单一节点存储更多的元素,使得查询的IO次数更少。
2. 所有查询都要查找到叶子节点,查询性能稳定。
3. 所有叶子节点形成有序链表,便于范围查询。

3.B*树

定义

是B+树的变体,在B+树的非根和非叶子结点再增加指向兄弟的指针;B树定义了非叶子结点关键字个数至少为(2/3)M,即块的最低使用率为2/3(代替B+树的1/2)。

特点

B的查询、插入和删除操作和B+树差不多,只不过会遵循非叶子结点元素个数至少为(2/3)M的特点。比如,对于3阶B*树,当元素个数大于1的时候,每个非叶子节点的元素个数,至少为两个

目录
相关文章
|
2月前
|
存储 数据库 索引
B树与B+树的区别
B树与B+树的区别
|
10月前
|
存储 数据库 索引
B树和B+树的区别是什么呢?
B树和B+树的区别是什么呢?
84 0
|
6月前
|
存储 机器学习/深度学习 人工智能
23 树与树算法
23 树与树算法
41 0
|
9月前
|
存储 缓存 关系型数据库
B树与B+树
B树与B+树
30 0
B树与B+树
|
9月前
|
存储 缓存 算法
B树,B-树,B+树和B*树
B树,B-树,B+树和B*树
系统发育树初步剖析
1. 什么是系统发育树 2. 如何看系统发育树并确定哪些物种最相关
156 0
|
存储
你说什么是树?
你说什么是树?
83 0
你说什么是树?
|
存储 关系型数据库 MySQL
B树和B+树的理解
B树和B+树的理解
B树和B+树的理解
|
存储 索引
心里有点B树
在说B树之前最好先看看2-3树, 2-3树是B树的一种特例, 什么B树, B树就是2-3树, 2-3-4 树 , 2-3-4-5... 树的统称, 而B+树又是B树的一种变形
150 0
|
存储
心里有点树 (一)
心里有点树 (一)
160 0