B树的定义
flyfish 2015-7-15

B-树即为B树。由于B树的原英文名称为B-tree,由于翻译的不统一所以B树和B-树都是B-tree。

B树定义 引用自严蔚敏《数据结构》(C语言版)
B树是一种平衡的多路查找树
定义:一棵m 阶的B树,或者为空树。或为满足下列特性的m 叉树:
1 树中每一个结点至多有m 棵子树;
2 若根结点不是叶子结点。则至少有两棵子树;
3 除根结点之外的全部非终端结点至少有m/2棵子树。
4 全部的非终端结点中包括下面信息数据:
(n。A0K1A1K2A2,…。KnAn
当中:Ki(i=1,…,n)为keyword,且Ki<Ki+1
Ai (i=0。…,n)为指向子树根结点的指针。且指针Ai1 所指子树中全部结点的keyword均小于Ki (i=1,…,n),
An 所指子树中全部结点的keyword均大于Kn.
n( m/21nm1)为keyword的个数(或者n+1为子树的个数)。
5 全部的叶子结点都出如今同一层次上。而且不带信息(能够看作是外部结点或查找失败的结点,实际上这些结点不存在,指向这些结点的指针为空)。

结点最大的孩子数目称为B树的阶(order)

B树定义 引用自 Donald Knuth的《The Art of Computer programming》

A B-tree of order m is a tree that satisfies the following properties:
1 Every node has at most m children.
2 Every node, except for the root and the leaves, has at least m/2 children,
3 The root has at least 2 children (unless it is a leaf),
4 All leaves appear on the same level, and carry no information.
5 A nonleaf node with k children contains k - 1 keys.
翻译
1 树中每一个结点至多有m个孩子。
2 除根结点和叶子结点外。其他每一个结点至少有m/2个孩子;
3 若根结点不是叶子结点,则至少有2个孩子;
4 全部叶子结点都出如今同一层,叶子结点不包括不论什么keyword信息;
5 有k个孩子的非终端结点包括k-1个keyword。

向下取整floor,用数学符号表示
向上取整ceil。用数学符号表示
floor(7.5) = 7
floor(-7.5) = -8
ceil(7.5) = 8
ceil(-7.5) = -7

B树示意图
绿色:keyword个数
红色:指针
蓝色:keyword
keyword从1到9的B树
这里写图片描写叙述

问题:
对于n个keyword的m阶B树。最坏情况须要查找几次?

相同的问题不同的问法
含n个keyword的m阶B树的最大深度是多少?

深度为h+1的m阶B树所具有的最少结点数是
第一层至少1个节点
第二层至少2个节点

除根节点外每一个分支节点至少有m/2棵子树
所以层数与每层至少结点数的关系例如以下
1 = 1
2 = 2
3 = 2× m/2
4 = 2×( m/2)2
5 = 2×( m/2)3
6 = 2×( m/2)4
7 = 2×( m/2)5

h = 2×( m/2)h2
h+1 = 2×( m/2)h1

h+1层的节点就是叶子节点。若m阶B树有n个keyword。则叶子节点即查找不成功的节点为n+1

推导
n+1 2×(m/2)h1

2×( m/2)h1 n+1

( m/2)h1n+12

h-1logm/2(n+12)

hlogm/2(n+12)+1

所以 含n个keyword的m阶B树的最大深度是
logm/2(n+12)+1

读作 以m/2为底 (n+12)的对数 加1

Degree为3,关键码从1到9的B树示意图
绿色:keyword个数
红色:指针
蓝色:keyword

这里写图片描写叙述