Big-O 表示法O(n)
和 Little-O 表示法o(n)
之间有什么区别?
答案 0 :(得分:390)
f∈O(g)表示,基本上
对于至少一个选择的常量 k > 0,你可以找到常数 a ,使得不等式0< = f(x)< = k g(x)适用于所有x>一个。
请注意,O(g)是此条件所适用的所有函数的集合。
f∈o(g)说,基本上是
对于每个选择的常量 k > 0,你可以找到常数 a ,使得不等式0< = f(x)< k g(x)适用于所有x>一个。
再次注意o(g)是一组。
在Big-O中,只需要找到一个特定的乘数 k ,其中不等式超出某些最小值 x 。
在Little-o中,必须存在最小 x ,在此之后,不管你做出多小的 k ,不平等都会成立,只要它不是否定或为零。
这两个都描述了上限,虽然有点违反直觉,Little-o是更强的说法。如果f∈o(g),则f和g的增长率之间存在比f∈O(g)更大的差距。
视差的一个例子是:f∈O(f)为真,但f∈o(f)为假。因此,Big-O可以被解读为“f∈O(g)意味着f的渐近增长不比g更快”,而“f∈o(g)意味着f的渐近增长严格地慢于g”。这就像<=
与<
。
更具体地,如果g(x)的值是f(x)的值的常数倍,则f∈O(g)为真。这就是使用big-O表示法时可以删除常量的原因。
然而,对于f∈o(g)为真,则g必须在其公式中包含x的更高幂,因此f(x)和g(x)之间的相对间隔当x变大时,实际上必须变大。
使用纯数学示例(而不是参考算法):
对于Big-O,以下情况属实,但如果您使用little-o:
则不然对于little-o,以下情况属实:
注意,如果f∈o(g),这意味着f∈O(g)。例如x²∈(x³)所以x²∈O(x³)也是如此,(再次,将O视为<=
,将o视为<
)
答案 1 :(得分:175)
Big-O对于≤
至<
为小o。 Big-O是包含上限,而little-o是严格的上限。
例如,函数f(n) = 3n
是:
O(n²)
,o(n²)
和O(n)
O(lg n)
,o(lg n)
或o(n)
类似地,数字1
是:
≤ 2
,< 2
和≤ 1
≤ 0
,< 0
或< 1
这是一张表格,显示了一般概念:
(注意:该表是一个很好的指南,但其限制定义应该是superior limit而不是正常限制。例如,3 + (n mod 2)
永远在3到4之间振荡。它在O(1)
尽管没有正常限制,因为它仍有lim sup
:4。)
我建议记住Big-O符号如何转换为渐近比较。比较更容易记住,但不太灵活,因为你不能说n O(1) = P。
答案 2 :(得分:40)
我发现当我无法在概念上掌握某些东西时,想到为什么要使用X 有助于理解X.(不是说你没有尝试过,我只是设置舞台。)
[你知道的]对算法进行分类的常用方法是运行时,通过引用算法的大复杂性,你可以很好地估计哪一个是“更好” - 无论哪个有“最小的“功能在O!即使在现实世界中,O(N)比O(N²)“更好”,除非像超大质量常数等傻事。[/你知道的东西]
假设有一些在O(N)中运行的算法。很好,对吧?但是,让我们说你(你很聪明的人,你)想出一个在O( N / loglogloglogN )中运行的算法。好极了!它更快!但是当你撰写论文时,你会一遍又一遍地写下傻傻的写作。所以你写了一次,你可以说“在本文中,我已经证明算法X,以前可以在时间O(N)中计算,实际上可以在o(n)中计算。”
因此,每个人都知道你的算法更快 - 有多少不清楚,但他们知道它更快。理论上。 :)
答案 3 :(得分:2)
渐近符号是您可以理解的:缩小时函数如何比较?(测试这一点的一种好方法就是使用Desmos之类的工具并玩鼠标滚轮)。特别是:
f(n) ∈ o(n)
的意思是:在某一点上,您缩小得越多,f(n)
将由n
主导更多g(n)
。g(n) ∈ Θ(n)
的意思是:在某些时候,缩小不会改变n
与h(n) ∈ O(n)
的比较方式(如果我们删除轴上的刻度,您将无法知道缩放级别)。 最后h
表示函数n
可以属于这两种类别。当n
增加时,它看起来可能很像n
,也可能越来越小{{1}。基本上,f(n)
和g(n)
也在O(n)
中。
在计算机科学中,人们通常会证明给定算法同时接受上限O
和下限?
。当两个边界都满足时,这意味着我们找到了一种渐近最优算法来解决该特定问题。
例如,如果我们证明算法的复杂度在O(n)
和?(n)
中,则意味着算法的复杂度在Θ(n)
中。这就是Θ
的定义,它或多或少地转化为“渐近相等”。这也意味着没有算法可以解决o(n)
中的给定问题。再说一次,粗略地说“这个问题不能在少于n
个步骤中解决”。
O(n)
的上限只是意味着即使在最坏的情况下,该算法也将终止于最多n
个步骤(忽略所有常数因子,包括乘法和加法)。 ?(n)
的下限反过来意味着我们建立了一些示例,这些示例无法用少于n
的步骤解决该算法所解决的问题(再次忽略乘法常数和加性常数)。步骤数最多为n
,至少为n
,因此此问题的复杂度为“恰好为n
”。每次我们只是简短地写Θ(n)
时,都不必说“忽略常数乘/加因子”。
答案 4 :(得分:0)
大 O 表示法有一个称为小 O 表示法的伴侣。大 O 表示法表示一个函数渐近 no more than
另一个。要说一个函数渐近 less than
另一个函数,我们使用 small-o 表示法。 big-O 和 small-o 符号之间的区别类似于 <=(小于等于)和 <(小于)之间的区别。