目录
master公式的介绍
(1),时间复杂度为
(2),时间复杂度为
(3),时间复杂度为
master公式表示对于一个递归程序,N表示母问题,N/b表示规模相同的子问题,a表示子问题的次数,表示除去子问题的调用之外剩下过程的时间复杂度。只有子问题的规模相同的递归行为才可以采用master公式进行时间复杂度的分析。
master公式的应用
master公式主要用于剖析递归行为的时间复杂度,使用master公式对下面的代码实例进行分析如下:
//这个代码使用递归对数组的最大值进行查找
public static int getMax(int[] arr) {
return process(arr, 0, arr.length - 1);
}
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);//两个部分的最大值进行比较
}
利用master公式对上述代码进行分析,子问题的规模相同,满足master公式的形式,有两个规模相同的均为原问题二分之一的子问题,其它的程序时间复杂度为,所以满足的master公式为:。根据公式判断,,所以时间复杂度为.
master公式的总结
对于递归行为,只要是子问题的规模相同就可以直接使用master公式进行分析,然后根据相应参数的值得到时间复杂度。