为什么ω(n)小于O(n)?
我知道什么是小欧米茄(例如,n = ω(log n)
),但我不明白为什么ω(n)小于O(n)。
答案 0 :(得分:3)
大哦'O'是上限,小欧米茄'ω'是紧下限。
O(g(n))= {f(n):存在正常数c和n0,使得0≤f(n)≤cg(n)对于所有n≥n0}
ω(g(n))= {f(n):对于所有常数c> 0,存在常数n0,使得0≤cg(n)<0。所有n≥n0}的f(n)。 另外:无穷大= lim f(n)/ g(n)
n∈O(n)和n∉ω(n)。 或者: n∈ω(log(n))和n∉O(log(n))
答案 1 :(得分:0)
算法复杂度具有数学定义。
如果f
和g
是两个函数,f = O(g)
如果您可以找到两个常量c
(&gt; 0)和n
,例如{{}每个f(x) < c * g(x)
都有1}}。
对于x > n
,情况正好相反:您可以找到常量,例如Ω
。
f(x) > c * g(x)
如果每个f = Θ(g)
有三个常量c
,d
和n
,例如c * g(x) < f(x) < d * g(x)
。
然后,x > n
表示你的函数占主导地位,O
你的函数等同于另一个函数,Θ
你的函数有一个下限。
因此,当您使用Ω
时,您的近似值更适合您将函数“包裹”在两条边之间;而Θ
仅设定最大值。同上O
(最低)。
总结一下:
Ω
:在最糟糕的情况下,您的算法的复杂度为O(n)
n
:在最好的情况下,您的算法的复杂度为Ω(n)
n
:在任何情况下,您的算法都具有Θ(n)
总而言之,您的假设是错误的:它是n
,而不是Θ
。正如您所知,Ω
n > log(n)
具有巨大价值。然后,根据之前的定义,说出n
是合乎逻辑的。
答案 2 :(得分:0)
我无法发表评论,所以首先让我说n≠Θ(log(n))。 Big Theta意味着对于一些正常数c1,c2和k,对于n大于k的所有值,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))。换句话说,小的或小的欧米茄是松散的下限,而大欧米茄可能松散或紧张。
Big 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)“)作为一种非正式的写作方式。