高级数据结构_Bstar树

B*

是B+树的变种, 在B+树的非根和非叶子结点再增加指向兄弟节点的指针。

定义

B*树定义了非叶子节点关键字个数至少为(2/3)M(2/3)*M, 即块的最低使用率为2/32/3, 代替了B+树的1/21/2;

B*B+节点分裂的对比

B+

当一个结点满时,分配一个新的结点,并将原结点中1/21/2的数据复制到新结点,最后在父结点中增加新结点的指针;B+树的分裂只影响原结点和父结点,而不会影响兄弟结点,所以它不需要指向兄弟的指针;

B*

B*树的分裂当一个结点满时,如果它的下一个兄弟结点未满,那么将一部分数据移到兄弟结点中,再在原结点插入关键字,最后修改父结点中兄弟结点的关键字(因为兄弟结点的关键字范围改变了);如果兄弟也满了,则在原结点与兄弟结点之间增加新结点,并各复制1/31/3的数据到新结点,最后在父结点增加新结点的指针;

所以,B*树分配新结点的概率比B+树要低,空间使用率更高,在B+树基础上,为非叶子结点也增加链表指针,将结点的最低利用率从1/21/2提高到2/32/3