1.简单
在 n 个数的无序数组中找出最大值的时间复杂度是多少?
- AO(n)
- BO(1)
- CO(n log n)
- DO(log n)
2.简单
3n² + 5n + 2 的 Big O 是什么?
- AO(5n)
- BO(n³)
- CO(3n²)
- DO(n²)
3.简单
归并排序采用哪种设计策略?
- A蛮力法
- B动态规划
- C分治法(divide and conquer)
- D贪心选择
4.中等
为什么动态规划不能真正加速归并排序?
- A它的子问题不重叠,因此没有可以复用的结果
- B归并排序没有递归结构
- C动态规划只适用于图问题,不适用于数组
- D归并排序已经是 O(n)
5.中等
对于在满时将容量翻倍的动态数组,追加元素的均摊(amortised)时间复杂度是多少?
- AO(n²)
- BO(n)
- CO(log n)
- DO(1)
6.中等
在包含 1,000,000 个元素的有序数组上,二分查找在最坏情况下大约需要多少次比较?
- A约 1,000 次
- B约 20 次
- C约 100 次
- D约 500,000 次
7.困难
取一个极大匹配中每条边的两个端点,可以得到一个顶点覆盖。这个覆盖有多好?
- A至多是最小值的 log n 倍
- B与最优解相比质量未知
- C至多是最小顶点覆盖大小的两倍
- D总是一个最小顶点覆盖
8.困难
用自底向上的方法从 n 个无序元素构建二叉堆的时间复杂度是多少?
- AO(log n)
- BO(n²)
- CO(n log n)
- DO(n)
答案
- 1. A · O(n)
- 2. D · O(n²)
- 3. C · 分治法(divide and conquer)
- 4. A · 它的子问题不重叠,因此没有可以复用的结果
- 5. D · O(1)
- 6. B · 约 20 次
- 7. C · 至多是最小顶点覆盖大小的两倍
- 8. D · O(n)
完整分步解答:请在 examproblems.com 上练习本主题。