如何计算递归算法的复杂度?
int findMax(int a[ ], int l, int r)
{
if (r – l == 1)
return a[ l ];
int m = ( l + r ) / 2;
int u = findMax(a, l, m);
int v = findMax(a, m, r);
if (u > v)
return u;
else
return v;
}
答案 0 :(得分:3)
来自大师定理:
T(n) = a * T(n/b) + f(n)
其中:
a
是子问题的数量f(n)
是递归之外的操作成本; f(n) = O(n
c
)
n/b
子问题的大小这个函数背后的想法是你重复上半部分项目(T(n/2)
)和项目后半部分(T(n/2)
)的操作。您会得到结果并进行比较(O(1)
),因此您拥有:
T(n) = 2 * T(n/2) + O(1)
所以f(n) = O(1)
以及n
值我们得到O(n
0
)
- 我们需要计算{ {1}}。所以a = 2,b = 2,c = 0.从主定理(正如评论中正确指出),我们最终得到c
c < log
{{ 1}}为b
a
log
。在这种情况下,整个递归调用的复杂性为2
。