其他分享
首页 > 其他分享> > 递归时间复杂度分析——master公式

递归时间复杂度分析——master公式

作者:互联网

【牛客左神的算法课笔记】

若递归可以写成如下形式: T ( n ) = a T ( n b ) + O ( n d ) T(n) = aT(\frac{n}{b})+O(n^d) T(n)=aT(bn​)+O(nd)
则时间复杂度计算如下:

其中,a表示初始迭代的子算法有几个,b表示初始将数组分成了几个部分,d表示递归完成后还要进行的复杂度。

举例,用递归求解一个数组的最大值,采用分治方法将数组均分为两部分左和右,分别计算两部分的最大值,其中最大的那个就是全数组的最大值。
代码如下:

# 递归分治求最大值 找到左边的最大值和右边的最大值,再比较
def getMax(alist,L,R):
    if L==R:
        return alist[L]
    mid = int((L+R)/2)
    maxLeft = getMax(alist,L,mid)
    maxRight = getMax(alist,mid+1,R)
    ans = max(maxLeft,maxRight)
    return ans

alist = [3,2,1,6,8,4]
a = getMax(alist,0,len(alist)-1)

递归的时间复杂度可以写成 T ( n ) = 2 T ( n 2 ) + O ( 1 ) T(n)=2T(\frac{n}{2})+O(1) T(n)=2T(2n​)+O(1)
其中算法分成了左和右两个子算法,所以a=2;
数组被均分成了两部分,所以b=2;
递归完成后只做了比较运算,时间复杂度为O(1),所以d=0
因此 log ⁡ b a > d \log_ba>d logb​a>d,时间复杂度为 O ( n ) O(n) O(n)

标签:log,递归,最大值,alist,master,getMax,复杂度
来源: https://blog.csdn.net/qq_43477550/article/details/112142916