O(n)的算法如何也可以是O(n ^ 2),O(n ^ 1000000),O(2 ^ n)?

时间:2015-08-31 13:54:36

标签: big-o asymptotic-complexity

这个问题的答案是What is the difference between Θ(n) and O(n)?

指出“基本上当我们说算法是O(n)时,它也是O(n 2 ),O(n 1000000 ),O(2 n ),...但是Θ(n)算法不是Θ(n 2 )。“

我理解Big O代表上限或最坏情况我不明白O(n)也是O(n 2 )而其他情况比O(n)差

也许我有一些根本的误解。请帮助我理解这一点,因为我已经苦苦挣扎了一段时间。

感谢。

4 个答案:

答案 0 :(得分:3)

考虑大哦意味着什么是有帮助的:如果函数是O(n),那么c*n,其中c是某个正数,是上限。如果c*n是一个上限,那么对于整数,c*n^2也是一个上限。还有c*n^3c*n^4c*n^1000

下图显示了函数的增长,函数的上限是函数"右边的#34;它;也就是说,它在较小的n上增长得更快。

enter image description here

答案 1 :(得分:1)

假设算法的运行时间为T(n) = 3n + 6(即1阶的任意多项式)。

T(n) = O(n)确实是3n + 6 < 4n,因为所有n > 5都是T(n) = O(n^2)(使用big-oh表示法的定义)。 3n + 6 < n^2也是如此,因为所有n > 5 T(n) = Θ(n)(再次使用定义)。

O(n)也是如此,因为除了3n + 6 > n的证明之外,所有n > 1的{​​{1}}都是如此。但是,对于任意大3n + 6 > c n^2,您无法证明c n的任何$f = new Field(); $f->setValue(123); $em = $this->getEntityManager(); $em->persist($f); $em->flush(); 。 (证明草图:lim(cn ^ 2 - 3n - 6)&gt; 0为n - >无穷大)。

答案 2 :(得分:0)

  

我理解Big O代表上限或最坏情况我不明白O(n)也是O(n 2 )而其他情况比O(n)差

直观地说,“x”的上限意味着某些东西总是小于或等于x 。如果某些内容小于或等于x,则对于x^2足够大的值,它也会小于或等于x^1000x。因此x^2x^1000也可以是上限。

这就是Big-oh所代表的:上限。

答案 3 :(得分:0)

当我们说f(n)= O(g(n))时,我们仅意味着对于所有足够大的n,存在常数c,使得f(n)<= cg(n)。注意,如果f(n)= O(g(n)),我们总是可以选择大于g(n)的函数h(n),并且由于g(n)最终小于h(n),我们有f (n)&lt; = cg(n)&lt; = ch(n),所以f(n)= O(h(n))。

请注意,O界限并不紧张。 theta界限是O(g(n))和Omega(g(n))的交集,其中Omega给出下限(它类似于O,上限,但是从下面取而代之)。如果f(n)在g(n)以下,并且h(n)大于g(n),那么如果f(n)不是(必然)在h(n)之下。