使用单个循环找不到递归函数的时间复杂度

时间:2013-08-04 20:37:48

标签: algorithm recursion time-complexity recurrence

以下是一个简单的递归函数。我已经使它的递归方程像这样

T(N)= KT(N-1)+1

我使用+ 1作为int i;我已经解决了这个问题

T(n)= kT(n-1)+1。 。 。 T(N)= K ^ MT(N-M)+ M

制作T(1) - > n-m = 1 - > M = N-1

变为(k ^ n-1)(n-1)

现在我的问题是,没关系。我期待它n ^ 2,但这似乎不是多项式。

void permute(int k,int size) 
 {  
   int i; 
   for (i=k-1;i>=0;i--) 
   permute(k-1,size); 
  return; 
 } 

请帮我解决这个简短的问题

1 个答案:

答案 0 :(得分:0)

设n =大小。然后

T(n,k)=k*T(n,k-1) + O(1)
    =k*[(k-1)*T(n,k-2) + O(1)] + O(1)
    =k*(k-1)*T(n,k-2) + k*O(1) + O(1)
    =k*(k-1)*[(k-2)*T(n,k-3) + O(1)] + k*O(1) + O(1)
    =k*(k-1)*(k-2)*T(n,k-3) + k*(k-1)*O(1) + k*O(1) + O(1)
    =...
    =O(k!)*T(n,0) + O(1) * [P(k,k-1)+P(k,k-2)+...+P(k,1)]
    =O(k!)*T(n,0) + O(1) * e * O(k!)
    =O(k!)*T(n,0)                

所以它取决于置换的复杂性(0,大小)。