我试图找到for循环的时间复杂度。下面是循环细节。
for(int i=N;i>1;i=i/2)
{
for(int k=0;k<i;k++){
sum++;
}
}
以下是该问题的任何发现。如果我要去训练,请纠正我。
内部循环将超越N+N/2+N/4+N/8....
所以tn=ar^(n-1)
。因此,替换Tn=1
,a=N
和r=1/2
1=N(1/2)^(n-1)
因此
1/2N=(1/2)^n
因此内循环的总和是GP。 Sn=a(1-r^n)/(1-r)
替换a=N,r=1/2
,我们得到
Sn=N(1-(1/2N))/(1-1/2)
因此Sn=2N-1
我不确定复杂性是否为N
。
请帮忙
感谢。
答案 0 :(得分:1)
以下是推断与算法相关的增长顺序的正式方法(Sigma Notation)(使用C的MinGW2.95编译器进行实验证实)。