1.简单
一个包含两层嵌套循环、每层都执行 n 次的算法,通常具有哪种复杂度?
- AO(log n)
- BO(2n)
- CO(n)
- DO(n²)
2.简单
递归函数的基本情况是什么?
- A无需再进行递归调用就能直接给出答案的情况
- B函数的第一行
- C使用内存最多的那次调用
- D输入最大的情况,它在任何递归调用之前就被处理
3.简单
哪种排序算法会反复交换顺序错误的相邻元素?
- A堆排序(Heap sort)
- B冒泡排序(Bubble sort)
- C快速排序(Quicksort)
- D归并排序(Merge sort)
4.中等
一个问题具有最优子结构是什么意思?
- A最优解可以由其子问题的最优解构造出来
- B该问题可以在常数时间内求解
- C该问题恰好有一个最优解,所有子问题共享这个解
- D每个子问题的规模都相同
5.中等
说一个 O(n²) 算法也是 O(n³),这正确吗?
- A正确,因为 Big O 是上界,而 n² 的增长不比 n³ 快
- B正确,但仅当 n 小于 100 时
- C不正确,因为 Big O 必须始终给出函数的确切增长率
- D不正确,因为当 n 很大时 n³ 小于 n²
6.中等
Prim 算法如何构建最小生成树?
- A运行广度优先搜索并保留 BFS 树
- B不断删除最贵的边,直到没有环为止
- C把所有边按权重排序,逐条加入,除非会在森林中形成环
- D从一个起始顶点开始扩展一棵树,每次加入离开该树的最便宜的边
7.困难
用动态规划求解 0/1 背包问题需要 O(nW) 时间。为什么称之为伪多项式(pseudo-polynomial)?
- AW 是一个数值,因此运行时间相对于表示 W 所需的位数是指数级的
- B因为它只适用于 W = 0
- C因为该算法是随机化的,其运行时间随每个输入而变化
- D因为 n 总是很小
8.困难
对于哪种背包问题变体,贪心规则"按单位重量价值的顺序取物品"总能给出最优解?
- A0/1 背包问题,物品必须整个拿取
- B两种变体都可以
- C分数背包问题,物品可以分割
- D两种变体都不可以
答案
- 1. D · O(n²)
- 2. A · 无需再进行递归调用就能直接给出答案的情况
- 3. B · 冒泡排序(Bubble sort)
- 4. A · 最优解可以由其子问题的最优解构造出来
- 5. A · 正确,因为 Big O 是上界,而 n² 的增长不比 n³ 快
- 6. D · 从一个起始顶点开始扩展一棵树,每次加入离开该树的最便宜的边
- 7. A · W 是一个数值,因此运行时间相对于表示 W 所需的位数是指数级的
- 8. C · 分数背包问题,物品可以分割
完整分步解答:请在 examproblems.com 上练习本主题。