具有解释的这些功能的复杂性是什么?

时间:2016-03-07 11:15:19

标签: algorithm performance time-complexity complexity-theory

我想知道如何使用T(n)来找到这些函数的复杂性......以及类似的东西..因为我只能猜猜。
第一功能:

int f(int n)
{ 
 if (n == 1)
      return 1 ;
  return 1 + f(f(n-1));
 }

时间和空间复杂度?


第二功能:

时间和空间函数f()的复杂性??? :

void f(int n)
{
  int i ;
  if(n < 2) return ;
   for(i = 0 ; i < n/2 , i+= 5)
       printf("*");
   g(n/3);
   g(n/3);
 }


void g(int n)
   {
      int i ;
      for(i = 0 ; i < n ; i++)
         printf("?") ;
      f(3*n/2);
   }


非常感谢:)

1 个答案:

答案 0 :(得分:1)

这可能会让您感到惊讶,但第二个更容易入手。 O_o ikr

第二功能:

g(n) = n + f(3n/2)f(n) = n/10 + 2g(n/3)。因此f(n) = 21n/10 + 2f(n/2)

替换n = 2^m,因此f(2^m) = 21(2^m)/10 + 2f(2^(m-1)) = 2*21(2^m)/10 + 4f(2^(m-2))等等......

第一项总和为m*21(2^m)/10,这对您来说可能很明显。

第二个词(f())几何增长;现在f(1) = 1(因为只有一个操作),所以如果你扩展到最后一个术语,你会发现这个术语是2^m * f(1) = 2^m。因此,f的总复杂度为f(2^m) = m*21(2^m)/10 + 2^mf(n) = n(2.1*log(n) + 1),其中log为2对数。

因此f(n)O(n log(n))

第一个功能:

好的我说实话我不知道如何开始,但我用C ++测试了代码,结果正是f(n) = n

归纳证明:

  • 假设f(n) = n,然后是f(n + 1) = 1 + f(f(n)) = n + 1。因此,如果对于n为真,那么对于n + 1
  • 也是如此
  • 显然现在f(1) = 1。因此,对于2和3,4,5等等都是如此。

因此,通过数学归纳,f(n) = n

现在为时间复杂度位。由于f(n)返回n,因此嵌套f(f(n-1))中的外部调用实际上将是第二次调用,因为参数相同:f(n-1); f(n-1);。因此T(n) = 2*T(n-1)因此T(n) = 2^n。的 O(2^n)