1.简单
3n² + 5n + 2 的 Big O 是什么?
- AO(n³)
- BO(5n)
- CO(3n²)
- DO(n²)
2.简单
归并排序采用哪种设计策略?
- A分治法(divide and conquer)
- B蛮力法
- C动态规划
- D贪心选择
3.简单
对范围在 0 到 k 之间的 n 个整数进行计数排序(counting sort),运行时间是多少?
- AO(n²)
- BO(n + k)
- CO(n log n)
- DO(k log n)
4.中等
当问题具有以下特征时,动态规划(dynamic programming)很有用:
- A重叠子问题和最优子结构
- B只有随机输入
- C完全没有子问题,因此一步就能解决
- D只有一个循环
5.中等
Prim 算法如何构建最小生成树?
- A把所有边按权重排序,逐条加入,除非会在森林中形成环
- B从一个起始顶点开始扩展一棵树,每次加入离开该树的最便宜的边
- C不断删除最贵的边,直到没有环为止
- D运行广度优先搜索并保留 BFS 树
6.中等
一个问题具有最优子结构是什么意思?
- A最优解可以由其子问题的最优解构造出来
- B每个子问题的规模都相同
- C该问题可以在常数时间内求解
- D该问题恰好有一个最优解,所有子问题共享这个解
7.困难
关于在无序数组中选择第 k 小的元素,下列哪个说法是正确的?
- A快速选择的最坏情况为 O(log n),因为它只对枢轴的一侧递归
- B选择总是需要 Ω(n log n),因为必须先排序
- C快速选择的期望时间为 O(n),而中位数的中位数法保证最坏情况为 O(n)
- D选择只能在 O(n²) 内完成
8.困难
用自底向上的方法从 n 个无序元素构建二叉堆的时间复杂度是多少?
- AO(n²)
- BO(log n)
- CO(n log n)
- DO(n)
答案
- 1. D · O(n²)
- 2. A · 分治法(divide and conquer)
- 3. B · O(n + k)
- 4. A · 重叠子问题和最优子结构
- 5. B · 从一个起始顶点开始扩展一棵树,每次加入离开该树的最便宜的边
- 6. A · 最优解可以由其子问题的最优解构造出来
- 7. C · 快速选择的期望时间为 O(n),而中位数的中位数法保证最坏情况为 O(n)
- 8. D · O(n)
完整分步解答:请在 examproblems.com 上练习本主题。