1.简单
一个包含两层嵌套循环、每层都执行 n 次的算法,通常具有哪种复杂度?
- AO(2n)
- BO(log n)
- CO(n)
- DO(n²)
2.简单
哪种排序算法会反复交换顺序错误的相邻元素?
- A归并排序(Merge sort)
- B冒泡排序(Bubble sort)
- C快速排序(Quicksort)
- D堆排序(Heap sort)
3.简单
一个循环从 i = 1 开始,每次迭代将 i 翻倍,直到 i > n。它运行多少次迭代?
- A约 log₂ n 次
- B约 n / 2 次
- C约 n² 次
- D约 n 次
4.中等
下面代码的时间复杂度是多少:for i = 1 to n: (j = 1; while j < n: j = j × 2)?
- AO(log n)
- BO(n)
- CO(n log n)
- DO(n²)
5.中等
对于在满时将容量翻倍的动态数组,追加元素的均摊(amortised)时间复杂度是多少?
- AO(1)
- BO(n)
- CO(log n)
- DO(n²)
6.中等
Floyd–Warshall 算法计算什么?速度如何?
- A以 O(E log V) 计算最小生成树
- B以 O(V + E) 计算从一个源顶点到所有其他顶点的最短路径
- C以 O(V³) 计算所有顶点对之间的最短路径
- D以 O(V²) 计算拓扑序
7.困难
下面代码的时间复杂度是多少:for i = 1 to n: for (j = i; j ≤ n; j = j + i) 执行 O(1) 的工作?
- AO(n²)
- BO(n √n)
- CO(n)
- DO(n log n)
8.困难
一个问题是 NP 完全(NP-complete)的,当且仅当它:
- A可以在多项式时间内解决
- B不属于 NP,但比所有 NP 问题都难,例如停机问题
- C属于 NP,且所有 NP 问题都能在多项式时间内归约到它
- D不可能被解决
答案
- 1. D · O(n²)
- 2. B · 冒泡排序(Bubble sort)
- 3. A · 约 log₂ n 次
- 4. C · O(n log n)
- 5. A · O(1)
- 6. C · 以 O(V³) 计算所有顶点对之间的最短路径
- 7. D · O(n log n)
- 8. C · 属于 NP,且所有 NP 问题都能在多项式时间内归约到它
完整分步解答:请在 examproblems.com 上练习本主题。