数据结构-时间复杂度

function mergesort(i,j){
    let m;
    if(i!=j){
        m = (i+j) / 2;
        mergesort(i,m);
        mergesort(m+1,j);
        merge(i,j,m); //this function time complexity is O(n);
    }
}
mergesort(1,n); //求该调用时间复杂度O(?)
设mergesort操作次数为f(n),merge复杂度为cn,则:
f(n)=2f(n/2)+2*c*n/2;
    =2(2f(n/4)+2*c*n/4)+cn;
    =2(2(2f(n/8)+2*c*n/8)+cn/2)+cn;
    =2^k*f(n/(2^k))+kcn; // 1,k为递归次数log2(n);
f(1)=c*1=c; // 2
由1,2式可知:
当n=2^k时,f(n)=c*n+c*n*log2(n);
故O(?) = O(nlog2(n));

你可能感兴趣的:(算法-数据结构,算法复杂度)