大O对小omega

Big O vs Small omega

为什么ω(n)小于O(n)?

我知道什么是小omega(比如n = ω(log n)),但是我不明白为什么ω(n)比O(n)小。

算法复杂度有数学定义。

如果fg是两个函数,f = O(g)如果可以找到两个常量c(>0)和n比如f(x) < c * g(x)x > n.

对于Ω,则相反:可以找到f(x) > c * g(x).

等常量

f = Θ(g)如果有三个常量cdn比如c * g(x) < f(x) < d * g(x)对每个x > n.

那么,O表示你的函数占优,Θ你的函数等价于另一个函数,Ω你的函数有下限。 因此,当您使用 Θ 时,您的近似值更适合您 "wrapping" 两条边之间的函数;而 O 仅设置最大值。 Ω(最低)同上。

总结一下:

  • O(n):在最坏的情况下,你的算法的复杂度为n
  • Ω(n):在最好的情况下,您的算法的复杂度为 n
  • Θ(n):在任何情况下,你的算法的复杂度都是n

综上所述,您的假设是错误的:它是 Θ,而不是 Ω。如您所知,n > log(n) when n 具有巨大的价值。那么,根据前面的定义,逻辑上说n = Θ(log(n))

Big Oh 'O' 是上限,而 little omega 'ω' 是 Tight 下限。

O(g(n)) = { f(n): 存在正常数 c 和 n0 使得 0 ≤ f(n) ≤ cg(n) 对于所有 n ≥ n0}

ω(g(n)) = { f(n):对于所有常数 c > 0,存在常数 n0 使得对于所有 n ≥ n0 0 ≤ cg(n) < f(n)} . 另外:无穷大 = lim f(n)/g(n)

n ∈ O(n) 且 n ∉ ω(n)。 或者: n ∈ ω(log(n)) 且 n ∉ O(log(n))

我不能评论,所以首先让我说 n ≠ Θ(log(n))。 Big Theta 意味着对于某些正常数 c1、c2 和 k,对于所有大于 k 的 n 值,c1*log(n) ≤ n ≤ c2*log(n),这是不正确的。当 n 接近无穷大时,无论 log(n) 的系数如何,它总是大于 log(n)。

jesse34212 说 n = ω(log(n)) 是正确的。 n = ω(log(n)) 表示 n ≠ Θ(log(n)) AND n = Ω(log(n))。换句话说,little or small omega 是一个宽松的下界,而 big omega 可以是宽松的也可以是紧的。

大 O 符号表示松散或紧密的上限。例如,12n = O(n)(紧上限,因为它尽可能精确)和 12n = O(n^2)(松上限,因为您可以更精确)。

12n ≠ ω(n) 因为 n 是 12n 上的紧界,而 ω 仅适用于松界。这就是为什么 12n = ω(log(n)),甚至 12n = ω(1)。我继续使用 12n,但常数的值不影响相等性。

从技术上讲,O(n) 是所有渐近增长等于或慢于 n 的函数的集合,属于字符是最合适的,但大多数人使用“= O(n)”(而不是“ ∈ O(n)") 作为一种非正式的书写方式。

ω(n) 和 O(n) 位于频谱的相反侧,如下图所示。

正式地,

有关详细信息,请参阅 CSc 345 — 离散结构分析 (McCann),也就是上图的出处。它还包含定义的紧凑表示,使它们易于记忆: