数据结构——B-树、B+树、B*树

一、B-树

1. B-树概念

        B树是一种适合外查找的、平衡的多叉树。一棵m阶(m>2)的B树,是一棵平衡的M路平衡搜索树,它可以是空树或满足以下性质:

        (1)根节点至少有两个孩子。

        (2)每个分支节点都包含k-1个关键字和k个孩子,其中ceil(m/2)<= k <= m。(ceil表示向上取整)

        (3)每个叶子节点都包含k-1个关键字,其中ceil(m/2)<= k <= m。

        (4)所有叶子节点都在同一层。

        (5)每个节点中的关键字从小到大排列,节点中k-1个元素正好是k个孩子包含的元素的值域划分。

        (6)每个节点的结构为:(n, A0, K1, A1, K2, A2……, Kn, An),其中Ki(1<=i<=n)为关键字,且kin为节点中关键字的个数,满足ceil(m/2)-1 <=n <= m-1。

2. B树的插入

        采用m为3的一棵三叉B树的插入过程进行演示。根据B树性质可知,m为3,则每个节点最多有三个孩子(m-1个),每个节点包含k-1个关键字,2<=k<=3。注意:插入只能插入到叶子节点

(1)首先插入两个值20,30

(2)插入第三个值25,由于每个节点最多有2个关键字,所以此时会进行分裂来维持B树平衡。

数据结构——B-树、B+树、B*树_第1张图片

2.1 B树分裂规则

        创建一个兄弟节点,拷贝当前节点内右半区间的数据到兄弟节点中,保留当前节点中左半区间的数据,将该节点内的中位数提到父节点中(若没有父节点,则创建新的父节点)。

(3)插入35

数据结构——B-树、B+树、B*树_第2张图片

(4) 插入40

        此时根节点的右侧孩子内数据超过2个,则按照B树分裂规则分裂后如下:

数据结构——B-树、B+树、B*树_第3张图片

 (5)插入33

数据结构——B-树、B+树、B*树_第4张图片

(6)插入34

        此时根节点的中间孩子内数据超过2两个,进行分裂,当提取33到父节点后,根节点内数据也超过了2个,则根节点也会进行分裂,此时没有父节点,则会创建新的父节点,结构如下:

数据结构——B-树、B+树、B*树_第5张图片

三、B+树

1. B+树概念

        B+树是B树的变形,它是在B树基础上进行优化的多路平衡搜索树,B+树的规则和B树基本类似,但在其基础上进行了以下优化:

        (1)分支节点的子树指针与关键字个数相同;

        (2)分支节点的子树指针p[i]指向关键字值大小在[k[i], k[i+1]]之间;

        (3)所有叶子节点增加一个链接指针链接在一起;

        (4)所有关键字及其映射数据都在叶子节点出现。

数据结构——B-树、B+树、B*树_第6张图片

优点:

(1)简化了B树孩子币关键字多一个的规则,由多一个变成相等。

(2)所有值都在叶子节点中,且叶子节点通过指针链接起来,方便遍历。

2. B+树的插入

        B+树的插入过程与B树基本类似,区别在于:

        (1)第一次插入两层节点,一层做分支,一层做根;

        (2)B+树在分裂时,是将左半部分的数据保留,右半部分的数据放入新建兄弟节点中,并将新建节点中的最小值更新到父节点中。

三、B*树

1. B*树概念

        B*树又是B+树的变形,做了以下改动:

        (1)在B+树的非根和非叶子节点再增加指向兄弟节点的指针。

        (2)节点在分裂时,保证每个节点中值的数量至少为2/3 * M,最多为M个,也就是从1/2提高到了2/3,提高空间利用率。

数据结构——B-树、B+树、B*树_第7张图片

 2. B*树的插入

        B*树的插入与B+树基本类似,区别主要在于分裂规则,B*树的分裂规则:

        如果它的下一个兄弟节点未满,则将一部分数据移到兄弟节点中,再在原节点中插入关键字,最后修改父节点中兄弟节点的关键字(因为兄弟节点的关键字范围发生了变化);

        如果兄弟节点也满了,则在原节点与兄弟节点之间添加新节点,并各复制1/3的数据到新节点中,最后在父节点中添加新节点的指针。

四、B树系列的优缺点

1. 优点

        (1)高效的查找操作:B树系列的数据结构通过将数据分布在多层节点上,使用索引快速导航到目标元素所在的叶子节点,从而实现了高效的查找操作。其时间复杂度通常为O(log_{M}^{N})

        (2)适应大规模数据集:B树系列的数据结构能够充分利用磁盘块的大小,减少磁盘I/O操作的次数,提高存储和访问效率。它们被广泛应用于数据库索引、文件系统等需要处理大规模数据集的场景。

        (3)自平衡特性:B树系列的数据结构通过节点的分裂和合并来自动保持树的平衡,保证了各个节点的高度相对较小,从而维持了高效的操作性能。

        (4)支持范围查询:由于B树系列的数据结构中数据是按照键的大小顺序进行排序,因此可以很方便地进行范围查询操作。

2. 缺点

        (1)空间利用率低,消耗高。

        (2)插入删除数据、分裂合并节点,都必然存在数据挪动。

        (3)虽然B树系列的高度更低,但是在内存中和哈希、平衡搜索树的查找效率处于同一量级。

你可能感兴趣的:(数据结构,数据结构,b树)