具有特殊情况的循环的时间复杂度(theta)

时间:2014-09-09 07:05:42

标签: java algorithm big-o computer-science induction

我无法为某些类型的代码找到theta,例如。

for(i=1;i<=n;i++){
 for(j=i;j>=1;j=j/3){
 ....
 }
}

如何找到上述代码的theta。

如果有人帮助我在一般情况下如何找到它会非常有用。

for(i=1;i<=n;i++){
 for(j=i;j>=1;j=j/K){
 ....
 }
}

Ps:我知道k = 2,即n * logn

先谢谢

1 个答案:

答案 0 :(得分:1)

从内循环开始。
内循环的每次迭代都需要Theta(log_K(i))次迭代,因为迭代器ji开始并以指数方式衰减。

所以,你必须将它与外部循环结合起来,这是一个简单的增量循环。
因此,外循环需要:

Theta(log_K(1) + log_K(2) + log_K(3) + ... + log_K(n)) = 
= Theta(log_K(1*2*...*n)) = Theta(log_K(n!)) = 
= Theta(n*log_K(n)) = Theta(nlogn)

The last equality is because log_K(x) = log_2(x) / log_2(K),但log_2(K)是常数。


我假设你的意思是for(j=i;j>=1;j=j/3){,而不是for(i=j;j>=1;j=j/3){(i和j开启初始化)