关于大O和大欧米茄的问题

时间:2011-07-14 00:09:40

标签: analysis asymptotic-complexity big-o

我认为这可能是关于big-O符号的初学者问题。比方说,我有一个算法可以递归地分解整个列表(O(n)),然后将它重新组合在一起(O(n))。我认为这意味着效率是O(n)+ O(n)。这是否简化为2O(n),O(2n)或O(n)?根据我对这种符号的了解,它将是O(2n)并且使用渐近符号的规则,你可以放弃2,给出O(n)的效率。

但是,如果我们试图找到下限,这个规则是否仍适用?如果Ω(n)+Ω(n)=Ω(2n),你还可以降2吗?我想不会,因为你实际上会降低下限(因为n <2n)。

4 个答案:

答案 0 :(得分:2)

这是否简化为2O(n),O(2n)或O(n)?“

以上所有,但前两个过于复杂。 O(n)将是规范符号。

2 * N与N成正比,因此如果对于足够大的N(O(2 * N)),最大成本不超过2 * N,则最大成本也不会超过N对于足够大的N(O(N))。

但是,如果我们试图找到下限,那么此规则是否仍适用?

绝对是肯定的。

2 * N与N成正比,因此如果对于足够大的N(Ω(2 * N)),最小成本不小于2 * N,则最小成本也不小于N的成比例对于足够大的N(Ω(N))。


例如,假设您的算法需要300 ms + 100 * N ms才能执行。其速度的下限是Θ(N),因此是Ω(N)。

如果算法要执行两倍的时间怎么办?即使执行时需要600 ms + 200 * N ms,其速度的下限仍为Θ(N),因此为Ω(N)。


要理解Θ(N)等最重要的事情是这些符号用于研究比例的效果。那个算法花费的时间是另一个算法的两倍,并没有说出任何一个算法有多好,所以对于它们的速度的下限它们可以具有相同的Ω()并不奇怪。

答案 1 :(得分:1)

它会简化 - 通常为O(n),表示解决问题所花费的时间与问题大小成正比。在这种情况下,写2O(n)可能更合适,尽管它意味着相同的事情。

答案 2 :(得分:0)

已经有一段时间了,但我认为你在两种情况下都是正确的。

<强>更新

实际上看起来像Ω(n)+Ω(n)==Ω(n)

答案 3 :(得分:0)

我相信根据Big-O的定义:

如果对于某些常数c和n的足够大的值,函数f(n)是&lt; = cg(n),则可以说f(n)= O(g(n))。在您的示例中,g(n)= n。

因此,例如,如果可以为c选择一些值,使f(n)<= cn得到足够大的n,则可以说f(n)= O(n)。

Big Omega的定义相似。