B树(多路平衡查找树)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了B树(多路平衡查找树)相关的知识,希望对你有一定的参考价值。
参考技术A①二叉排序树的结点值满足:左子树<根<右子树,当中序遍历时,可得到有序序列,如下图
②5叉排序树如下图
观察到,5叉树中每个节点的分支最多可有5个,每个结点的关键字最多可有4个(有序),最后一层为查找失败的情况
如要查找9,首先和根结点22比较,发现比22小,到左子树中查找;依次和5 ,11比较,找到第一个大于9的关键字,到其左指针指向的子树中查找;依次和6,8,9比较,最终查找到9
如果每个结点中只包含一个关键字,则5叉排序树就退化为了二叉排序树,在关键字的数量相同时,树会变高。而由查找的过程可知,树越高,查找效率越低。
为保证m叉排序树的查找效率,因此这里给出一个策略,即让结点数包含的关键字尽可能多,从而降低树的高度
加此约束后,其实树依然有很高的情况,如下图
原因很显然,就是不平衡
现追加约束,即在满足每个结点的分支数为m/2向上取整的同时,也满足绝对平衡(左右子树高度相同),称这样的树为B树(可为空)
思路:
高度最大时,即要满足每个结点分支最少(关键字最少),根据约束可知为m/2向上取整(设为k),即第一层1个结点,第二层2个结点,第三层2 k个结点,第h层2 k (h-2),第h+1层2*k (h-1)。事实上,第h+1层为失败结点,n个关键字的失败结点有n+1个(n个关键字把(-∞,+∞)拆分为n+1个区间,就对应n+1个失败情况),所以n+1>=2*k^(h-1),得h<=log(k)[(n+1)/2] + 1
高度最小时,即要满足每个结点分支最多(关键字最多),为m,h层总结点数为k=(1+m+m 2+……+m (h-1)),则关键字总数为m k,应满足m k >= n,得到h>=log(m)(n+1)
插入
①一定是插入到最下面一层
②结点容量不够时,以中间为准拆分,提中间关键字到父结点(位置为指针右边)
删除
①对终端结点的删除
满足关键数约束(5阶时,即要求至少有2个关键字)时,直接删除
删除后不满足约束时,先看左右兄弟是否够借,以右兄弟够借为例,分别用后继,后继的后继填补
如删除38(49代替38,70代替49)
不够借时,将该结点,其兄弟结点,两结点中间的关键字,三者合并。如删除49
②对非终端结点的删除:使用前驱(左子树最右下)或后继(右子树最左下)代替
如删除根结点80
另外,也可以用82代替
以上是关于B树(多路平衡查找树)的主要内容,如果未能解决你的问题,请参考以下文章