B树算法分析

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。
插入节点数小于m-1则直接插入
当节点满了的时候向上分裂
四、删除操作
1、第一种情况,要删除的当前叶节点的关键字节点中关键字个数大于m/2(向上取整),则直接删除。
当前页节点大于m/2直接删除
2、第二种情况
当前删除的非叶节点的删除,该节点情况为关键字个数大于m/2(向上取整)
当前非页节点的删除节点向上补齐
3、第三种情况
当前删除的节点是叶节点但是关键字节点数量小于m/2(向上取整),则需要左旋或者右旋。
左旋或者右旋的情况
4、第四种情况
当前节点非叶节点,删除后合并子节点的关键字
合并子节点关键字
五、查找
B树的搜索方式和二叉树相同,最大搜索时间为mlog(m,n)(以m为底,n为对数),具体分析在最前面讲过了。

B+树在下节讲解,刚开始写博客,有很多不足之处,望指出和理解,哈哈。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值