这个问题的答案是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)差
也许我有一些根本的误解。请帮助我理解这一点,因为我已经苦苦挣扎了一段时间。
感谢。
答案 0 :(得分:3)
考虑大哦意味着什么是有帮助的:如果函数是O(n),那么c*n
,其中c是某个正数,是上限。如果c*n
是一个上限,那么对于整数,c*n^2
也是一个上限。还有c*n^3
,c*n^4
,c*n^1000
等
下图显示了函数的增长,函数的上限是函数"右边的#34;它;也就是说,它在较小的n
上增长得更快。
答案 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^1000
和x
。因此x^2
和x^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)之下。