Answers:
这意味着该算法在给定函数中既是big-O又是big-Omega。
例如,如果为Ө(n)
,则存在一个常数k
,例如您的函数(运行时,无论什么)大于n*k
要足够大的函数n
,而存在另外一些常数,K
例如您的函数要小于n*K
足够大的函数n
。
换句话说,对于足够大的值n
,它夹在两个线性函数之间:
对于k < K
和n
足够大,n*k < f(n) < n*K
首先让我们了解大O,大Theta和大Omega是什么。它们都是功能集。
大O给出渐近上限,而大欧米茄给出了下界。大Theta两者兼而有之。
一切Ө(f(n))
也是O(f(n))
,但并非相反。
T(n)
据说Ө(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))
。
不要与最差,最好和平均情况分析混淆:所有三个(欧米茄,O,西塔)符号是不相关的算法最好,最差,平均情况分析。这些中的每一个都可以应用于每个分析。
我们通常使用它来分析算法的复杂性(例如上面的合并排序示例)。当我们说“算法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 *),并且仅采用big-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可以独立应用于其中任何一个。
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 <= c1(g(n))<= f(n)<= 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> = n1的0 <= f(n)<= cg(n)}
ex:边界2*(n^2) = O(n^2)
是渐近严格的,而边界2*n = O(n^2)
不是渐近严格的。
o(n):仅给出上限(从不严格)
对于所有n> = n1,O(n)和o(n)之间的显着差异是f(n)小于cg(n),但不等于O(n)。
例如:2*n = o(n^2)
,但2*(n^2) != o(n^2)
没什么可搞砸的哥们!
如果我们有一个正值函数f(n)并且g(n)接受一个正值参数n,则ϴ(g(n))定义为{f(n):对于所有n>,都有常数c1,c2和n1 = n1}
其中c1 g(n)<= f(n)<= c2 g(n)
c1 = 5和c2 = 8且n1 = 1
在所有符号中,符号提供了函数增长率的最佳直觉,因为它给了我们一个紧密的界限,而big-oh和big-omega分别给出了上限和下限。
ϴ告诉我们g(n)尽可能接近f(n),g(n)的增长率尽可能接近f(n)的增长率。
首先理论
大O =上限O(n)
Theta =阶函数-theta(n)
Ω= 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(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(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 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
希望这个解释!