B树和B+树算法分析
B树也就是平常看到的B-树,以前我一直认为B-树叫做B减树,就像B+树叫做B加树一样,其实B-树中间那个只是杠而已,所以以后大家不要读错了。好了,话不多说开始正题。
一种算法的出现必然是有需求引起的,那为什么有了二叉树这种算法还会发明B树这种数据结构呢,有了B树为什么又要出现B+树这种数据结构呢?我也看过不少这两种算法的各种分析和解读。我想我得出的结论主要是因为减少磁盘IO树,尤其是针对数据库这种应用。
首先我们来看看B的基本结构和原理:
1、声明一下画图软件过期了,暂时不想找,所以用wps画的,可能有点抽象但是相信大家都能看懂,纯属原创。
一、B树的性质
1、每个节点至多含有m棵子树。
2、除根节点外,其它每个分支至少有(m/2)向上取整课树。
3、跟节点至少有两棵子树(除非B树只包含一个节点)。
4、所有叶子节点在同一层。B树的叶节点可以看成一种外部节点,不包含任何信息。
5、有j个孩子的非叶节点恰好有j-1个关键码,关键码按递增次序排序。
二、时间复杂度
设节点数为n,高位h,每个节点含有t个关键字。
则有:n = 2*t^h - 1;
所以 h = log(T,(n+1)/2);PS:以T为底,(n+1)/2为对数。
三、插入操作
1、若要插入当前节点的关键字数量小于m-1,则直接插入。
2、若插入节点关键字数量等于m-1,则插入节点后向上分裂,分裂后的节点向上递归插入,如果根节点还要继续分裂,则分裂出新的根节点,此时B树的高度+1。
四、删除操作
1、第一种情况,要删除的当前叶节点的关键字节点中关键字个数大于m/2(向上取整),则直接删除。
2、第二种情况
当前删除的非叶节点的删除,该节点情况为关键字个数大于m/2(向上取整)
3、第三种情况
当前删除的节点是叶节点但是关键字节点数量小于m/2(向上取整),则需要左旋或者右旋。
4、第四种情况
当前节点非叶节点,删除后合并子节点的关键字
五、查找
B树的搜索方式和二叉树相同,最大搜索时间为mlog(m,n)(以m为底,n为对数),具体分析在最前面讲过了。
B+树在下节讲解,刚开始写博客,有很多不足之处,望指出和理解,哈哈。