1.简单
在 n 个数的无序数组中找出最大值的时间复杂度是多少?
- AO(n)
- BO(log n)
- CO(n log n)
- DO(1)
2.简单
什么是记忆化(memoisation)?
- A存储函数调用的结果,使重复调用能直接从内存中得到答案
- B函数返回后释放内存
- C自动把递归转换为等价的循环,从而不需要调用栈
- D在每行代码旁边写注释
3.简单
算法的最坏情况运行时间描述的是什么?
- A在最小输入上所需的时间
- B在所有规模为 n 的输入上所需的最长时间
- C在慢速计算机上所需的时间
- D在规模为 n 的随机输入上所需的期望时间
4.中等
Floyd–Warshall 算法计算什么?速度如何?
- A以 O(V²) 计算拓扑序
- B以 O(V³) 计算所有顶点对之间的最短路径
- C以 O(V + E) 计算从一个源顶点到所有其他顶点的最短路径
- D以 O(E log V) 计算最小生成树
5.中等
在一个有序数组中,你从两端各放一个指针向内移动,寻找和为目标值的两个元素。时间复杂度是多少?
- AO(n log n)
- BO(n²)
- CO(n)
- DO(log n)
6.中等
对 n 个 k 进制、d 位的整数进行 LSD 基数排序(radix sort),运行时间是多少?
- AO(d(n + k))
- BO(n log n)
- CO(dn log k)
- DO(n²)
7.困难
取一个极大匹配中每条边的两个端点,可以得到一个顶点覆盖。这个覆盖有多好?
- A与最优解相比质量未知
- B至多是最小顶点覆盖大小的两倍
- C至多是最小值的 log n 倍
- D总是一个最小顶点覆盖
8.困难
为什么哈希表的平均查找时间是 O(1),而最坏情况是 O(n)?
- A许多键可能冲突(collision)到同一个桶中
- B数组的访问时间是 O(n)
- C键必须先排序
- D哈希函数运行很慢
答案
- 1. A · O(n)
- 2. A · 存储函数调用的结果,使重复调用能直接从内存中得到答案
- 3. B · 在所有规模为 n 的输入上所需的最长时间
- 4. B · 以 O(V³) 计算所有顶点对之间的最短路径
- 5. C · O(n)
- 6. A · O(d(n + k))
- 7. B · 至多是最小顶点覆盖大小的两倍
- 8. A · 许多键可能冲突(collision)到同一个桶中
完整分步解答:请在 examproblems.com 上练习本主题。