O(n)和O(1 + n)之间的实际差异?

时间:2014-09-18 01:52:18

标签: time-complexity big-o

不是O(n)对O(1 + n)的改进?

这是我对差异的看法:

O(N):

for i=0 to n do ; print i ;

O(1 + n):

a = 1;
for i=0 to n do ; print i+a ;

......只会减少到O(n)对吗?

如果目标时间复杂度为O(1 + n),但我在O(n)中有一个解, 这是否意味着我做错了什么?

感谢。

3 个答案:

答案 0 :(得分:4)

O(1 + n)和O(n)在数学上是相同的,因为您可以直接从formal definition证明或使用O(a(n)+ b(n))相等的标准规则到O(a(n))和O(b(n))中的较大者。

在实践中,当然,如果你做n + 1件事情(通常,依赖于编译器优化/等)需要的时间比你只做n件事要长。但是大O符号是谈论这些差异的错误工具,因为它明确地抛弃了这样的差异。

答案 1 :(得分:4)

这不是一项改进,因为BigO并未描述算法的确切运行时间,而是增长率。因此,BigO描述了一类函数,而不是单个函数。 O(n^2)并不意味着您输入大小2的算法将在4操作中运行,这意味着如果您将应用程序的运行时间绘制为函数nc*n^2开始,它会从n0开始渐近上界。这很好,因为我们知道每个输入大小的算法会慢多少,但我们并不确切知道它的速度有多快。为什么要使用c?因为正如我所说,我们并不关心确切的数字,而是关注函数的形状 - 当我们乘以一个常数因子时,形状保持不变。

答案 2 :(得分:2)

  

不是O(n)对O(1 + n)的改进?

不,不是。渐渐地,这两个是相同的。实际上,O(n)与O(n + k)相同,其中k是任何常数值。