1.简单
在有序数组上进行二分查找(binary search)的时间复杂度是多少?
- AO(n log n)
- BO(1)
- CO(log n)
- DO(n)
2.简单
什么是递归?
- A在更小的输入上调用自身的函数
- B永远不会结束的循环
- C一种数据结构
- D一种排序方法
3.简单
算法的最坏情况运行时间描述的是什么?
- A在所有规模为 n 的输入上所需的最长时间
- B在规模为 n 的随机输入上所需的期望时间
- C在最小输入上所需的时间
- D在慢速计算机上所需的时间
4.中等
朴素递归斐波那契(fib(n) = fib(n−1) + fib(n−2))的时间复杂度是:
- A线性
- B指数级
- C常数
- D对数级
5.中等
为什么许多库排序函数在子数组很小时会改用插入排序?
- A在大规模输入上,插入排序比任何其他排序算法使用的内存都少
- B插入排序开销小,在小规模或几乎有序的输入上很快
- C插入排序在最坏情况下是 O(n log n)
- D递归算法无法处理少于 10 个元素的数组
6.中等
Prim 算法如何构建最小生成树?
- A把所有边按权重排序,逐条加入,除非会在森林中形成环
- B从一个起始顶点开始扩展一棵树,每次加入离开该树的最便宜的边
- C运行广度优先搜索并保留 BFS 树
- D不断删除最贵的边,直到没有环为止
7.困难
Bellman–Ford 算法如何检测从源点可达的负权环?
- A在 V − 1 轮之后,检查是否还有边可以被松弛
- B用深度优先搜索统计环的数量
- C检查是否有边的权重为负
- D它运行两次 Dijkstra 算法,并比较两次的距离结果
8.困难
Strassen 算法在矩阵乘法中对半尺寸的分块只做 7 次而不是 8 次递归乘法。它的运行时间是多少?
- AΘ(n² log n)
- BΘ(nlog₂ 7),约为 n2.81
- CΘ(n2)
- DΘ(n³)
答案
- 1. C · O(log n)
- 2. A · 在更小的输入上调用自身的函数
- 3. A · 在所有规模为 n 的输入上所需的最长时间
- 4. B · 指数级
- 5. B · 插入排序开销小,在小规模或几乎有序的输入上很快
- 6. B · 从一个起始顶点开始扩展一棵树,每次加入离开该树的最便宜的边
- 7. A · 在 V − 1 轮之后,检查是否还有边可以被松弛
- 8. B · Θ(nlog₂ 7),约为 n2.81
完整分步解答:请在 examproblems.com 上练习本主题。