1.简单
下列哪个运行时间是多项式的?
- AO(n!)
- BO(2ⁿ)
- CO(n³)
- DO(nⁿ)
2.简单
什么是记忆化(memoisation)?
- A自动把递归转换为等价的循环,从而不需要调用栈
- B在每行代码旁边写注释
- C函数返回后释放内存
- D存储函数调用的结果,使重复调用能直接从内存中得到答案
3.简单
二分查找对输入有什么要求?
- A数组只能包含正数
- B数组元素不能超过 1000 个
- C数组长度必须是 2 的幂
- D数组必须有序
4.中等
递推式 T(n) = T(n − 1) + O(n) 的解是什么?
- AO(n)
- BO(2ⁿ)
- CO(n²)
- DO(n log n)
5.中等
为什么许多库排序函数在子数组很小时会改用插入排序?
- A插入排序开销小,在小规模或几乎有序的输入上很快
- B递归算法无法处理少于 10 个元素的数组
- C插入排序在最坏情况下是 O(n log n)
- D在大规模输入上,插入排序比任何其他排序算法使用的内存都少
6.中等
递推式 T(n) = T(n/2) + O(1) 的解是什么?
- AO(n)
- BO(1)
- CO(n log n)
- DO(log n)
7.困难
拓扑排序只适用于:
- A无向图
- B有向无环图(DAG)
- C完全图
- D带负权重的图
8.困难
关于 little-o 记号,下列哪个说法是正确的?
- A2n = o(n),因为 2n 增长得慢
- Bn = o(n²),但 n 不是 o(n)
- Cn = o(n),因为每个函数都是自身的 little-o
- Dn² = o(n)
答案
- 1. C · O(n³)
- 2. D · 存储函数调用的结果,使重复调用能直接从内存中得到答案
- 3. D · 数组必须有序
- 4. C · O(n²)
- 5. A · 插入排序开销小,在小规模或几乎有序的输入上很快
- 6. D · O(log n)
- 7. B · 有向无环图(DAG)
- 8. B · n = o(n²),但 n 不是 o(n)
完整分步解答:请在 examproblems.com 上练习本主题。