O(m+n) 对比 O(m) /O(n)
O(m+n) vs O(m) /O(n)
不同的算法有不同的时间复杂度。这个我一直很好奇。
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).
这一切让我很困惑,请给我解释一下区别。
m
和 n
可能有非常不同的值,这就是为什么 O(m+n)
不同于 O(m)
或 O(n)
(但类似于 O(max(m,n))
)
简单示例:
图的广度优先搜索具有复杂性 O(V+E)
,其中 V
是顶点数,E
是边数。
对于密集图 E
可能和 V*(V-1)/2
一样大,所以 E~V^2
我们不能说复杂度是 O(V)
- 在这种情况下它是 O(V^2)
.
另一方面 - 非常稀疏的图形,其中 E
与 V
相比非常小。在这种情况下我们不能说 O(E)
- 在这种情况下它是 O(V)
.
并且O(E+V)
在所有情况下都有效。
不同的算法有不同的时间复杂度。这个我一直很好奇。
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).
这一切让我很困惑,请给我解释一下区别。
m
和 n
可能有非常不同的值,这就是为什么 O(m+n)
不同于 O(m)
或 O(n)
(但类似于 O(max(m,n))
)
简单示例:
图的广度优先搜索具有复杂性 O(V+E)
,其中 V
是顶点数,E
是边数。
对于密集图 E
可能和 V*(V-1)/2
一样大,所以 E~V^2
我们不能说复杂度是 O(V)
- 在这种情况下它是 O(V^2)
.
另一方面 - 非常稀疏的图形,其中 E
与 V
相比非常小。在这种情况下我们不能说 O(E)
- 在这种情况下它是 O(V)
.
并且O(E+V)
在所有情况下都有效。