1.简单
一个 O(n) 算法在 n = 100 万时需要 3 秒。n = 200 万时大约需要多长时间?
- A3 秒
- B6 秒
- C9 秒
- D12 秒
2.简单
哪种记号表示增长的下界?
- AO(Big O)
- BΘ(Big Theta)
- CΩ(Big Omega)
- Do(little o)
3.简单
在包含 n 个元素的无序数组中进行线性查找(linear search)的时间复杂度(最坏情况)是多少?
- AO(n²)
- BO(1)
- CO(log n)
- DO(n)
4.中等
为什么动态规划不能真正加速归并排序?
- A动态规划只适用于图问题,不适用于数组
- B归并排序没有递归结构
- C归并排序已经是 O(n)
- D它的子问题不重叠,因此没有可以复用的结果
5.中等
当问题具有以下特征时,动态规划(dynamic programming)很有用:
- A重叠子问题和最优子结构
- B完全没有子问题,因此一步就能解决
- C只有一个循环
- D只有随机输入
6.中等
快速排序总是使用第一个元素作为基准。它在哪种输入上表现出最坏情况?
- A长度为 2 的数组
- B随机顺序的数组
- C所有元素都不相同的数组
- D已经有序的数组
7.困难
停机问题(halting problem)表明:
- A不存在一种算法能对所有程序和输入判定其是否会停机
- B应当避免使用循环
- C每个程序最终都会停机
- D有些程序在更快的计算机上运行得更快,所以是否停机取决于硬件
8.困难
当 n 很大时,n! 与 2ⁿ 相比如何?
- A2ⁿ 比 n! 增长得快
- Bn! 是 O(n²)
- Cn! 比 2ⁿ 增长得快
- D两者以相同的速率增长
答案
- 1. B · 6 秒
- 2. C · Ω(Big Omega)
- 3. D · O(n)
- 4. D · 它的子问题不重叠,因此没有可以复用的结果
- 5. A · 重叠子问题和最优子结构
- 6. D · 已经有序的数组
- 7. A · 不存在一种算法能对所有程序和输入判定其是否会停机
- 8. C · n! 比 2ⁿ 增长得快
完整分步解答:请在 examproblems.com 上练习本主题。