深入理解B树和B+树(一)B树的优点和插入删除过程

B树也就是B-树,一个m阶的B树满足以下条件:

      1.每个节点最多有m个子树。

      2.当有子树时,根节点至少拥有两个子树。

      3.除了根节点外,每个分支节点至少拥有m/2棵子树。

      4.所有叶节点都在同一层上

      5.每个有k个子树的节点会存储k-1个关键码,关键码按照递增次序进行排列。

      6.关键字的数量满足ceil(m/2) -1 <= n <= m-1.

      由此可见,B树相比二叉树就是每个节点多了更多子树,节点中存储了一些子树的信息,那么这么做的好处是什么呢?那就要从B树的应用说起,B树一般用来作为磁盘存取的数据结构,磁盘中有两个机械运动的部分,分别是盘片旋转和磁臂移动。盘片旋转就是我们市面上所提到的多少转每分钟,而磁盘移动则是在盘片旋转到指定位置以后,移动磁臂后开始进行数据的读写。那么这就存在一个定位到磁盘中的块的过程,而定位是磁盘的存取中花费时间比较大的一块,毕竟机械运动花费的时候要远远大于电子运动的时间。当大规模数据存储到磁盘中的时候,显然定位是一个非常花费时间的过程,但是我们可以通过B树进行优化,提高磁盘读取时定位的效率。为什么B类树可以进行优化呢?我们可以根据B类树的特点,构造一个多阶的B类树,然后在尽量多的在结点上存储相关的信息,保证层数尽量的少,以便后面我们可以更快的找到信息,磁盘的I/O操作也少一些,而且B类树是平衡树,每个结点到叶子结点的高度都是相同,这也保证了每个查询是稳定的。可见,B树的功能就是优化二叉树的高度,以便于减小磁盘的IO次数,提高访问效率.

  下面再来说说B树的插入操作,以一个3阶的B树为例,B树的插入操作分一下几种情况:

  1.如果该结点的关键字个数没有到达m-1个,那么直接插入即可;

  2.如果该结点的关键字个数已经到达了m-1个,那么根据B树的性质显然无法满足,需要将其进行分裂。分裂的规则是该结点分成两半,将中间的关键字进行提升,加入到父亲结点中,但是这又可能存在父亲结点也满员的情况,则不得不向上进行回溯,甚至是要对根结点进行分裂,那么整棵树都加了一层

如图,这是一颗3阶B树,开始只有跟节点1

                           《深入理解B树和B+树(一)B树的优点和插入删除过程》

插入节点2,由于节点未达到m-1,于是直接插入

                        《深入理解B树和B+树(一)B树的优点和插入删除过程》

插入节点3,节点达到m个,从中间劈开,将中间的关键字2提升至父节点,树高度加1

                          《深入理解B树和B+树(一)B树的优点和插入删除过程》

插入节点4,节点未到m-1,直接插入

                      《深入理解B树和B+树(一)B树的优点和插入删除过程》

插入节点5,右下节点达到m,中间节点向上提升

                                                         《深入理解B树和B+树(一)B树的优点和插入删除过程》

基本就是这样的循环过程,删除会稍微麻烦一些,删除存在以下几种情况:

       1.如果该结点拥有关键字数量仍然满足B树性质,则不做任何处理

   2.如果该结点在删除关键字以后不满足B树的性质(关键字没有到达ceil(m/2)-1的数量),则需要向兄弟结点借关键字,这有分为兄弟结点的关键字数量是否足够的情况。

    (1)如果兄弟结点的关键字足够借给该结点,则过程为将父亲结点的关键字下移,兄弟结点的关键字上移.

    (2)如果兄弟结点的关键字在借出去以后也无法满足情况,即之前兄弟结点的关键字的数量为ceil(m/2)-1,借的一方的关键字数量为ceil(m/2)-2的情况,那么我们可以将该结点合并到兄弟结点中,合并之后的子结点数量少了一个,则需要将父亲结点的关键字下放,如果父亲结点不满足性质,则向上回溯

还是以一颗3阶B树为例:

                      《深入理解B树和B+树(一)B树的优点和插入删除过程》

删除3这个节点,如果兄弟结点的关键字足够借给该结点,则过程为将父亲结点的关键字下移,兄弟结点的关键字上移.

                         《深入理解B树和B+树(一)B树的优点和插入删除过程》

删除4这个节点,兄弟结点的关键字在借出去以后也无法满足情况,则需要将父亲结点的关键字下放,如果父亲结点不满足性质,则向上回溯

                          《深入理解B树和B+树(一)B树的优点和插入删除过程》

    原文作者:B树
    原文地址: https://blog.csdn.net/zk3326312/article/details/79376504
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注