B+树
http://data.biancheng.net/view/61.html
https://blog.csdn.net/qq_26222859/article/details/80631121
B+树: 数据结构
B-书的每个节点关键字个数n的取值范围是[m/2]上-1<=n<=m-1,而B+树中的每个节点关键字个数n的取值范围为【m/2]上整<=n<=m
B+树:所有的叶子节点中包含了全部的关键字信息,以及指向这些关键字记录的指针,且叶子结点本身的关键字自小而大顺序连接。
所有的非终端节点(非叶子节点)可以看成是索引部分,节点中只含有其子树中的最大或最小关键字。
(二)操作:查找、插入和删除
(1)B+树的查找
在B+书中有两种查找:(1)单个元素的查找(从根节点到叶子节点的一条查找路径)二分查找
(2)范围查找(可以通过链表头指针进行顺序查找)
(2)B+树的插入
在B+书中插入关键字
1、插入的操作全部都在叶子节点进行,且不能破坏关键字从小到大的顺序。
2、由于B+树中各节点存储的关键字个数有明确范围,插入时如果超过节点个数范围,要进行节点的分裂。
若被插入关键字所在的节点,其含有的关键字个数小于阶数m,则直接插入。
若被插入关键字所在的节点关键字数目等于阶数m,则需要将节点分裂为两个节点,一个节点【m/2]下整,另一个节点包含【m/2]上取整,同时将新产生节点的最大或最小值放到双亲节点中去。如果双亲节点超过阶数,进一步分裂双亲节点。
特殊的,如果插入的节点是最大值,则要更改双亲结点的索引值,然后再进行分裂操作。
B+树中的根节点含有全部节点的最大节点。
(3)B+树的删除
找到存储该关键字的节点,由于该节点所含有关键字的个数大于【m/2】上取整,删除不会破坏B+树结构,可以直接删除。
删除最大或者最小的元素,则需要更改双亲节点到根节点的所有节点的索引值。
当删除元素时,导致该节点关键字个数小于【m/2]上取整,若其兄弟节点中好有多余的节点,则可以从兄弟节点借关键字完成删除。需要更改最大值然后更改双亲结点。
如果兄弟节点没有多余关键字,则需要和兄弟节点进行合并。
当进行合并时,可能会破坏双亲节节点的结构,需要对双亲节点进行处理。
叶子节点合并后可能双亲结点的节点数小于【m/2]上取整,同样的也需要向兄弟节点借或则合并。
总结:B+树的删除
(1)删除给关键字,如果不破坏B+树本身的性质,直接完成操作。
(2)如果删除操作导致该节点最大或最小值改变,则应相应改变父节点中的索引值。
(3)删除关键字后,如果导致其节点中关键字而个数不足,有两种方式:(1)向兄弟节点去借,(2)同兄弟节点合并。 注意:两种方式都需要更改父节点中的索引值。
(二)B+树和B-树的区别
一个m阶的B树具有如下几个特征:
1.根结点至少有两个子女。
2.每个中间节点都包含k-1个元素和k个孩子,其中 m/2 <= k <= m
3.每一个叶子节点都包含k-1个元素,其中 m/2 <= k <= m
4.所有的叶子结点都位于同一层。
5.每个节点中的元素从小到大排列,节点当中k-1个元素正好是k个孩子包含的元素的值域分划
一个m阶的B+树具有如下几个特征:
1.有k个子树的中间节点包含有k个元素(B树中是k-1个元素),每个元素不保存数据,只用来索引,所有数据都保存在叶子节点。
2.所有的叶子结点中包含了全部元素的信息,及指向含这些元素记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接。
3.所有的中间节点元素都同时存在于子节点,在子节点元素中是最大(或最小)元素。
B+树相比于B-树的优点:
(1)IO次数少
(2)查询性能稳定
(3)范围查询简便。
(三)B+树的实现
https://blog.csdn.net/u013341703/article/details/56305936
https://blog.csdn.net/xiaohusaier/article/details/77101640

浙公网安备 33010602011771号