1.简单
在 n 个数的无序数组中找出最大值的时间复杂度是多少?
- AO(n)
- BO(log n)
- CO(n log n)
- DO(1)
2.简单
在以邻接表存储的图上进行深度优先搜索,时间复杂度是多少?
- AO(V²)
- BO(E log V)
- CO(V × E)
- DO(V + E)
3.简单
什么是蛮力算法(brute-force algorithm)?
- A总是使用递归的算法
- B尝试所有可能的候选解的算法
- C在多个处理器上运行的算法
- D随机猜测答案的算法
4.中等
你对一个 n 个元素的数组排序一次,然后用二分查找回答 k 次成员查询。总代价是多少?
- AO(nk)
- BO(k n log n)
- CO(n + k)
- DO(n log n + k log n)
5.中等
Prim 算法如何构建最小生成树?
- A运行广度优先搜索并保留 BFS 树
- B把所有边按权重排序,逐条加入,除非会在森林中形成环
- C从一个起始顶点开始扩展一棵树,每次加入离开该树的最便宜的边
- D不断删除最贵的边,直到没有环为止
6.中等
一个问题具有最优子结构是什么意思?
- A该问题可以在常数时间内求解
- B每个子问题的规模都相同
- C最优解可以由其子问题的最优解构造出来
- D该问题恰好有一个最优解,所有子问题共享这个解
7.困难
旅行商问题如何分类?
- A它是不可判定的
- B它属于 P,因为 Dijkstra 算法通过把每个城市访问一次来求解它
- C判定版本是 NP 完全的,优化版本是 NP 难的
- D判定版本属于 P,但优化版本是 NP 完全的
8.困难
下面代码的时间复杂度是多少:for i = 1 to n: for (j = i; j ≤ n; j = j + i) 执行 O(1) 的工作?
- AO(n √n)
- BO(n²)
- CO(n)
- DO(n log n)
答案
- 1. A · O(n)
- 2. D · O(V + E)
- 3. B · 尝试所有可能的候选解的算法
- 4. D · O(n log n + k log n)
- 5. C · 从一个起始顶点开始扩展一棵树,每次加入离开该树的最便宜的边
- 6. C · 最优解可以由其子问题的最优解构造出来
- 7. C · 判定版本是 NP 完全的,优化版本是 NP 难的
- 8. D · O(n log n)
完整分步解答:请在 examproblems.com 上练习本主题。