我需要为以下伪代码的最坏情况分析创建并解决递归关系。我将加数(不包括for循环计数器)作为我的基本操作。 我假设n = 2 ^ k。
这是我取得的进步... 基本情况: T(n <= 4)= 1
W(n)= W(2 ^ k)=加法运算以计算下一个递归中的答案+加法+ for循环中的加法 W(2 ^ k)= 2 + W(2 ^(k-2))+(2 ^ k)-2 = W(2 ^(k-2))+(2 ^ k)
我使用反向替换并获得以下递归关系...
第j个递归调用 W(2 ^ k)= W(2 ^(k-2j))+(2 ^ k)+ sum(t = 1,j,2 ^(k-2(t-1)))
我知道我可以简化此过程,因为我采用W(2 ^(k-2j))= W(4)并求解j以查看代码采取了多少递归步骤。 在这种情况下,j =(k / 2)-1。减少重复次数会给我...
W(2 ^ k)= 1 +(2 ^ k)+ sum(t = 1,j,2 ^(k-2(t-1)))。
减少总和会给我...
W(2 ^ k)= 1 +(2 ^ k)+(2 ^ k)*(2 ^ 2)* sum(t = 1,j,2 ^(-2t))或
W(n)= 1 + n + 4n * sum(t = 1,j,2 ^(-2t))
我不能简化的是求和。在讲座中,我们可能会有sum(i = 1,n,2 ^ i)的总和,该总和为2 ^(n + 1)-1,但是这一点有所不同。
int function calc(int n) {
int num,answer;
if(n<=4) {return n+10;}
else {
num=calc(n/4);
answer=(num+num+10);
for(int i=2;i<=n-1;i++) {
answer=answer+answer;
}
return answer;
}
}
任何帮助将不胜感激。该作业应于今晚进行。谢谢
答案 0 :(得分:0)
问题的时间复杂度为T(n) = T(n/4) + n
。术语n
的意思是\Theta(n)
。因此,T(n) = n + n/4 + n/4^2 + ... + n/(4^log_4(n)) = n(1 + 1/4 + ... + 1/n) = \Theta(n)
。请注意,lim_{n\to \infty} 1 + 1/4 + ... + 1/4^log_4(n) = 4/3
是一个常数。
答案 1 :(得分:0)
正在测试多个值...