1.简单
在有序数组上进行二分查找(binary search)的时间复杂度是多少?
- AO(n log n)
- BO(log n)
- CO(n)
- DO(1)
2.简单
如果一个操作的运行时间是 O(1),这意味着什么?
- A它每秒运行时间恰好处理一个元素
- B它总是恰好花费一秒
- C它的运行时间不随输入规模增长
- D它只能运行一次
3.简单
算法的最坏情况运行时间描述的是什么?
- A在最小输入上所需的时间
- B在规模为 n 的随机输入上所需的期望时间
- C在慢速计算机上所需的时间
- D在所有规模为 n 的输入上所需的最长时间
4.中等
贪心算法(greedy algorithm):
- A只使用递归
- B尝试所有可能的解
- C在每一步都做出局部最优的选择
- D总能给出最优解
5.中等
用自底向上的表格计算第 n 个斐波那契数,时间复杂度是多少?
- AO(n)
- BO(n²)
- CO(log n)
- DO(2ⁿ)
6.中等
当问题具有以下特征时,动态规划(dynamic programming)很有用:
- A只有一个循环
- B只有随机输入
- C重叠子问题和最优子结构
- D完全没有子问题,因此一步就能解决
7.困难
用自底向上的方法从 n 个无序元素构建二叉堆的时间复杂度是多少?
- AO(n)
- BO(log n)
- CO(n²)
- DO(n log n)
8.困难
哪种技术能使快速排序在任意输入上的期望运行时间为 O(n log n)?
- A均匀随机地选择基准
- B在运行快速排序前先对输入排序
- C总是选择第一个元素
- D只对左侧进行递归
答案
- 1. B · O(log n)
- 2. C · 它的运行时间不随输入规模增长
- 3. D · 在所有规模为 n 的输入上所需的最长时间
- 4. C · 在每一步都做出局部最优的选择
- 5. A · O(n)
- 6. C · 重叠子问题和最优子结构
- 7. A · O(n)
- 8. A · 均匀随机地选择基准
完整分步解答:请在 examproblems.com 上练习本主题。