非常简单的递归函数复杂度分析

时间:2012-06-05 18:15:35

标签: algorithm complexity-theory code-analysis

我需要一些帮助才能理解分析递归算法。我很快就提出了这个算法,并且想知道复杂性是什么:

int FunctionExampple( A1, A2, ... An )
{
    product = 1;
    if( n == 2)
    {
        product = multi(A1, A2);
    }
    else 
    {
        product = multi(A1, FunctionExample( A2, A3, ..., An ) );
   }
   return product; 
}

现在假设函数multi需要O(n ^ 1.59)时间,复杂性会是多少?它会保持为O(n ^ 1.59)还是递归调用会使O(n ^ 1.59 * n)来计算递归调用的数量?谢谢你们。

PS:我刚刚写了这么快,语法和所有这些东西并不重要。

1 个答案:

答案 0 :(得分:1)

O(n 1.59 )中的参数'n'测量'multi'参数的大小,而不是参数的数量。因此,关键是“多”输出的大小如何与其输入的大小相关。例如。如果'multi'的结果是其任何参数大小的两倍,那么a,B,C大小为n的调用multi(A,multi(B,C))为O(n 1.59 < / sup> +(2n) 1.59 ),如果你以这种方式将多个调用链接到multi,则会获得指数式增长。另一方面,如果'multi'返回与其输入大小相同的值,则得到O(kn 1.59 )其中k是FunctionExample的参数个数,n是它们的(最大的。)

所以这取决于'多'的行为方式。例如。如果它是有限域内的乘法与乘法会有很大差异,因为后者的结果不会从输入增长,而对于无限整数,结果会增大。