Java 在大θΘ;符号
我需要一些帮助来理解使用符号的算法分析: 大O是比较函数最常用的渐近表示法,尽管在许多情况下,对于渐近更紧的界,大O可以用大θΘ代替 我如何一步一步地分析这个算法?我知道最后的答案是ϴ(n²),但我很难看到它。任何帮助都将不胜感激 为了简单起见,您可以假设n=2k,对于某个正整数kJava 在大θΘ;符号,java,algorithm,complexity-theory,Java,Algorithm,Complexity Theory,我需要一些帮助来理解使用符号的算法分析: 大O是比较函数最常用的渐近表示法,尽管在许多情况下,对于渐近更紧的界,大O可以用大θΘ代替 我如何一步一步地分析这个算法?我知道最后的答案是ϴ(n²),但我很难看到它。任何帮助都将不胜感激 为了简单起见,您可以假设n=2k,对于某个正整数k inta=0; int i=n*n; 而(i>0){ 对于(int j=0;j0) { 对于(int j=0;j计算a递增的次数: n^2 on the first iteration + n^2 / 2 on th
inta=0;
int i=n*n;
而(i>0){
对于(int j=0;j
基本上,外部循环控制i
的值。每次循环通过时,i
被二除。然后循环的初始值是i
,i/2
,i/4
内部循环包含i
计算。如果你把这些加起来,你会得到i+i/2+i/4+i/8+i/16+<代码>整数a=0,i=n*n;
而(i>0)
{
对于(int j=0;j计算a
递增的次数:
n^2 on the first iteration
+
n^2 / 2 on the second iteration
+
...
+
n^2 / 2^k on the (k+1)-th iteration
我们有k=log(n^2)=2*log(n)
,因为我们在每一步都除以2
所以我们得到了一个几何级数的和,第一项是n^2
,比率是1/2
和2*log(n)
项,或者为了使事情更简单,第一项是1
和比率是2
:
S = O(2^(2*log(n))) = O([2^log(n)]^2) = O(n^2)
=> The entire algorithm is BigTheta(n^2)
<>我们忽略一个事实:<代码> i=n*n>代码>一分钟,只考虑算法
while(i > 0)
{
for(int j=0; j<i; j++)
{ a++; }
i=i/2;
}
while(i>0)
{
对于(int j=0;jj)你已经证明了它是O(n^2),但是为了证明θ(n^2),你还必须证明运行时间(对于大n)是以n^2的倍数为界的。很明显,自从第一次执行j循环以来,它将循环n^2次。@Anonymous你是对的。我总是把O、θ和ω混在一起。我现在编辑。
S = O(2^(2*log(n))) = O([2^log(n)]^2) = O(n^2)
=> The entire algorithm is BigTheta(n^2)
while(i > 0)
{
for(int j=0; j<i; j++)
{ a++; }
i=i/2;
}