首页 > 其他 > 详细

master公式

时间:2021-09-13 17:49:46      阅读:24      评论:0      收藏:0      [点我收藏+]

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)

master公式

原文:https://www.cnblogs.com/caijilin/p/15259392.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!