估计递归函数的复杂性

时间:2017-06-20 19:10:30

标签: algorithm asymptotic-complexity master-theorem

void f(int n) {
    if (!n) return;
    for (int i=0; i<8; i++)
        f(n/12);
    g(n,3);
}

void g(int n, int i) {
    if (!i) return;
    for (int j=n; j>0; --j) {
        g(n,i-1);
    }
}

我试图估计这个函数的复杂性。这就是我这样做的方式:

  1. 估计复杂性。它取决于i的值,每个条目引发n个循环条目,因此整个复杂度为Θ(n ^ 3)。
  2. 现在从f开始。 T(n)= 8 *(T / 12)+ g(n,3)。现在应用主定理。 log8(12)&lt; 3(f的复杂度),因此f的整体复杂度为Θ(n ^ 3)。
  3. 这是正确的解决方案还是我还需要考虑其他问题?

1 个答案:

答案 0 :(得分:0)

由于T(n)n = 0时终止,T的递归必须为log12(T)深(忽略舍入和逐个等)。

如果我们扩展系列,请给出g的结果:

enter image description here

括号中的第二项非常小,因此可以忽略不计。因此总复杂度为Θ(n^3)