1.简单
一个问题通常在什么情况下被称为易解的(tractable)?
- A没有解
- B能在常数时间内求解
- C只能通过尝试所有可能来求解
- D能在多项式时间内求解
2.简单
归并排序采用哪种设计策略?
- A蛮力法
- B分治法(divide and conquer)
- C动态规划
- D贪心选择
3.简单
O(2ⁿ) 的增长称为什么?
- A对数级
- B线性
- C指数级
- D多项式级
4.中等
在边权非负的图中,哪种算法用于求单源最短路径?
- ADijkstra 算法
- BKruskal 算法
- C任何情况下都必须使用 Bellman–Ford
- D深度优先搜索(DFS)
5.中等
为什么许多库排序函数在子数组很小时会改用插入排序?
- A递归算法无法处理少于 10 个元素的数组
- B在大规模输入上,插入排序比任何其他排序算法使用的内存都少
- C插入排序开销小,在小规模或几乎有序的输入上很快
- D插入排序在最坏情况下是 O(n log n)
6.中等
快速排序总是使用第一个元素作为基准。它在哪种输入上表现出最坏情况?
- A已经有序的数组
- B随机顺序的数组
- C所有元素都不相同的数组
- D长度为 2 的数组
7.困难
要证明一个新问题 X 是 NP 难(NP-hard)的,必须做什么?
- A把 X 在多项式时间内归约到一个已知的 NP 难问题
- B证明 X 能在多项式时间内被验证
- C把一个已知的 NP 难问题在多项式时间内归约到 X
- D证明 X 对于小规模输入没有多项式算法
8.困难
拓扑排序只适用于:
- A带负权重的图
- B有向无环图(DAG)
- C无向图
- D完全图
答案
- 1. D · 能在多项式时间内求解
- 2. B · 分治法(divide and conquer)
- 3. C · 指数级
- 4. A · Dijkstra 算法
- 5. C · 插入排序开销小,在小规模或几乎有序的输入上很快
- 6. A · 已经有序的数组
- 7. C · 把一个已知的 NP 难问题在多项式时间内归约到 X
- 8. B · 有向无环图(DAG)
完整分步解答:请在 examproblems.com 上练习本主题。