这两个函数的渐近时间复杂度是多少?

时间:2016-08-16 17:06:06

标签: algorithm time-complexity asymptotic-complexity

请参阅以下两个功能。

    A(n)
    { if(n<=1)
          return;
      else
          return(A(n/4)+A(n/4)+A(n/4));
    }

和第二个 -

     A(n)
    { if(n<=1)
          return;
      else
          return(3*A(n/4));
    }

请告诉我两个具有解释的函数的等式,然后将其约束为渐近。

实际上,为什么我问这个问题是因为,我得到了一个等式

T(N)= 3T(N / 4)+1

我使用了Masters和tree方法(假设第一种情况)并得到了 -    THETA(N ^ 0.79)

但我想知道为什么我不能假设这个等式是第二种情况?有一件事,我确信在这两种情况下,复杂性随之变化。递归调用在这两种情况下都是不同的。

请帮助我理解。

1 个答案:

答案 0 :(得分:3)

你断言第一个算法时间的递归是完全正确的

T(n)= 3 T(n / 4)+ O(1)

第一种和第二种算法总是会返回相同的东西。

然而,这是相似性结束的地方。第二种算法通过单次调用,然后相乘,更巧妙地组成。也就是说,而

return(A(n/4)+A(n/4)+A(n/4));

返回与

相同的值
return(3*A(n/4));

后者只进行一次递归调用。因此,它的递归是

T(n)= T(n / 4)+ O(1)

(这里最后的 O(1)还包括将返回值乘以3的成本,这与w.r.t.的复杂性无关。)