基本概念
B树,又称多路平衡查找树(绝对平衡,无高度差),B树中所有结点的孩子个数的最大值称为B树的阶,通常用表示。一棵m阶B树或为空树,或为满足如下特性的m叉树:
- 根结点的子树数
∈
[
2
,
m
]
\in[2,m]
∈[2,m];根结点的关键字数
∈
[
1
,
m
−
1
]
\in[1,m-1]
∈[1,m−1]。其他结点的子树数
∈
[
⌈
m
/
2
⌉
,
m
]
\in[\lceil m/2\rceil,m]
∈[⌈m/2⌉,m];其他结点的关键字数
∈
[
⌈
m
/
2
⌉
−
1
,
m
−
1
]
\in[\lceil m/2\rceil-1,m-1]
∈[⌈m/2⌉−1,m−1]
(包括失败结点也成立) - 对于任一结点,其所有子树高度都相同
- 关键字的值:子树0<关键字1<子树1<关键字2<子树2<…(类比二叉查找树 左<中<右)
- 所有叶子结点均不带信息(为失败结点)
B树的高度问题
含n个关键字的m阶B树,最小、最大高度是多少?(此处n个关键字为总关键字数)
- 最小高度
让所有结点尽可能满
→ \rightarrow → 每个结点的关键字数都为m-1
- | root | 第2层 | 第3层 | 第h层 |
---|---|---|---|---|
结点数 | 1 | m | m 2 m^2 m2 | m i − 1 m^{i-1} mi−1 |
则高度为h的m阶B树,最多总关键字数为
(
m
−
1
)
(
1
+
m
+
m
2
+
.
.
m
h
−
1
)
(m-1)(1+m+m^2+..m^{h-1})
(m−1)(1+m+m2+..mh−1)
n
≤
(
m
−
1
)
(
1
+
m
+
m
2
+
.
.
m
h
−
1
)
n\leq(m-1)(1+m+m^2+..m^{h-1})
n≤(m−1)(1+m+m2+..mh−1)
h
≥
l
o
g
m
(
n
+
1
)
h\geq log_m(n+1)
h≥logm(n+1)
- 最大高度
让所有结点仅可能的空,分叉尽可能的少
- | root | 第2层 | 第3层 | 第h层 |
---|---|---|---|---|
结点数 | 1 | 2 | 2* ⌈ m / 2 ⌉ \lceil m/2 \rceil ⌈m/2⌉ | 2* ( ⌈ m / 2 ⌉ ) h − 2 (\lceil m/2 \rceil)^{h-2} (⌈m/2⌉)h−2 |
第h+1层(叶子结点)失败结点共有 2 ∗ ( ⌈ m / 2 ⌉ ) h − 1 2*(\lceil m/2 \rceil)^{h-1} 2∗(⌈m/2⌉)h−1
又因为n个关键字(总)的B树一定有n+1个叶子结点(理解为
[
−
∞
,
+
∞
]
[-\infty,+\infty]
[−∞,+∞]被n个关键字切分为n+1个区域)
则
n
+
1
≥
2
∗
(
⌈
m
/
2
⌉
)
h
−
1
n+1\geq2*(\lceil m/2 \rceil)^{h-1}
n+1≥2∗(⌈m/2⌉)h−1
得
h
≤
l
o
g
⌈
m
/
2
⌉
n
+
1
2
+
1
h\leq log_{\lceil m/2\rceil}{n+1\over 2}+1
h≤log⌈m/2⌉2n+1+1