对B树概念介绍
B树说白了就是一个结点有多个子结点。
本文介绍的数据结构英文是B-tree,中文写作B-树,其中 – 并不是减号,而是连接符,读作B树。
B-树是一种平衡搜索树,但它的每个结点包含的元素可以多于2个,因此并不是严格意义上的二叉树。
相比与二叉树,B树显得更矮,更胖。它的每个结点包含多个数据,这特别适合于对外存的访问。由于硬盘等设备访问速度和内存相比非常慢,而从硬盘读取1个数据和读取10个数据用时几乎一样,这非常适合使用B-树这种结构。每个结点数据很多,就可以从磁盘依次取出大量数据,矮的特点可以减少磁盘的IO次数。
B树与红黑树最大的不同在于,B树的结点可以有许多子女,从几个到几千个。那为什么又说B树与红黑树很相似呢?因为与红黑树一样,一棵含n个结点的B树的高度也为O(lgn),但可能比一棵红黑树的高度小许多,应为它的分支因子比较大。所以,B树可以在O(logn)时间内,实现各种如插入(insert),删除(delete)等动态集合操作。
定义:m阶B树的定义
B-树的所有叶子结点都位于同一深度,同时对每个结点的分支数也有限制。一个m阶B-树满足
每个结点的分支数最多m个,因此每个结点元素个数最多m-1个。
除根节点外,每个结点的分支树最少 ⌈m/2⌉ 个(向上取整)。根节点例外,根节点可以只有2个分支。
这样,m阶B-树也可以叫做 (⌈m/2⌉ , m) -树 。
定义:以最小度为定义B树
我们可以为每棵B树规定一个最小度数(树的孩子结点数):T(最大度数为2T),那么每个结点所包含的关键字个数的范围:T-1 ~2T-1, 所包含的孩子结点个数为T ~ 2T。当结点关键字个数为2T – 1时,该结点满。(根结点至少包含1个关键数,而其他结点至少包含T – 1个关键字。
B树高度
以最小度来求:(注意下面的h是从0计算的,假设h最大可取到3,也就是0,1,2,3相当于4层)
h<=logt((n+1)/2)
t: 最小的度
n:总的关键字个数
h:深度范围
以阶数来求:
曾在一次面试中被问到,一棵含有N个总关键字数的m阶的B树的最大高度是多少?答曰:log_ceil(m/2)(N+1)/2 + 1 (上面中关于m阶B树的第1点特性已经提到:树中每个结点含有最多含有m个孩子,即m满足:ceil(m/2)<=m<=m。
注意:这里求得高度是以1位开始的,即(1,2,3,4…)
参照:http://ju.outofmemory.cn/entry/234025
http://blog.csdn.net/v_JULY_v/article/details/6530142/
B树插入删除
(未完待续)