408数据结构第7章:查找②——顺序、折半、分块查找秒杀 + 真题

目标:把这部分选择题压缩成固定套路。
重点:最大比较次数、比较序列、判定树、折半适用条件、分块最优块大小。


一、先背这一页

顺序查找:
成功ASL = (n+1)/2

折半查找:
必须“有序 + 随机访问”
最大比较次数 = ceil(log2(n+1))

折半判定树:
结点层数 = 成功比较次数
n个元素有n+1个失败位置

分块查找:
块间有序,块内可无序

顺序找索引 + 顺序找块内:
最优块大小 = √n

二、秒杀题型1:折半查找最多比较几次

直接:

最多比较次数
=
ceil(log2(n+1))

或者找最小h满足:

2^h - 1 >= n

真题1:2010年408

题目:

一个长度为16的有序顺序表,
采用折半查找查找一个不存在的元素,
关键字比较次数最多是多少?

选项:

A. 4
B. 5
C. 6
D. 7

秒杀

2^4-1 = 15 < 16

2^5-1 = 31 >= 16

所以:

最多5次

答案:

B

三、秒杀题型2:比较序列能不能出现

不要构造完整数组。

只维护:

key当前可能在哪个区间

真题2:2015年408第7题

题目:

下列选项中,
不能构成折半查找中关键字比较序列的是:
A. 500,200,450,180
B. 500,450,200,180
C. 180,500,200,450
D. 180,200,500,450

看A

500 -> 200

说明:

key < 500

然后:

200 -> 450

说明:

key > 200

所以现在:

200 < key < 500

下一次却去比较:

180

180已经不在:

(200,500)

这个合法区间里。

因此不可能。

答案:

A

口诀

每比较一次,
key的合法范围缩小一次。

后面的比较值
必须还落在当前合法区间。

四、秒杀题型3:折半判定树图形判断

看到四棵树,按这三关排:

第1关:
中序是否递增?
不是 -> 排除

第2关:
树是不是基本平衡?
严重偏斜 -> 排除

第3关:
偶数区间的mid取整规则是否始终一致?
一会儿向上,一会儿向下 -> 排除

2017年408第8题

题目要求判断:

哪棵二叉树可能成为折半查找判定树

正确答案:

A

这题最重要的坑就是:

同一棵判定树中,
mid取整规则必须统一。

五、秒杀题型4:600个元素最多比较几次

真题3:2023年408第8题

题目:

对含有600个元素的有序顺序表进行折半查找,
关键字比较次数最多是多少?

直接看:

2^9 = 512
2^10 = 1024

因为:

512 < 600 < 1024

所以:

最多比较10次

答案:

10

六、秒杀题型5:什么结构不能直接折半

第一反应:

折半查找 = 有序 + 随机访问

缺一不可。


真题4:2024年408第5题

题目给出:

I. 有序链表
II. 无序数组
III. 有序静态链表
IV. 无序静态链表

问哪些不适合直接使用折半查找。

I 有序链表

有序
但不能随机访问mid

不适合。

II 无序数组

能随机访问
但无序

不适合。

III 有序静态链表

虽然底层使用数组空间,但逻辑次序依赖:

游标 / next

不能把“逻辑第mid个元素”直接当普通数组下标访问。

不适合直接折半。

IV 无序静态链表

更不适合。

所以:

四种都不适合

答案:

D

秒杀口诀

折半只认:
有序 + 可以O(1)访问中间位置

七、秒杀题型6:分块查找最优块大小

如果:

n个元素
每块s个

且:

索引顺序查找
块内也顺序查找

直接:

最优 s = √n

真题5:2025年408第7题

题目:

查找表有400个元素,
均匀分块。

索引表用顺序查找,
块内也用顺序查找。

为了效率最高,
每块应包含多少元素?

直接:

√400 = 20

所以:

每块20个元素

答案:

C

八、顺序查找ASL题

等概率成功查找:

ASL = (n+1)/2

例如:

n = 11

则:

ASL = 6

九、有序顺序查找的失败判断

若表升序:

10 20 30 40 50

查找:

25

扫描到:

30

已经:

30 > 25

直接失败。

因此:

有序顺序查找
失败时不一定需要扫到表尾

十、折半路径题的统一草稿格式

每轮只写:

low   mid   high

然后:

key < A[mid]
-> high = mid-1

key > A[mid]
-> low = mid+1

直到:

找到

或:

low > high

不要在脑子里空算,容易把边界搞错。


十一、分块查找最容易记反的点

正确:

块内可以无序

块间必须有序

索引项通常记录:

块最大关键字
+
块起始地址

做题顺序:

先查索引
再进块内

一句话:

块内乱没事,块与块不能乱。

十二、五类真题压缩成五条规则

2010:
n=16求最多比较
-> ceil(log2(n+1))
-> 5

2015:
判断比较序列
-> 维护key合法区间
-> A不可能

2017:
判断折半判定树
-> BST + 平衡 + mid规则一致
-> A

2023:
600个元素最多比较
-> 512<600<1024
-> 10

2024:
折半适用结构
-> 有序 + 随机访问
-> 四种都不适合,D

2025:
400元素分块最优
-> √400
-> 20

十三、考场一页纸

【顺序查找】
成功ASL = (n+1)/2
最通用
链表也能用

【折半查找】
有序 + 随机访问
O(log n)
最大比较次数 = ceil(log2(n+1))

判定树:
层数 = 成功比较次数
n个元素有n+1个失败位置

比较序列:
维护key当前合法区间

判定树图:
BST + 基本平衡 + mid规则一致

【分块查找】
块间有序
块内可无序

顺序索引 + 顺序块内:
最优块大小 = √n

十四、强化阶段复习优先级

第一优先:
折半查找过程
最大比较次数
折半判定树

第二优先:
折半适用条件
比较序列

第三优先:
分块查找√n公式

第四优先:
顺序查找ASL

做到:

看到题型
-> 立刻认规则
-> 十几秒完成

这部分就够稳了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值