【发布时间】:2020-06-25 17:52:36
【问题描述】:
我通常使用一个名为LeetCode 的网站来练习问题。在一个问题的讨论部分的很多答案中,我注意到像 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]);
}
这变成了 O(N),即使它迭代了 nums 两次。为什么不是 O(2N) 或 O(N + N)?
【问题讨论】:
-
Big O 通常只指定那些对计算影响最大的参数。所以 N + N 仍然是线性关系。对于多项式,它通常是最大指数的阶。
-
Big O 是对算法的分析,而不是实现。并且通常实现差异可能是一个常数时间因素,比另一个更快或更慢,即使对于相同的算法也是如此。
标签: time-complexity big-o