n 是图的顶点个数,m 是图的边的个数,比较时间复杂度
1.
假设 n 是图的顶点个数,m 是图的边的个数。为求解某一问题,有下面四种不同时间复杂度的算法。对于 m = Θ(n) 的稀疏图而言,下面的四个选项,哪一项的渐近时间复杂度最小?
A. O(m√log n · log log n)
B. O(n² + m)
C. O(n² / log m + m log n)
D. O(m + n log n)
2. 把“稀疏图”条件翻译成数学式
题目给出 m = Θ(n),即
m ≤ c·n ,其中 c 为某个正常数。
于是所有 m 都可以直接用 n 来替换,不会影响渐近阶。
3. 把每个选项里的 m 全部替换成 n
选项 | 原始表达式 | 代入 m = Θ(n) 后 |
---|---|---|
A | O(m√log n · log log n) | O(n√log n · log log n) |
B | O(n² + m) | O(n²) |
C | O(n² / log m + m log n) | O(n² / log n + n log n) |
D | O(m + n log n) | O(n log n) |
4. 比较四个结果
- A:n√log n · log log n → 比 n·poly(log n) 略大,但远小于 n²。
- B:n²
- C:两项取大者
- n² / log n
- n log n
在 n→∞ 时,n² / log n 支配 → Θ(n² / log n)
- D:n log n
把四条曲线按增长速度排序:
n log n < n√log n log log n < n² / log n < n²
5. 结论
对于稀疏图 m = Θ(n),选项 D 的渐近时间复杂度 O(n log n) 最小。
6. 一句话总结
在稀疏图 (m = Θ(n)) 的条件下,四个算法中 D 选项 O(m + n log n) 的渐近时间复杂度最小。