0
点赞
收藏
分享

微信扫一扫

master公式

捌柒陆壹 2022-03-11 阅读 37

T(N) = a*T(N/b)+O(N^d)

解释:在递归中,母问题也就是TN,如果可以分成b个等规模的子问题,母问题要调用a次子问题才可以解决,剩余过程的复杂度为O(N^d)的话,那母问题的时间复杂度就可以直接求解。

时间复杂度三种情况:

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 process(int[] arr,int left,int right) {
		int mid = left + ((right-left)>>1);
		if(left == right) {
			return arr[left];
			//当一个范围内只有一个数时就直接返回
		}
		int leftMax = process(arr,left,mid);//分别取左右两边的最大值
		int rightMax = process(arr,mid+1,right);
		
		return Math.max(leftMax, rightMax);//结果是两边的最大值
		
		

	}

本问题中子问题的规模是母问题的一半,一个求左边一个求右边,然后调用子问题2次,剩余过程一次求中间值一次返回

所以a = 2 b = 2 O(N^d) = 1 d = 0;

套公式符合第二个  log(b,a) >d    所以时间复杂度为O(N^log(b,a)) = O(N)

举报

相关推荐

0 条评论