【发布时间】:2012-05-09 17:49:42
【问题描述】:
我对大 O、大 Omega 和大 Theta 符号之间的区别感到非常困惑。
我知道大 O 是上限,大 Omega 是下限,但是 big Ө (theta) 究竟代表什么?
我读过它的意思是紧密绑定,但这是什么意思?
【问题讨论】:
标签: algorithm computer-science big-o notation big-theta
我对大 O、大 Omega 和大 Theta 符号之间的区别感到非常困惑。
我知道大 O 是上限,大 Omega 是下限,但是 big Ө (theta) 究竟代表什么?
我读过它的意思是紧密绑定,但这是什么意思?
【问题讨论】:
标签: algorithm computer-science big-o notation big-theta
首先让我们了解什么是大 O、大 Theta 和大 Omega。都是sets的函数。
Big O 给出上限asymptotic bound,而大 Omega 给出下限。 Big Theta 两者兼而有之。
所有Ө(f(n)) 也是O(f(n)),但反之则不然。
如果T(n) 位于O(f(n)) 和Omega(f(n)) 中,则称T(n) 位于Ө(f(n)) 中。
在集合术语中,Ө(f(n)) 是O(f(n)) 和Omega(f(n)) 的intersection
例如,合并排序最坏情况是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)。
嗯,有很多原因,但我相信其中最重要的是:
要演示此问题,请查看以下图表:
很明显f(n) = 2*n 比f(n) = n 更“差”。但差异并不像其他功能那么大。我们可以看到f(n)=logn 很快变得比其他函数低很多,f(n) = n^2 很快变得比其他函数高很多。
所以 - 由于上述原因,我们“忽略”了常数因子(图表示例中的 2*),而仅采用大 O 表示法。
在上面的示例中,f(n)=n, f(n)=2*n 将同时在 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通常,但并非总是如此。当缺少分析类(最差、平均和最佳)时,我们的意思是最坏的情况。
【讨论】:
f(n) = n^2 渐近强于n,因此是 Omega(n)。但是它不是 O(n)(因为对于较大的 n 值,它大于 c*n,对于所有 n)。既然我们说 Theta(n) 是 O(n) 和 Omega(n) 的交集,既然不是 O(n),也就不可能是 Theta(n)。
T_best(n), T_worst(n), T_average(n)。它们不必相同(大多数情况下,它们不是相同的)。 O/Omega/Theta 可以独立应用于其中任何一个。
这意味着算法在给定函数中既是大O又是大欧米茄。
例如,如果它是Ө(n),那么有一些常量k,这样你的函数(运行时,等等),对于足够大的n,大于n*k,以及其他一些常量K 使得你的函数小于n*K 足够大的n。
换句话说,对于足够大的n,它被夹在两个线性函数之间:
对于足够大的k < K 和n,n*k < f(n) < n*K
【讨论】:
Theta(n): 一个函数f(n)属于Theta(g(n)),如果存在正常数c1和c2使得f(n)可以夹在c1(g(n))之间和c2(g(n))。即它给出了上限和下限。
Theta(g(n)) = { f(n) : 存在正常数 c1,c2 和 n1 使得 0=n1 }
当我们说f(n)=c2(g(n)) 或f(n)=c1(g(n)) 时,它表示渐近紧界。
O(n):它只给出上限(可能很紧也可能不紧)
O(g(n)) = { f(n) : 存在正常数 c 和 n1 使得 0=n1}
ex:边界2*(n^2) = O(n^2) 是渐近紧的,而边界2*n = O(n^2) 不是渐近紧的。
o(n):它只给出上限(从不严格)
O(n) 和 o(n) 之间的显着区别是 f(n) 小于 cg(n) 对于所有 n>=n1 但不等于 O(n)。
ex:2*n = o(n^2),但2*(n^2) != o(n^2)
【讨论】:
我希望这是您可能希望在经典的CLRS(第 66 页)中找到的内容:
【讨论】:
首先是理论
大 O = 上限 O(n)
Theta = 阶函数 - theta(n)
Omega = Q-Notation(下限)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(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 是我们的上限
Theta(n4) = cg(n) = 2n4 因为 2n4 ≤ 我们的例子 f(n)
2n4 是 Theta(n4) 的值
所以,0≤cg(n)≤f(n)
0 ≤ 2n4 ≤ 2n4 + 100n2 + 10n + 50
2n4 是我们的下限
这是为了找出天气下界与上界相似,
案例 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
希望这能解释清楚!
【讨论】: