Time complexity 嵌套循环的T(n),我得到的答案是(logn+;1)(logn+;2),对吗? i=n; 而(i>=1){ j=i; 当(j
在Time complexity 嵌套循环的T(n),我得到的答案是(logn+;1)(logn+;2),对吗? i=n; 而(i>=1){ j=i; 当(j,time-complexity,Time Complexity,在while(i>=1){(…)}循环中时,i大于1(除了最后一次迭代),因此在j=i之后,j大于1(除了最后一次迭代) 因此,您的代码或多或少相当于: i=n; while(i>=1){ j=i; while(j<=n){ thetha(1) j=j*2; } i=i/2; } 整体复杂度是while循环的复杂度,它是log(n)。是的,你是正确的,外部循环是log(n),内部循环是log(n),这会产生(l
while(i>=1){(…)}
循环中时,i
大于1(除了最后一次迭代),因此在j=i
之后,j
大于1(除了最后一次迭代)
因此,您的代码或多或少相当于:
i=n;
while(i>=1){
j=i;
while(j<=n){
thetha(1)
j=j*2;
}
i=i/2;
}
整体复杂度是while循环的复杂度,它是log(n)。是的,你是正确的,外部循环是log(n),内部循环是log(n),这会产生(logn)(logn) Log(n)复杂性的原因是循环中剩余的迭代次数在每次迭代时减半。这是通过将迭代变量
i
除以2还是通过将变量j
乘以2来实现的,这是不相关的。完成循环所需的时间随着每个循环的Log(n)的增加而增加
(logn)(logn)的乘法是由于外循环的每个迭代执行内循环的log(n)迭代
加法是不必要的,因为在大O表示法中,我们只关心一个函数相对于另一个函数的增长速度。用一个常数抵消它(或乘以一个常数)不会改变函数的相对复杂度,因此最终结果是(logn)(logn)。对不起,这不是while(j)
i=n;
while(i>1){
i=i/2;
}
if (i==1){
j=i
while(j<=1){
thetha(1)
j=j*2;
}
}
i=n;
while(i>1){
i=i/2;
}
if (i==1){
thetha(1)
}