大Ө符号究竟代表什么?

时间:2012-04-29 22:56:20

标签: algorithm computer-science big-o notation big-theta

我对大O,大欧米茄和大Theta符号之间的差异感到困惑。

我知道大O是上界,大欧米茄是下界,但大Ө(theta)到底代表什么?

我读过它意味着 紧束缚 ,但这意味着什么?

6 个答案:

答案 0 :(得分:306)

首先让我们了解大O,大Theta和大欧米茄是什么。它们都是sets个函数。

大O正在给予asymptotic bound上限,而大欧米茄正在给出下限。 Big Theta给出了两者。

Ө(f(n))的所有内容也是O(f(n)),但不是相反。 如果T(n)位于Ө(f(n))O(f(n)),则Omega(f(n))被称为Ө(f(n))
在术语集中, O(f(n))Omega(f(n))的{​​{3}}和O(n*log(n))

例如,合并排序最差情况是Omega(n*log(n))Ө(n*log(n)) - 因此也是O(n^2),但它也是n^2,因为Ө(n^2)渐渐地“比它更大”。但是,它 Omega(n^2),因为算法不是O(n)

更深入的数学解释

T(n)是渐近上界。如果O(f(n))n0,则表示从某个C开始,T(n) <= C * f(n)为常量C2。另一方面,大欧米茄说T(n) >= C2 * f(n))就是O(f(n))

不要混淆!

不要与最差,最佳和平均病例分析混淆:所有三种(Omega,O,Theta)符号 与算法的最佳,最差和平均病例分析相关。这些中的每一个都可以应用于每个分析。

我们通常用它来分析算法的复杂性(就像上面的合并排序示例一样)。当我们说“算法A是O(f(n))”时,我们真正的意思是“最差 1 案例分析下的算法复杂度是f(n)” - 意思是 - 它缩放“类似“(或者正式,不是更糟)函数f(n) = 2*n

为什么我们关心算法的渐近界?

嗯,这有很多原因,但我相信其中最重要的是:

  1. 确定精确复杂度函数要困难得多,因此我们在big-O / big-Theta符号上“妥协”,理论上足够信息。
  2. 操作的确切数量也取决于平台。例如,如果我们有一个16个数字的向量(列表)。需要多少操作?答案是:这取决于。一些CPU允许向量添加,而其他CPU则不允许,因此答案在不同的实现和不同的机器之间变化,这是不期望的属性。然而,大O符号在机器和实现之间更加恒定。
  3. 要演示此问题,请查看以下图表: enter image description here

    很明显f(n) = nf(n)=logn“更差”。但差异并不像其他功能那么激烈。我们可以看到f(n) = n^2很快就会比其他函数低得多,f(n)=n, f(n)=2*n很快就会比其他函数高得多。
    因此 - 由于上述原因,我们“忽略”常数因子(图中的2 *),并且只采用big-O表示法。

    在上面的示例中,O(n)将同时位于Omega(n)Theta(n)中,因此也会位于f(n)=logn中。
    另一方面 - O(n)将在f(n)=n中(它比Omega(n)“更好”),但不会在Theta(n)中 - 因此也不在f(n)=n^2
    对称地,Omega(n)将在O(n)中,但不在Theta(n)中,因此 - 也不是{{1}}。


    1 通常,虽然并非总是如此。当分析类(最差,平均和最佳)缺失时,我们的意思是最坏的情况。

答案 1 :(得分:85)

这意味着该算法在给定函数中都是big-O和big-Omega。

例如,如果它是Ө(n),那么有一些常量k,这样你的函数(运行时,无论如何)大于n*k足够大n {1}}和其他一些常量K,使得您的函数小于n*K,足够大n

换句话说,对于足够大的n,它夹在两个线性函数之间:

对于k < Kn足够大,n*k < f(n) < n*K

答案 2 :(得分:13)

Theta(n):函数f(n)属于Theta(g(n)),如果存在正常量c1c2,则f(n) 1}}可以夹在c1(g(n))c2(g(n))之间。即它既给出上限也有下限。

  

Theta(g(n))= {f(n):存在正常数c1,c2和n1,使得                   0 <= c1(g(n))&lt; = f(n)&lt; = c2(g(n))所有n> = n1}

当我们说f(n)=c2(g(n))f(n)=c1(g(n))时,它代表渐近紧束缚。

O(n):它只给出上限(可能或可能不紧)

  

O(g(n))= {f(n):存在正常数c和n1,使得对于所有n&gt; = n1} 0 <= f(n)<= cg(n)

ex :绑定的2*(n^2) = O(n^2)渐近紧,而绑定的2*n = O(n^2)并非渐近紧。

o(n):它只给出上限(绝不是紧束缚)

  

O(n)&amp;之间的显着差异o(n)是f(n)小于cg(n)   对于所有n> = n1但不等于O(n)。

2*n = o(n^2),但2*(n^2) != o(n^2)

答案 3 :(得分:1)

Big Theta表示法:

没什么可惹的哥们!

如果我们有一个正值函数f(n)并且g(n)接受一个正值参数n,则ϴ(g(n))定义为{f(n):存在常数c1,c2和n1全部n> = n1}

其中c1 g(n)<= f(n)<= c2 g(n)

让我们举个例子:

让f(n)=

g(n)=

c1 = 5和c2 = 8且n1 = 1

在所有表示法中,ϴ表示法提供了函数增长率的最佳直觉,因为它给了我们与big-oh和big-omega不同的紧密界限 分别给出上限和下限。

ϴ告诉我们g(n)与f(n)接近,g(n)的增长率尽可能接近f(n)的增长率。

see the image to get a better intuition

答案 4 :(得分:1)

我希望您可能会在经典的CLRS(第66页)中找到以下内容: enter image description here

答案 5 :(得分:0)

首先是理论

  1. 大O =上限O(n)

  2. Theta =阶函数-theta(n)

  3. Omega = Q表示法(下限)Q(n)

为什么人们如此困惑?

在许多博客和书籍中,如何强调此声明就像

“这是大O(n ^ 3)”等。

人们常常喜欢天气

O(n)== theta(n)== Q(n)

但是需要牢记的是它们只是具有O,Theta和Omega名称的数学函数

所以它们具有相同的多项式通式

让我们

f(n)= 2n4 + 100n2 + 10n + 50那么,

g(n)= n4,所以g(n)是将函数作为输入并以更大的幂返回变量的函数,

  

以下所有说明的f(n)和g(n)相同

大O-功能(提供上限)

大O(n4)= 3n4,因为3n4> 2n4

3n4是Big O(n4)的值,就像f(x)= 3x

n4 在这里扮演 x 的角色,

用x'so代替n4,大O(x')= 2x',现在我们俩都很高兴通用概念是

所以0≤f(n)≤ O(x')

O(x')= cg(n)= 3n4

放入值

0≤2n4 + 100n2 + 10n + 50≤3n4

3n4是我们的上限

Theta(n)提供下界

Theta(n4)= cg(n)= 2n4,因为2n4≤我们的示例f(n)

2n4是Theta(n4)的值

所以,0≤cg(n)≤f(n)

0≤2n4≤2n4 + 100n2 + 10n + 50

2n4是我们的下界

Ωn-阶函数

计算得出的结果是天气下界类似于上限,

情况1)。上界类似于下界

if Upper Bound is Similar to Lower Bound, The Average Case is Similar

Example, 2n4 ≤ f(x) ≤ 2n4,
Then Omega(n) = 2n4

情况2)。如果上界与下界不相似

in this case, Omega(n) is Not fixed but Omega(n) is the set of functions with the same order of growth as g(n).

Example 2n4 ≤ f(x) ≤ 3n4, This is Our Default Case,
Then, Omega(n) = c'n4, is a set of functions with 2 ≤ c' ≤ 3

希望这个解释!