O(m+n) vs O(m) /O(n)

时间:2020-12-18 18:49:04

标签: algorithm big-o

不同的算法有不同的时间复杂度。我对这个太好奇了。

O(m+n) 代表一个线性函数,类似于 O(m) 或 O(n),它们也代表线性函数。 O(m+n) 与 O(m) 或 O(n) 有何不同?它们都代表线性时间。在 O(n)/O(m) 的情况下,我们忽略其他项,只取最高次。即使在以下等式的情况下:T(n)=n+1+n+1;我们使 T(n)=2n 并因此使其成为 O(n)。无论如何,我们没有考虑等式的其他部分。

我确实阅读了一些关于此的文章,但我不太明白这些是什么意思,因为根据这些文章(或者我可能误解了),m 和 n 代表两个变量 i 和 j,但如果是这样,那么为什么我们把双指针算法写成 O(n^2)。

这一切让我很困惑,请向我解释其中的区别。

1 个答案:

答案 0 :(得分:0)

mn 可能具有非常不同的值,这就是为什么 O(m+n) 不同于 O(m)O(n)(但类似于 {{1} })

简单例子:
图上的广度优先搜索的复杂度为 O(max(m,n)),其中 O(V+E) 是顶点数,V 是边数。

对于密集图 E 可能和 E 一样大,所以 V*(V-1)/2 并且我们不能说复杂度是 E~V^2 - 在这种情况下它是 {{1} }.

另一方面 - 非常稀疏的图,其中 O(V)O(V^2) 相比非常小。在这种情况下,我们不能说 E - 在这种情况下是 V

并且 O(E) 在所有情况下都有效。