问题描述
我听说此代码中正确或最严格的上限是O(N + M)。我的问题是为什么说O(N + N)是错误的。我听说这将是一个松散或错误的上限。如果是这样,我们如何知道O(n)
public void ex(int n,int m)
{
int i - 0;
int j = 0;
while(i < n)
{
i++:
}
while(j < m)
{
j++;
}
}
解决方法
由于我们不知道N是否等于M,并且存在两个循环,因此O(N + M)。
我们不能说O(N + N)或O(M + M),因为N和M可能相差很大。
让我们说while循环的一次迭代需要1秒。 考虑N = 5&M = 10000。
所以,5秒+10000秒= 10005秒。
现在,如果您考虑过O(N + N),则只需10秒钟。
如果您考虑过O(M + M),则大约需要20000秒。
两者差异很大。
因此O(N + M)更好,更准确。
当然,如果N几乎等于M,那么我们可以说O(N + N)再次等于O(N),因为我们删除了常量(在这种情况下为2)。
但是,总的来说,它具有线性时间复杂度。