1.简单
一个包含两层嵌套循环、每层都执行 n 次的算法,通常具有哪种复杂度?
- AO(n)
- BO(2n)
- CO(log n)
- DO(n²)
2.简单
哪种排序算法选择一个基准,并把数组划分为较小元素和较大元素两部分?
- A归并排序
- B插入排序
- C快速排序
- D冒泡排序
3.简单
插入排序(insertion sort)的最坏情况时间复杂度是多少?
- AO(n log n)
- BO(n)
- CO(log n)
- DO(n²)
4.中等
用自底向上的表格计算第 n 个斐波那契数,时间复杂度是多少?
- AO(2ⁿ)
- BO(n)
- CO(log n)
- DO(n²)
5.中等
说一个 O(n²) 算法也是 O(n³),这正确吗?
- A正确,因为 Big O 是上界,而 n² 的增长不比 n³ 快
- B不正确,因为 Big O 必须始终给出函数的确切增长率
- C不正确,因为当 n 很大时 n³ 小于 n²
- D正确,但仅当 n 小于 100 时
6.中等
为什么动态规划不能真正加速归并排序?
- A动态规划只适用于图问题,不适用于数组
- B归并排序已经是 O(n)
- C它的子问题不重叠,因此没有可以复用的结果
- D归并排序没有递归结构
7.困难
关于 little-o 记号,下列哪个说法是正确的?
- An = o(n),因为每个函数都是自身的 little-o
- Bn = o(n²),但 n 不是 o(n)
- C2n = o(n),因为 2n 增长得慢
- Dn² = o(n)
8.困难
Bellman–Ford 算法如何检测从源点可达的负权环?
- A它运行两次 Dijkstra 算法,并比较两次的距离结果
- B用深度优先搜索统计环的数量
- C在 V − 1 轮之后,检查是否还有边可以被松弛
- D检查是否有边的权重为负
答案
- 1. D · O(n²)
- 2. C · 快速排序
- 3. D · O(n²)
- 4. B · O(n)
- 5. A · 正确,因为 Big O 是上界,而 n² 的增长不比 n³ 快
- 6. C · 它的子问题不重叠,因此没有可以复用的结果
- 7. B · n = o(n²),但 n 不是 o(n)
- 8. C · 在 V − 1 轮之后,检查是否还有边可以被松弛
完整分步解答:请在 examproblems.com 上练习本主题。