大O对小omega
Big O vs Small omega
为什么ω(n)小于O(n)?
我知道什么是小omega(比如n = ω(log n)
),但是我不明白为什么ω(n)比O(n)小。
算法复杂度有数学定义。
如果f
和g
是两个函数,f = O(g)
如果可以找到两个常量c
(>0)和n
比如f(x) < c * g(x)
每 x > n
.
对于Ω
,则相反:可以找到f(x) > c * g(x)
.
等常量
f = Θ(g)
如果有三个常量c
、d
和n
比如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),也就是上图的出处。它还包含定义的紧凑表示,使它们易于记忆:
为什么ω(n)小于O(n)?
我知道什么是小omega(比如n = ω(log n)
),但是我不明白为什么ω(n)比O(n)小。
算法复杂度有数学定义。
如果f
和g
是两个函数,f = O(g)
如果可以找到两个常量c
(>0)和n
比如f(x) < c * g(x)
每 x > n
.
对于Ω
,则相反:可以找到f(x) > c * g(x)
.
f = Θ(g)
如果有三个常量c
、d
和n
比如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),也就是上图的出处。它还包含定义的紧凑表示,使它们易于记忆: