Time complexity 为什么像O(N+;N)这样的时间复杂性等于O(N)?

Time complexity 为什么像O(N+;N)这样的时间复杂性等于O(N)?,time-complexity,big-o,Time Complexity,Big O,我通常使用一个叫做问题实践的网站。在一个问题的讨论部分的许多答案中,我注意到像O(N+N)或O(2N)这样的运行时间被更改为O(N)。例如: int[] nums = {1, 2, 3, 4, 5}; for(int i = 0; i < nums.length; i ++) { System.out.println(nums[i]); } for(int i = 0; i < nums.length; i ++) { System.out.println(num

我通常使用一个叫做问题实践的网站。在一个问题的讨论部分的许多答案中,我注意到像O(N+N)或O(2N)这样的运行时间被更改为O(N)。例如:

int[] nums = {1, 2, 3, 4, 5};

for(int i = 0; i < nums.length; i ++) {
    System.out.println(nums[i]);
}

for(int i = 0; i < nums.length; i ++) {
    System.out.println(nums[i]);
}
int[]nums={1,2,3,4,5};
对于(int i=0;i

这变成了O(N),即使它在
nums中迭代了两次。为什么不是O(2N)或O(N+N)?

在时间复杂度方面,常系数不起作用。这是因为算法运行的实际时间也取决于机器的物理约束。这意味着,如果您在一台速度是另一台机器两倍的机器上运行代码,在所有其他条件相同的情况下,在相同的输入下,它将运行大约一半的时间

但是,当你比较两种时间复杂度不同的算法时,情况就不一样了。例如,当您比较O(N^2)算法和O(N)算法的运行时间时,O(N^2)的运行时间随着输入大小的增长而增长得如此之快,以至于无论您选择的常数系数有多大,O(N)算法都赶不上它


假设常数系数为1000,而不是2,那么对于输入大小为(N>1000)的情况,O(N^2)算法的运行时间成(N*N)的比例,而N将与输入大小成比例增长,而O(N)算法的运行时间只与(1000*N)成比例
O(n+n)
的时间复杂度降低到
O(2n)
。现在2是一个常数。因此时间复杂度基本上取决于
n

因此,
O(2n)
的时间复杂度等于O(n)。
同样,如果有这样的
O(2n+3)
的话,它仍然是
O(n)
,因为时间基本上取决于
n
的大小

现在假设有一个代码是
O(n^2+n)
,它将是
O(n^2)
,因为当
n
的值增加时,
n
的效果将比
n^2
的效果变得不那么显著

大O通常只指定那些对计算影响最大的参数。所以N+N仍然是一个线性关系。对于多项式,它通常是最大指数的阶数。大O是对算法的分析,而不是实现。通常,实现差异可能是一个恒定的时间因素,比另一个更快或更慢,即使对于相同的算法也是如此。如果同一答案适用于两个问题,那么你应该投票将其中一个问题作为重复答案关闭,而不是将答案发布两次。