[英]O(m+n) vs O(m) /O(n)
不同的算法有不同的时间复杂度。 我对这个太好奇了。
O(m+n) 表示线性 function,与 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)
在所有情况下都有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.