B树、B-树、B+树、B*树

此篇为记录自我学习过程的文章,如有错误,欢迎指正

B树,B-树

B-树其实就是B树,因为B树原文中是B-tree,只是国内很多人把B-tree译作B-树,容易令人误解为B树和B-树是两种树(博主曾一度这么认为⊙﹏⊙)

经常见到这个B树,那么它的具体结构是什么呢?

参考算法导论,B树其实是和二叉搜索树很相似,是一种多路搜索树,B树每个节点可以有多个关键字,有多于两个的子树,简单概括其特性

1.每个节点x属性:

    a. x.n,当前存储节点x的关键字个数

    b. x.n个关键字x.key1, x.key2,..., x.keyn, 以非降序方式存放

    c. 每个节点里有x.n+1个孩子指针x.c1, x.c2, ..., x.cn+1。叶节点没有孩子,其ci属性没有定义

    d. x.leaf,布尔值,表示该节点是否为叶节点

2.每个叶节点都有相同的高度,即树的高度

3.每个节点包含的关键字个数有上下界,用一个被称为B树的最小度数t>=2来限制。

    a.每个节点最少含有t-1个关键字(根节点至少一个),最少含有t个孩子

    b.每个节点最多含2t-1个关键字,最多含2t个孩子

 

其他性质(自己简单归纳的):

1.h<=log[(n+1)/2]/logt;(h为B树高度,n为关键字个数)

2.搜索某节点时间复杂度t*(logn/logt)

3.插入关键字,略有复杂,直接插入后可能节点关键字数量可能超过2t-1,不满足B树的性质。对于即将插入的节点,若其关键字已经饱和(关键字数2t-1),将其前后分裂成两个t-1个关键字的节点,中间节点放入到原节点的父节点中(若父节点也饱和,再往上遍历)。当根结点满了分裂,树的高度会增加,分裂是树长高的唯一途径

4.删除关键字,更加复杂。若删除节点为叶子节点,直接删除,少于t-1个关键字再和其他节点合并;若为非叶子节点,删除后还要从子树中往上提一个关键字补全到删除关键字的位置...

B+树

B树的一种变体,和B树基本相同,就是它节点里关键字数和子树数目相等,且只有叶子节点存了一个带数据的链表,故搜索时必须搜索至叶子节点才能停止,中途命中也不停止

 

B*树

B+树的一种改进版,相比B+树而言非根和非叶子节点增加了兄弟指针,块的利用率有1/2提升至2/3

参考:

https://blog.csdn.net/aqzwss/article/details/53074186

待更新...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值