Master定理也叫主定理。它提供了一种通过渐近符号表示递推关系式的方法。应用Master定理可以很简便的求解递归方程。
T(N)=a(N/b)+N^d
其中 n 表示原始的样本量, a 表示子过程发生的次数,n/b 表示子过程的样本量,d 表示除子过程其他的操作,一般为常量
- log(b,a)<d 则递归算法复杂度为O(n^log(b,a))
- log(b,a)=d 则递归算法复杂度为O(n^d*log(b,a))
- log(b,a)>d 则递归算法复杂度为O(n^d))
例子
/**
* 二分查找递归实现。
* @param srcArray 有序数组
* @param start 数组低地址下标
* @param end 数组高地址下标
* @param key 查找元素
* @return 查找元素不存在返回-1
*/
public static int binSearch(int srcArray[], int start, int end, int key) {
int mid = (end - start) / 2 + start;
if (srcArray[mid] == key) {
return mid;
}
if (start >= end) {
return -1;
} else if (key > srcArray[mid]) {
return binSearch(srcArray, mid + 1, end, key);
} else if (key < srcArray[mid]) {
return binSearch(srcArray, start, mid - 1, key);
}
return -1;
}
a = 2,b=2,d=0
则算法复杂度为 n^log(b,a)=n