子问题的规模一致(N/b),子问题调用了a次,除了子问题调用之外,剩下的复杂度为O(N^d)。
T(N)=a*T(N/b)+O(N^d) 其中a,b,c都为常数
1. log(b,a) < d,复杂度为O(N^d)
2. log(b,a) > d,复杂度为O(N^log(b,a)
3. log(b,a) = d,复杂度为O(N^d*logN)
例如:
public static int getMax(int[] arr){
return process(arr,0,arr.length-1);
}
private static int process(int[] arr, int L, int R) {
if (L==R)
return 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);
}
假设L-R上有N个数,子问题的规模为N/2,调用了2次,剩下的时间为O(1)。
T(N)=2T(N/2)+O(N^0)
此时a=2,b=2,d=0。
log(b,a)=1>0 --> O(N)