一种)
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))。
它是否正确?
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句