B树、B-树、B+树
来源:互联网 发布:淘宝怎样上下架时间 编辑:程序博客网 时间:2024/06/07 05:23
一,B树(Binary Search Tree)
B树即二叉搜索树,二叉排序树或者是空树,或者是满足如下性质的二叉树:
1,若它的左子树非空,则左子树上所有节点的关键字小于根节点的关键字。
2,若它的右子树非空,则右子树上所有节点的关键字大于根节点的关键字。
3,左、右子树本身又各是一颗二叉排序树。
二,B-树
1,B-树的定义
B-树称为多路平衡查找树,是一种组织和维护外存文件系统非常有效的数据结构。B-树是所有节点的平衡因子均为0的多路查找树。B-树中所有节点的孩子节点最大值称为B-树的阶,通常用m表示。一颗B-树或者是一颗空树,或是满足下面要求的m次树:
(1),叶节点:
所有的叶子节点在同一层,并且不带信息。(这里的叶节点就是NULL节点)
(2),根节点
根节点或者没有子树,或者至少有两棵子树。
(3),非叶节点的子树的个数
至少有m / 2棵子树,至多有m - 1棵子树。
(4),非叶节点包含的信息
包含所有的关键字及指向相关记录的指针。
2,B-树的查找
在B-树中查找指定关键字的方法类似于二叉排序树上的查找,不同的是在每个记录上确定向下查找的路径不一定是二路的,而是多路的。因为一个节点内的关键字的序列是有序的,在一个节点内查找关键字可以使用顺序查找与折半查找。在一棵B-树上查找关键字k的方法为:将k与根节点中的 ki 进行比较
(1),若 k = ki,查找成功。
(2),若 k < k1,顺着指针p0所指的子树继续查找。
(3),若 ki < k <ki+1, 顺着指针pi所指的子树继续查找。
(4),若 ki > kn,顺着指针pn所指的子树继续查找。
3,B-树的特性
(1),关键字集合分布在整棵树中。
(2),任何一个关键字出现且只出现在一个节点中。
(3),搜索有可能在非叶子节点结束。
(4),其搜索性能等价于在关键字全集内做一次二分查找。
三,B+树
1,B+树的定义
B+树是B-树的一种变体,也是一种多路搜索树。一棵m阶B+树满足下面这些条件:
(1),叶节点:
叶子节点包含全部关键字及指向相应记录的指针,而且叶子节点按关键字大小顺序链接。
(2),根节点:
根节点或者没有子树,或者至少有两棵子树。
(3),非叶节点的子树的个数
至少有m / 2棵子树,至多有m棵子树。
(4),非叶节点包含的信息
仅包含它的各个子节点中最大关键字及指向子节点的指针。
2,B+树的特性
(1),所有的关键字都出现在叶子节点的链表中,且链表中的关键字是有序的。
(2),不可能在非叶子节点命中。
(3),非叶子节点是叶子节点的索引,叶子节点相当于存储数据的数据层。
(4),更适合文件索引系统。
四,B-树与B+树之间的区别
1,叶节点
B-树:所有的叶子节点在同一层,并且不带信息。
B+树:叶子节点包含全部关键字及指向相应记录的指针。
2,非叶节点的关键字的个数
B-树:至少有m / 2 - 1个关键字,至多有m - 1个关键字。
B+树:至少有m / 2个关键字,至多有m个关键字。
3,非叶节点保存的信息
B-树:包含所有的关键字及指向相关记录的指针。
B+树:包含它的各个子节点中最大关键字及指向子节点的指针。
4,结构上的差别
B+树中所有的叶子节点都是通过指针链接在一起,而B-树不会这样做。
五,B-树与B+树各自的优点
1,B-树的优点
(1),对于在内部节点的数据,可以直接得到,不用根据叶子节点来定位。2,B+树的优点:
(1),非叶节点不带有指向记录的指针,一个块中可能容纳更多的索引项。这样做一方面可以降低树的高度,另一方面可以定位更多的叶子节点。
- B,B-,B+,B*树
- B-、B、B+、B*树
- B/B+/B*树
- B- ,B+ , B*树
- B , B+ ,B*树
- B-, B+,B* 树
- B树B-B+树
- B- B+ B*树 小结
- B 、B-、B+树总结
- B-、B+、B*树介绍
- B 树、 B- 树、 B+ 树、 B*
- B树、B-树、B+树、B*
- B树,B-,B+,B*树
- B树、B-、B+、B*树
- B树,B-,B+,B* 各种树
- B,B-,B+ 和B*树
- 辨析B树(B-、B+、B*)
- B树 B+树
- 基于HTTP协议的轻量级开源简单队列服务:HTTPSQS
- U-boot1.1.6移植之Makefile分析(一)
- 一列多个标签居中显示
- JSON解析类库之Gson(6) --- 从指定的流中读取Json,并反序列化为指定类的对象
- gulp详细入门教程
- B树、B-树、B+树
- Coverity 使用手册(1)
- http://www.cnblogs.com/DjangoBlog/category/541903.html
- 使用smtplib发送邮件练习
- java并发编程实战阅读笔记(第三章)对象的共享
- maven创建的工程eclipse 项目-->属性-->为什么没有deployment assembly 按钮呢
- Python的行为设计模式之责任链模式
- iphone7中在块与块之间设置margin-bottom没有撑开,无法实现滚动效果
- cmd进入c盘文件夹