递归行为时间复杂度

master公式的使用:
T(N)= a*T(N/b) + O(n^d)

其中N为行为的总样本量,N/b为子行为的样本量,a为子行为发生的次数,除了调用子过程之外进行剩下的操作的所花费的时间代价。

简单递归代码:

//  求数组中的最大值
function getMax(arr,L,R){
    if(L==R){
        return arr[L];
    }
    var mid = (L+R)/2;
    var max_left = getMax(arr,L,mid);
    var max_right = getMax(arr,mid+1,R);
    return Math.max(max_left,max_right);
}

上述代码中,a为2,b为2,额外操作的时间复杂度为O(1),即d=0

a,b,d与时间复杂度O的关系:
1) log(b,a) > d 复杂度为O(N^log(b,a))
2) log(b,a) = d 复杂度为O(N^d * logN)
3) log(b,a) < d 复杂度为O(N^d)**

猜你喜欢

转载自blog.csdn.net/qq_34305040/article/details/80474400