我无法为某些类型的代码找到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
先谢谢
答案 0 :(得分:1)
从内循环开始。
内循环的每次迭代都需要Theta(log_K(i))
次迭代,因为迭代器j
从i
开始并以指数方式衰减。
所以,你必须将它与外部循环结合起来,这是一个简单的增量循环。
因此,外循环需要:
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开启初始化)