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

时间:2018-03-08 08:04:09

标签: algorithm time-complexity

A)

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))。

这是对的吗?

1 个答案:

答案 0 :(得分:2)

a)递归方程如下所示。

如果扩展递归,我们有:

所以我们想要计算等于的最后一个等式:

由于上面等式的最后一部分是几何系列,我们有:

所以递归是

b)方法与以前相同。

等于:

答案是

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

PS:感谢 Alexandre Dupriez 的评论。

PS:对于优雅简化总和,请阅读 Alexandre 的评论。

相关问题