master公式的使用:
T(N)= a*T(N/b) + O(n^d)
其中N为行为的总样本量,N/b为子行为的样本量,a为子行为发生的次数,除了调用子过程之外进行剩下的操作的所花费的时间代价。
简单递归代码:
// 求数组中的最大值
function getMax(arr,L,R){
if(L==R){
return arr[L];
}
var mid = (L+R)/2;
var max_left = getMax(arr,L,mid);
var max_right = getMax(arr,mid+1,R);
return Math.max(max_left,max_right);
}
上述代码中,a为2,b为2,额外操作的时间复杂度为O(1),即d=0
a,b,d与时间复杂度O的关系:
1) log(b,a) > d 复杂度为O(N^log(b,a))
2) log(b,a) = d 复杂度为O(N^d * logN)
3) log(b,a) < d 复杂度为O(N^d)