请参阅以下两个功能。
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)
但我想知道为什么我不能假设这个等式是第二种情况?有一件事,我确信在这两种情况下,复杂性随之变化。递归调用在这两种情况下都是不同的。
请帮助我理解。
答案 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.的复杂性无关。)