解决递归函数的递归关系

时间:2019-06-01 21:21:04

标签: algorithm recursion analysis recurrence

enter image description here我需要为以下伪代码的最坏情况分析创建并解决递归关系。我将加数(不包括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;
  }
}

任何帮助将不胜感激。该作业应于今晚进行。谢谢

2 个答案:

答案 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)

  • T(n)= T(2 ^ k)//通过假设
  • T(n)= T(n / 4)+ n //是递归关系
  • T(2 ^ k)= T(2 ^(k-2))+(2 ^ k)//重写
  • T(2 ^ k)= T(2 ^(k-2j))+(2 ^ k)* SUM(i = 0; j-1;(1/4)^ i)//是关系用于迭代j
  • T(4)= T(2 ^(k-2j))= 1 //递归结束时,达到基本情况,仅添加1次
  • 2 ^ 2 = 2 ^(k-2j)//重写并删除T
  • 2 = k-2j //删除通用库
  • j =(k / 2)-1 //解决第j次迭代
  • 注意:迭代不能使用小数,因此j = CEILING((k / 2)-1)
  • SUM(i = 0; j-1;(1/4)^ i)=(1-(1/4)^ j)/(1-(1/4))
  • 有关上面的几何和和变换证明,请参见下面的Wiki链接
  • 用CEILING((k / 2)-1)替换j,总和为...
  • SUM =(1-(1/4)^(天花板((k / 2)-1))/(1-(1/4))
  • 最后,T(2 ^ k)= 1 +(2 ^ k)* SUM
  • 对于输入n,T(n)= 1 +(n * SUM)
  • 此公式适用于所有k> = 1

正在测试多个值...

  • k = 1,T(2)= 1 +(2 * 0)= 1 //我们知道这是真的,因为T(2)是基本情况
  • k = 2,T(4)= 1 +(4 * 0)= 1 //我们知道这是真的,因为T(4)是基本情况
  • k = 3,T(8)= 1 +(8 * 1)= 9 //通过递归公式,T(8)= T(2)+ 8 = 9,真
  • k = 4,T(16)= 1 +(16 * 1)= 17 //通过递归公式,T(16)= T(4)+ 16 = 17,真
  • k = 5,T(32)= 1 +(32 * 1.25)= 41 //通过递归公式,T(32)= T(8)+ 32,T(8)= 9,32 + 9 = 41是

对于几何和 https://en.wikipedia.org/wiki/Geometric_series