408数据结构第7章:B树④——秒杀方案 + 历年真题

只面向做题。
真题题意做了简短转述,保留年份、核心条件和考点。

一、考场先写这5行

m阶B树:

最多孩子 = m
最多关键字 = m-1

k = ⌈m/2⌉

非根内部结点:
至少k个孩子
至少k-1个关键字

根若不是终端:

至少2个孩子
至少1个关键字

二、题型1:问“至少多少关键字”

秒杀:

让树尽可能稀。

也就是:

根只放1个关键字
根只分2个孩子

以后每个非根内部结点
只分k=⌈m/2⌉叉

三、2013年408真题

题意:

一棵高度为2的5阶B树,
最少有多少个关键字?

选项:

A. 5
B. 7
C. 8
D. 14

计算:

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

根最少:

1个关键字
→ 2个孩子

第2层每个结点至少:

k-1=2个关键字

所以:

1 + 2×2 = 5

答案:

A. 5

秒杀点:

高度2
→ 根 + 一层孩子

四、2018年408真题

题意:

高度为5的3阶B树,
至少含多少个关键字?

选项:

A. 15
B. 31
C. 62
D. 242

计算:

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

最稀情况下,各层最少关键字:

第1层:1
第2层:2
第3层:4
第4层:8
第5层:16

总数:

1+2+4+8+16=31

答案:

B. 31

也可以直接:

n_min
=2k^(h-1)-1
=2×2^4-1
=31

五、2021年408真题

题意:

一棵高度为3的3阶B树,
根为第1层。

若第2层共有4个关键字,
则该树的结点数最多是多少?

选项:

A. 11
B. 10
C. 9
D. 8

3阶B树:

每个结点最多3个孩子
最多2个关键字

根最多3个孩子,所以第2层最多:

3个结点

第2层总共4个关键字,为了让结点数最大,可以分成:

2 + 1 + 1

因为:

关键字数 + 1 = 孩子数

所以第3层最多:

3 + 2 + 2 = 7个结点

全树:

第1层:1
第2层:3
第3层:7

总数:

1+3+7=11

答案:

A. 11

这题真正的关键:

关键字数 + 1 = 孩子数

六、题型2:插入

固定流程:

1. 找到应该插入的终端结点

2. 插入并排序

3. 若关键字数 ≤ m-1
   → 结束

4. 若出现m个关键字
   → 分裂

5. 第⌈m/2⌉个关键字上移

6. 父结点若再次溢出
   → 继续向上分裂

口诀:

插入满了:
分裂,中间上移。

七、题型3:删除

固定流程:

删后不低于最少关键字数
→ 直接删

删后太少
→ 看兄弟能不能借

能借
→ 通过父结点调整

不能借
→ 当前 + 父分隔关键字 + 兄弟 合并

口诀:

删除少了:
先借,借不到就合。

八、题型4:问高度

最大高度
→ 让树尽量稀

最小高度
→ 让树尽量满

公式:

k=⌈m/2⌉

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

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

如果公式不熟:

现场按层算

通常更稳。


九、最容易错的4件事

1. 把m阶理解成最多m个关键字

错。

m阶
→ 最多m个孩子
→ 最多m-1个关键字

2. 忘记根特殊

普通非根内部结点至少:

⌈m/2⌉个孩子

根若不是终端:

只要求至少2个孩子

3. 把⌈m/2⌉当普通除法

例如:

m=5

⌈5/2⌉=3

4. 关键字和孩子数记反

一定是:

k个关键字
→ k+1个孩子

十、30秒速记

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

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

根非终端:
至少2孩子,1关键字。

插入:
满 → 分裂 → 中间上移。

删除:
少 → 借 → 借不到合并。

求最高:
尽量稀。

求最低:
尽量满。

关键字数+1:
就是孩子数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值