复杂算法递归关系

complexity algorithm recurrence relation

int function(int n){
if (n<=1)
 return 1;
else 
 return (2*function(n/2));
}

运行 时间的递归关系 T(n) 是什么,为什么?

可以直接计算:就是最近的2^n,最大或者等于。

你计算L=log2(n),你取2^L,或2^(L+1)

复杂度为 O(log2 N) : log2 N 个操作。

这个算法的complexity-function就是

T(n) = T(n / 2) + 1
T(1) = 1

应用master-theorem,我们会得到

a = 1
b = 2
c = 0 (1 = n^0)

log b(A) = log2(1) = 0 = 0 c, thus case 2
apply values and the result is O(log n).

正如@guillaume 已经正确指出的那样,使用线性函数可以更容易地解决这个问题。