【问题标题】:Question about big O and big Omega关于大O和大欧米茄的问题
【发布时间】:2011-10-04 22:50:43
【问题描述】:
我认为这可能是关于大 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
【问题讨论】:
标签:
analysis
asymptotic-complexity
big-o
【解决方案1】:
这是否简化为 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 毫秒 + 100*N 毫秒来执行。其速度的下限是 Θ(N),因此是 Ω(N)。
如果算法的执行时间是原来的两倍怎么办?即使执行时间为 600 ms + 200*N ms,其速度的下限仍然是 Θ(N),因此是 Ω(N)。
要理解 Θ(N) 等,最重要的一点是这些符号用于研究某事物的缩放程度。一种算法花费的时间是另一种算法的两倍,但没有说明任何一种算法的扩展性如何,因此它们的速度下限可以具有相同的 Ω() 也就不足为奇了。
【解决方案2】:
它会简化——通常为 O(n),表明解决问题所花费的时间与问题大小成正比。在这种情况下,写 2O(n) 可能更合适,尽管它的含义相同。
【解决方案3】:
我相信根据Big-O的定义:
如果对于某个常数 c 和足够大的 n 值,函数 f(n)
因此,例如,如果可以为 c 选择一些值,使 f(n)
Big Omega 的定义类似。
【解决方案4】:
已经有一段时间了,但我认为你在这两种情况下都是对的。
更新
实际上看起来像Ω(n) + Ω(n) == Ω(n)