O(n)和O(1 + n)之间的实际区别?

O(n)不是O(1 + 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)中有一个解决方案,这是否意味着我做错了什么?

谢谢。


O(1 + n)和O(n)在数学上是相同的,因为你可以直接从形式定义或使用O(a(n)+ b(n))等于O a(n))和O(b(n))。

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


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


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

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

链接地址: http://www.djcxy.com/p/39921.html

上一篇: Practical difference between O(n) and O(1 + n)?

下一篇: O time complexity for this recursive Fibonacci?