1.简单
二分查找对输入有什么要求?
- A数组必须有序
- B数组长度必须是 2 的幂
- C数组元素不能超过 1000 个
- D数组只能包含正数
2.简单
什么是蛮力算法(brute-force algorithm)?
- A尝试所有可能的候选解的算法
- B在多个处理器上运行的算法
- C随机猜测答案的算法
- D总是使用递归的算法
3.简单
一个包含两层嵌套循环、每层都执行 n 次的算法,通常具有哪种复杂度?
- AO(2n)
- BO(n)
- CO(n²)
- DO(log n)
4.中等
均摊分析衡量的是什么?
- A序列中任何位置上单个最昂贵操作的代价
- B算法在最好输入上的代价
- C在最坏情况的操作序列上,每个操作的平均代价
- D在随机输入上的期望代价
5.中等
为什么许多库排序函数在子数组很小时会改用插入排序?
- A插入排序在最坏情况下是 O(n log n)
- B在大规模输入上,插入排序比任何其他排序算法使用的内存都少
- C递归算法无法处理少于 10 个元素的数组
- D插入排序开销小,在小规模或几乎有序的输入上很快
6.中等
对于在满时将容量翻倍的动态数组,追加元素的均摊(amortised)时间复杂度是多少?
- AO(n)
- BO(1)
- CO(log n)
- DO(n²)
7.困难
不可判定问题与难解问题有什么区别?
- A两者都意味着该问题根本没有算法
- B不可判定问题没有任何能处理所有输入的算法,而难解问题有算法,但太慢
- C不可判定问题属于 NP,而难解问题属于 P
- D难解问题无法被任何算法求解,而不可判定问题只需要指数时间
8.困难
如果有人为某个 NP 完全问题找到了多项式时间算法,会有什么结果?
- A只有那一个问题会进入 P
- B停机问题将变得可判定
- C所有指数时间算法都会立即变成线性时间
- DNP 中的每个问题都能在多项式时间内求解,因此 P = NP
答案
- 1. A · 数组必须有序
- 2. A · 尝试所有可能的候选解的算法
- 3. C · O(n²)
- 4. C · 在最坏情况的操作序列上,每个操作的平均代价
- 5. D · 插入排序开销小,在小规模或几乎有序的输入上很快
- 6. B · O(1)
- 7. B · 不可判定问题没有任何能处理所有输入的算法,而难解问题有算法,但太慢
- 8. D · NP 中的每个问题都能在多项式时间内求解,因此 P = NP
完整分步解答:请在 examproblems.com 上练习本主题。