递归算法的复杂性,它在数组中找到最大元素

时间:2014-12-19 14:12:34

标签: recursion complexity-theory

如何计算递归算法的复杂度?

int findMax(int a[ ], int l, int r) 
{
    if (r – l == 1)
        return a[ l ];

    int m = ( l + r ) / 2;
    int u = findMax(a, l, m);
    int v = findMax(a, m, r);

    if (u > v)
        return u;
    else
        return v;
}

1 个答案:

答案 0 :(得分:3)

来自大师定理:

T(n) = a * T(n/b) + f(n)

其中:

  • a是子问题的数量
  • f(n)是递归之外的操作成本; f(n) = O(n c )
  • n/b子问题的大小

这个函数背后的想法是你重复上半部分项目(T(n/2))和项目后半部分(T(n/2))的操作。您会得到结果并进行比较(O(1)),因此您拥有:

T(n) = 2 * T(n/2) + O(1)

所以f(n) = O(1)以及n值我们得到O(n 0 ) - 我们需要计算{ {1}}。所以a = 2,b = 2,c = 0.从主定理(正如评论中正确指出),我们最终得到c c < log {{ 1}}为b a log。在这种情况下,整个递归调用的复杂性为2