1.简单
当 n 变大时,下列哪一项增长最慢?
- AO(log n)
- BO(n²)
- CO(n)
- DO(n log n)
2.简单
什么是记忆化(memoisation)?
- A自动把递归转换为等价的循环,从而不需要调用栈
- B函数返回后释放内存
- C在每行代码旁边写注释
- D存储函数调用的结果,使重复调用能直接从内存中得到答案
3.简单
标准的基于数组的归并排序使用多少额外内存?
- AO(n²)
- BO(n)
- CO(1)
- DO(log n)
4.中等
在一个有序数组中,你从两端各放一个指针向内移动,寻找和为目标值的两个元素。时间复杂度是多少?
- AO(n log n)
- BO(log n)
- CO(n²)
- DO(n)
5.中等
在无权图上进行广度优先搜索(BFS)可以求出:
- A所有图的拓扑序
- B最小生成树
- C从起始节点出发、按边数计的最短路径
- D含负权重边的图中的最短路径
6.中等
快速排序的最坏情况时间复杂度是多少?
- AO(n log n)
- BO(n)
- CO(n²)
- DO(log n)
7.困难
用一个只保留最后两个值的循环计算第 n 个斐波那契数,时间和空间代价各是多少?
- AO(n) 时间和 O(n) 空间
- BO(2ⁿ) 时间和 O(1) 空间
- CO(log n) 时间和 O(n) 空间
- DO(n) 时间和 O(1) 空间
8.困难
为什么在有序数组中任何基于比较的查找在最坏情况下都需要 Ω(log n) 次比较?
- A二分查找是唯一可能的算法,它需要 log₂ n 次比较
- B有 n 种可能结果的决策树,其深度至少为 log₂ n
- C每个元素都必须至少比较一次
- D每次比较都需要对数时间
答案
- 1. A · O(log n)
- 2. D · 存储函数调用的结果,使重复调用能直接从内存中得到答案
- 3. B · O(n)
- 4. D · O(n)
- 5. C · 从起始节点出发、按边数计的最短路径
- 6. C · O(n²)
- 7. D · O(n) 时间和 O(1) 空间
- 8. B · 有 n 种可能结果的决策树,其深度至少为 log₂ n
完整分步解答:请在 examproblems.com 上练习本主题。