master公式
作者:互联网
master: T(n) = a * T(N/b) + O(N^d);
当:
log b A < d 时,程序的时间复杂度为:O(N^d);
log b A > d 时,程序的时间复杂度为:O(N^log b A);
log b A = d 时,程序的时间复杂度为:O(N^d * log N);
符合子问题规模是等规模的行为,均可使用master公式求解时间复杂度。
例:
/*
* 递归调用求最大值
* */
public static 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 Math.max(leftMax,rightMax);
}
解析:
程序进行递归调用是,符合子问题规模是等规模(leftMax和rightMax);
a: 子问题调用的次数,本程序的次数为2次(leftMax和rightMax);
N:为母问题规模,本程序的母问题规模为N;
T(N/b): 子问题规模,本程序的子问题规模为:N/2(二分);
O(n^d): 子问题以为的时间复杂度,本程序为O(1)(求中点);
可得本程序的master公式为:T(N) = 2 * T(N/2) + O(1);
所以,本程序的时间复杂度为:T(N) = O(N)
标签:leftMax,arr,log,int,公式,复杂度,程序,master 来源: https://www.cnblogs.com/caijilin/p/15259392.html