功能的复杂性

时间:2009-02-10 11:27:18

标签: complexity-theory

时间和空间的复杂性是什么:

int superFactorial4(int n, int m)
{
    if(n <= 1)
    {
        if(m <= 1)
            return 1;
        else 
            n = m -= 1;
    }

    return n*superFactorial4(n-1, m);
}

通过将n的值减1来递归运行,直到它等于1,然后它将m的值减1或者在m等于1的情况下返回1。

我认为复杂性取决于n和m,所以可能是O(n * m)。

3 个答案:

答案 0 :(得分:3)

时间复杂度为O(n+m^2),空间复杂度相同。

推理:使用固定值m,函数对自身进行n递归调用,每个函数都是常量工作,因此具有固定m的调用的复杂性为{{1 }}。现在,当n达到零时,它变为nm-1也变为m。因此,下一个固定m阶段将采用m-1,下一个m-1,依此类推。因此,您获得的总和m-2(m-1)+(m-2)+...+1

空间复杂度相等,因为对于每次递归调用,递归都占用常量空间,除了最后,你不会从递归返回,并且没有尾递归。

答案 1 :(得分:3)

实际上,它看起来更接近O(N + m ^ 2)。 n仅用于第一个“循环”。

此外,在任何不进行尾调用优化的语言中,空间复杂度可能会“失败”。在支持优化的语言中,空间复杂度更像是O(1)。

答案 2 :(得分:-1)

使用递归的因子函数的时间复杂度     伪代码:

int fact(n)
{ 
   if(n==0)
   { 
      return 1;
   }
   else if(n==1)
   {
        return 1;
   }
   else if
   {
      return n*f(n-1);
   }
}

time complexity;     
let T(n) be the number of steps taken to compute fact(n).


we know in each step F(n)= n*F(n-1)+C

F(n-1)= (n-1)*F(n-2)+c

substitute this in F(n), we get

F(n)= n*(n-1)*F(n-2)+(n+1)c

现在使用大写符号我们可以说

F(n)>= n*F(n-1)
F(n)>= n*(n-1)*F(n-2)
.
.
.
.
.
F(n)>=n!F(n-k)

T(n)>=n!T(n-k)

n-k=1;
k=n-1;

T(n)>=n!T(n-(n-1))
T(n)>=n!T(1)
since T(1)=1
T(n)>=1*n!

现在是

的形式
 F(n)>=c(g(n))

所以我们可以说使用递归的阶乘的时间复杂度是

T(n)= O(n!)