2

我认为这可能是关于大 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

4 回答 4

2
这是否简化为 2O(n)、O(2n) 或 O(n)?”

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

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

但是,如果我们试图找到一个下限,这条规则是否仍然适用?

绝对是的。

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


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

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


理解 Θ(N) 等最重要的一点是,这些符号用于研究某事物的缩放程度。一种算法花费的时间是另一种算法的两倍,但没有说明任何一种算法的扩展性如何,因此它们的速度下限可以具有相同的 Ω() 也就不足为奇了。

于 2011-07-14T00:18:29.347 回答
1

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

于 2011-07-14T00:22:39.793 回答
0

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

更新

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

于 2011-07-14T00:12:41.447 回答
0

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

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

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

Big Omega 的定义类似。

于 2011-07-14T00:23:34.553 回答