专门做计算题。
设:

m = B树的阶
k = ⌈m/2⌉
n = 全树关键字总数
h = B树高度(根为第1层)

一、基础公式

m阶B树:

最多子树数 = m
最多关键字数 = m-1

除根外非叶结点:

最少子树数 = k = ⌈m/2⌉
最少关键字数 = k-1

根若不是终端结点:

最少2棵子树
最少1个关键字

二、求最大高度:让树尽量稀

同样n个关键字,想让树尽可能高:

每个结点尽量少放关键字
每个结点尽量少分叉

各层最少结点数:

第1层:1
第2层:2
第3层:2k
第4层:2k²
...
第h层:2k^(h-2)

各层最少关键字数:

第1层:1
第2层:2(k-1)
第3层:2k(k-1)
第4层:2k²(k-1)
...

三、高度h时最少关键字总数

n_min
= 1 + 2(k-1)(1+k+k²+...+k^(h-2))

化简:

n_min = 2k^(h-1)-1

因此:

n ≥ 2k^(h-1)-1

最大高度:

h_max
= floor(log_k((n+1)/2)) + 1

四、求最小高度:让树尽量满

想让树尽可能矮:

每个结点尽量放满
每个结点尽量有m个孩子

高度为h时,最多关键字:

n_max
= (m-1)(1+m+m²+...+m^(h-1))
= m^h-1

因此:

n ≤ m^h-1

最小高度:

h_min = ceil(log_m(n+1))

五、两条高度公式

k = ⌈m/2⌉

最大高度:
floor(log_k((n+1)/2)) + 1

最小高度:
ceil(log_m(n+1))

如果最大高度公式容易忘:

现场按层写最少关键字数

通常更稳。

六、例:5阶B树,高度2,最少关键字

m=5
k=⌈5/2⌉=3

第1层:

1个关键字

第2层:

根最少2个孩子
每个孩子至少k-1=2个关键字

总数:

1 + 2×2 = 5

七、例:3阶B树,高度5,最少关键字

m=3
k=2

各层最少关键字:

1,2,4,8,16

总数:

31

八、n+1关系

若整棵B树共有:

n个关键字

则最底层外部叶子/失败结点数为:

n+1

九、计算题固定流程

第一步:
k = ⌈m/2⌉

第二步:
问最少 → 稀疏模型
问最多 → 满树模型

第三步:
按层算,或套公式

十、考前速记

m阶:
最多m孩子
最多m-1关键字

k=⌈m/2⌉:
非根内部结点至少k孩子
至少k-1关键字

最高:
尽量稀
n_min(h)=2k^(h-1)-1

最矮:
尽量满
n_max(h)=m^h-1
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐