master公式的使用
T(N) = a * T(N/b) + O(N^d)
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)
举例:用递归方法找到一个数组中的最大值,系统上到底是怎么做的?
7 | .... | .... | .... | .... | .... | 3 | 4 | 9 | 0 |
递归实现C++代码:
int process(int arr[], int L, int R){
if(L == R)
{
return arr[L];
}
int mid = L + ((R - L) >> 1); //中点
int leftMax = process(arr, L, mid);
int rightMax = process(arr, mid + 1, R);
return (leftMax > rightMax ) ? leftMax : rightMax ;
}
根据master表达式计算时间复杂度:
T(N) = 2 * T(N/2) + O(1)
满足:1) log(b,a) > d --->复杂度为O(N^log(b,a)) 即时间复杂度为:O(N)