202

我对大 O、大 Omega 和大 Theta 符号之间的区别感到非常困惑。

我知道大 O 是上限,大 Omega 是下限,但是 big Ө (theta) 到底代表什么?

我读过这意味着紧密绑定,但这是什么意思?

4

6 回答 6

365

首先让我们了解什么是大 O、大 Theta 和大 Omega。它们都是函数

大 O 给出渐近上界,而大欧米茄给出下界。Big Theta 两者兼而有之。

一切都是Ө(f(n))O(f(n))但不是相反。 如果它同时在 in和 in中
T(n),则称在in 中。在集合术语中,交集Ө(f(n))O(f(n))Omega(f(n))
Ө(f(n))O(f(n))Omega(f(n))

例如,归并排序最坏的情况是两者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)))。

不要混淆!

不要与最坏、最好和平均情况分析相混淆:所有三个(Omega、O、Theta)表示法都算法的最佳、最坏和平均情况分析无关。这些中的每一个都可以应用于每个分析。

我们通常使用它来分析算法的复杂性(如上面的归并排序示例)。当我们说“算法 A 是O(f(n))”时,我们真正的意思是“在最坏1情况分析下的算法复杂度是O(f(n))”——意思是——它缩放“相似”(或正式,不比)函数f(n)

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

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

  1. 确定确切的复杂度函数要困难得多,因此我们在 big-O/big-Theta 符号上“妥协”,这些符号在理论上足够丰富。
  2. 确切的操作数也取决于平台。例如,如果我们有一个包含 16 个数字的向量(列表)。需要多少操作?答案是:视情况而定。一些 CPU 允许向量加法,而另一些则不允许,因此答案在不同的实现和不同的机器之间有所不同,这是一个不受欢迎的属性。然而,大 O 符号在机器和实现之间更加稳定。

要演示此问题,请查看以下图表: 在此处输入图像描述

很明显,它f(n) = 2*nf(n) = n. 但差异并不像其他功能那么大。我们可以看到,它f(n)=logn迅速变得比其他功能低得多,并且f(n) = n^2迅速变得比其他功能高得多。
所以 - 由于上述原因,我们“忽略”了常数因子(图表示例中的 2*),并且只采用大 O 表示法。

在上面的示例中,f(n)=n, f(n)=2*n将同时在 inO(n)和 in 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通常,但并非总是如此。当缺少分析类(最差、平均和最佳)时,我们的意思是最坏的情况。

于 2012-09-09T12:09:32.743 回答
101

这意味着该算法在给定函数中既是大 O 又是大欧米茄。

例如,如果是Ө(n),则有一些常数k,使您的函数(运行时,无论如何)大于n*k足够大n的 ,还有一些其他常数K,使您的函数小于n*K足够大的n

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

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

于 2012-04-29T23:03:05.717 回答
15

Theta(n):如果存在正常数且可以夹在和之间,则函数f(n)属于。即它给出了上限和下限。Theta(g(n))c1c2f(n)c1(g(n))c2(g(n))

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

当我们说f(n)=c2(g(n))orf(n)=c1(g(n))它表示渐近紧界。

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

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

例如:边界2*(n^2) = O(n^2)是渐近紧的,而边界2*n = O(n^2)不是渐近紧的。

o(n):它只给出上限(从不严格限制)

O(n) 和 o(n) 之间的显着区别是对于所有 n>=n1,f(n) 小于 cg(n),但不等于 O(n)。

例如2*n = o(n^2),但是2*(n^2) != o(n^2)

于 2012-09-12T00:46:21.707 回答
6

我希望这是您可能希望在经典CLRS中找到的内容(第 66 页): 在此处输入图像描述

于 2019-04-02T10:24:01.290 回答
2

大 Theta 符号:

没什么好惹的哥们!!

如果我们有一个正值函数 f(n) 并且 g(n) 接受一个正值参数 n 则 ϴ(g(n)) 定义为 {f(n):对于所有 n> 存在常数 c1,c2 和 n1 =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) 的增长率。

查看图像以获得更好的直觉

于 2018-10-16T16:15:15.687 回答
1

首先是理论

  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(n) - 提供上限

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

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

n4在这里扮演x的角色,所以,

用 x'so 替换 n4,Big O(x') = 2x',现在我们都很高兴一般概念是

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

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

投入价值,

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

3n4 是我们的上限

Big Omega(n) - 提供下限

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

2n4 是 Theta(n4) 的值

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

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

2n4 是我们的下限

Theta(n) - 提供紧界

计算得出天气下界与上界相似,

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

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

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

案例2)。如果上界与下界不相似

In this case, Theta(n) is not fixed but Theta(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, Theta(n) = c'n4, is a set of functions with 2 ≤ c' ≤ 3

希望这解释!

于 2019-11-14T11:55:42.717 回答