码迷,mamicode.com
首页 > 其他好文 > 详细

B树总结

时间:2015-03-01 23:45:15      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:

B树总结

B树是一种平衡的多路查找树,一棵m阶B树或为空树,或满足下列特性:

1、  每个节点之多有m棵子树

2、  若根节点不是叶子节点,则至少有两颗子树

3、  除根之外所有非终端节点至少有[m/2]可子树([]是上取整)

4、  所有非终端节点中包含下列信息数据:(n,A0,K1,A1,K2,A2,….,Kn,An),其中n为关键码数目,ki均为关键码,Ai为指向子树的指针,Ai中的所有关键码均在区间[ki,ki+1]中。

5、  所有终端节点均在同一层次,可将终端节点的的下一层成为叶子节点或失败节点,查找到叶子节点意味着查找失败

 

对于m阶B树

简单口诀:插入时,多了就分;删除时,不够就借,借不到就合

解释:插入时,当一个节点的关键码数目等于m时则分裂,选取中间的关键码上升为父节点中的一个关键码,其余的左右两侧分别作为其左右子树,由于父节点关键码数目增加,若有需要向上递归解决;

注意:新插入的关键码必然是从叶子节点开始,分裂也是从叶子节点开始

 

删除一个关键码,有两种情形:

情形一:关键码所在节点不是叶子节点,找到关键码的后继节点x来替换,x必然属于叶子节点,现在问题成了删除叶子节点x了,参考情形二。

情形二:待删除的关键码x属于叶子节点,若x是根节点,直接删除;x不是根节点,当关键码数量n大于[m/2]-1,直接删除; 若n等于[m/2]-1,则向左右兄弟借,如果左右兄弟的关键码数目有一个大于[m/2]-1,则借其一个;如果左右兄弟的关键码数目均等于[m/2]-1, 选择一个合并,父节点中的一个关键码也下降到合并节点中了,此时父节点关键码数目减少,递归解决;

 

性能分析:令 a=[m/2], 高度为h的B树最少节点数目为

1 + 2* { (a-1) + (a-1)a + (a-1)a^2 + …(a-1)a^(h-2) } = 2a^(h-1) -1 = 2[m/2]^(h-1)

最多节点数目为 (m-1) + (m-1)*m +(m-1)*m^1 + … + (m-1)*m^(h-1) =  m^h -1;

查找复杂即为其高度大约为 以a为底n的对数,n为节点数目,按照最大高度计算;

 

B树总结

标签:

原文地址:http://www.cnblogs.com/gaoyanqing/p/4307780.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!