1.简单
一个 O(n) 算法在 n = 100 万时需要 3 秒。n = 200 万时大约需要多长时间?
- A6 秒
- B9 秒
- C3 秒
- D12 秒
2.简单
一个问题通常在什么情况下被称为易解的(tractable)?
- A能在常数时间内求解
- B只能通过尝试所有可能来求解
- C没有解
- D能在多项式时间内求解
3.简单
通过下标访问数组中的元素需要:
- AO(n)
- BO(n²)
- CO(log n)
- DO(1)
4.中等
为什么在 Big O 中通常省略对数的底,例如写成 O(log n)?
- A计算机科学中所有对数的底都是 10,所以可以省略
- B底只在 n 很小时才有影响
- C不同底的对数之间只相差一个常数因子
- D对数总是被四舍五入为整数
5.中等
用自底向上的表格计算第 n 个斐波那契数,时间复杂度是多少?
- AO(n²)
- BO(n)
- CO(log n)
- DO(2ⁿ)
6.中等
在边权非负的图中,哪种算法用于求单源最短路径?
- A任何情况下都必须使用 Bellman–Ford
- BDijkstra 算法
- C深度优先搜索(DFS)
- DKruskal 算法
7.困难
Held–Karp 动态规划算法能精确求解旅行商问题。对 n 个城市,它的运行时间是多少?
- AO(n!)
- BO(2n²)
- CO(n³)
- DO(n² 2ⁿ)
8.困难
关于在无序数组中选择第 k 小的元素,下列哪个说法是正确的?
- A快速选择的最坏情况为 O(log n),因为它只对枢轴的一侧递归
- B快速选择的期望时间为 O(n),而中位数的中位数法保证最坏情况为 O(n)
- C选择总是需要 Ω(n log n),因为必须先排序
- D选择只能在 O(n²) 内完成
答案
- 1. A · 6 秒
- 2. D · 能在多项式时间内求解
- 3. D · O(1)
- 4. C · 不同底的对数之间只相差一个常数因子
- 5. B · O(n)
- 6. B · Dijkstra 算法
- 7. D · O(n² 2ⁿ)
- 8. B · 快速选择的期望时间为 O(n),而中位数的中位数法保证最坏情况为 O(n)
完整分步解答:请在 examproblems.com 上练习本主题。