B树B+树B星树的一些概念

基础概念

:分为节点的度和树的度

节点的度:一个节点有几个孩子【一个结点含有的子结点的个数

树的度:最大的节点的度 为树的度

树的度也等于树的阶【B树中的结点的最大孩子数】

B树

有如下特点

B树特点:

是一种多路搜索树(并不是二叉的):【其中M为树的阶(最大的分叉的个数)】

1.定义任意非叶子结点最多只有M个儿子;且M>2;【必须是多叉树】

2.根结点的儿子数为[2, M];【根节点可以二叉及以上】

3.除根结点以外的非叶子结点的儿子数为[M/2, M];【其他非叶子节点关键字个数要M的一半以上,即块的最低利用率为1/2】

4.每个结点存放至少M/2-1(取上整)和至多M-1个关键字;【显而易见:比节点的度少一】

5.非叶子结点的关键字个数=指向儿子的指针个数-1;【显而易见】

6.非叶子结点的关键字:K[1], K[2], …, K[M-1];且K[i] < K[i+1];【关键字按顺序排(是一种排序树)】

7.非叶子结点的指针:P[1], P[2], …, P[M];其中P[1]指向关键字小于K[1]的子树,P[M]指向关键字大于K[M-1]的子树,其它P[i]指向关键字属于(K[i-1], K[i])的子树;【指针在关键字对应区间内】

8.所有叶子结点位于同一层;【一定是平衡的树】

如:(M=3)

img

B-树的搜索,从根结点开始,对结点内的关键字(有序)序列进行二分查找,如果命中则结束,否则进入查询关键字所属范围的儿子结点;重复,直到所对应的儿子指针为空,或已经是叶子结点;

B+树

B+ 树通常用于数据库和操作系统的文件系统中。B+ 树的特点是能够保持数据稳定有序,其插入与修改拥有较稳定的对数时间复杂度。B+ 树元素自底向上插入。【了解即可】

B+树是应文件系统所需而出的一种B-树的变型树。一棵m阶的B+树和m阶的B-树的差异在于:

1.有n棵子树的结点中含有n个关键字,每个关键字不保存数据,只用来索引,所有数据都保存在叶子节点。【与B树m个关键字对应m+1个指针不同】

2.所有的叶子结点中包含了全部关键字的信息,及指向含这些关键字记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接。【实际数据都存在叶子节点中】

3.所有的非终端结点可以看成是索引部分,结点中仅含其子树(根结点)中的最大(或最小)关键字。【非叶子节点只是目录,起划分区间的作用】
通常在B+树上有两个头指针,一个指向根结点,一个指向关键字最小的叶子结点。

img

B+的搜索与B-树也基本相同,区别是B+树只有达到叶子结点才命中(B-树可以在非叶子结点命中),其性能也等价于在关键字全集做一次二分查找。

B+树的特性:

1.所有关键字都出现在叶子结点的链表中(稠密索引),且链表中的关键字恰好是有序的;

2.不可能在非叶子结点命中;

3.非叶子结点相当于是叶子结点的索引(稀疏索引),叶子结点相当于是存储

(关键字)数据的数据层;

4.更适合文件索引系统;

为什么更适合文件索引呢?
(1)因为一般节点数据较大(比如一个对象有姓名,班级,年龄等信息),而索引较小(比如用ID索引),这样可以将非叶子节点的索引存放到一块磁盘上。B+树的内部结点并没有指向关键字具体信息的指针,其内部结点比B树小,盘块能容纳的结点中关键字数量更多,一次性(将一个盘块)读入内存中可以查找的关键字也就越多,相对的,IO读写次数也就降低了。而IO读写次数是影响索引检索效率的最大因素。
(2)增删文件节点时,效率更高,是因为叶子节点的节点数据以有序的链表结构存储。
(3)查询效率更加稳定:因为B+树的每次查询过程中,都需要遍历从根节点到叶子节点的某条路径。所有关键字的查询路径长度相同,导致每一次查询的效率相当。(这也算个优点)

扩展:叶子节点的节点数据以有序的链表结构存储,增删效率高。

B*树:

是B+树的变体,在B+树的非根和非叶子结点再增加指向兄弟的指针。

B*树定义了非叶子结点关键字个数至少为(2/3)M,即块的最低使用率为2/3。(代替B+树的1/2)

在B+树基础上,为非叶子结点也增加链表指针,将结点的最低利用率提高到2/3

img

参考知乎文章

B树B+树B*树的区别

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值