其他分享
首页 > 其他分享> > master公式

master公式

作者:互联网

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)

标签:leftMax,arr,log,int,公式,复杂度,程序,master
来源: https://www.cnblogs.com/caijilin/p/15259392.html