具有嵌套迭代功能的递归算法的时间复杂度?

卡林

一种)

void f(n){
  if(n<=1) return;
    else{
      g(n); //g(n) is O(N^2).
      f(n/2);
      f(n/2);
    } 
}

b)

void f(n){
  if(n<=1) return;
    else{
      g(n); //g(n) is O(N).
      f(n-1);
      f(n-1);
    } 
}

C)

void f(n){
  if(n<=1) return;
    else{
      g(n); //g(n) is O(N^2).
      f(n-1);
      f(n-1);
    } 
}

如何计算以上两个代码段的O(n)复杂度?

a)我得到答案O(n ^ 2),因为每个f(n)递归调用两次。并且由于树的深度为LogN(n / 2),所以总体复杂度为O(n ^ 2),我是否也忽略了g(n)方法,因为它也是N ^ 2?

b)由于树的深度为N,每个f(n)递归调用两次。并且由于每个级别需要执行N次g(n)次运算,因此我得到了答案O(N.2 ^(N))。

c)与b)相同,但g(n)执行N ^ 2次-因此为O(N ^ 2.2 ^(N))。

它是否正确?

邦吉冷杉

a)递归方程如下。

如果您扩展递归,我们将:

因此,我们要计算等于的最后一个方程:

由于上述方程式的最后一部分是几何序列,因此我们具有:

因此递归为

b)方法与以前相同。

等于:

所以答案是

c)第三部分可以用相同的技术解决。

PS:感谢Alexandre Dupriez的评论。

PS:对于一个优雅的总和的简化阅读亚历山大的言论吼叫。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章