master定理求解范围
对于一些递归性时间复杂度,由于难以计算,我们需要使用Master定理来进行求解。
例如,我们熟悉的分治算法,其递归式为:T(n)=2T(2n)+n时间复杂度就是O(nlog2n).因此,我们普遍的将时间复杂度问题形式化为:T(n)=aT(bn)+f(n)
对于对于此类我们,我们便可以使用master定理来进行求解了。
master定理的内容
对于递归的时间复杂度问题T(n)=aT(bn)+f(n)
我们令c=logba,再和f(n)的时间复杂度进行比较,可以分为三类情况。
我们可以令f(n)=O(nk)或者O(nklog)之类的。那么我们将c和这里的k进行比较。这样就可十分方便的去分类,还比较好记。
- 1.当c>k时,且T(n)=aT(bn)+f(nk),我们有:T(n)=O(nc)
- 2.当c=k时,且T(n)=aT(bn)+f(nklogpn),我们有:T(n)=O(nclogp+1n)
- 3.当c<k时,且T(n)=aT(bn)+f(n),.我们有:T(n)=O(nk)
显然在初赛上,我们不需要知道如何证明时间复杂度,只需要能够计算出对应的时间复杂度,选对对应的选择题即可。所以你可以这么记忆:如果c和k不相等,时间复杂度为O(nmax(c,k)),否则时间复杂度为O(nclogpn)过O(nklogp+1n).
注意对于情况3:若nk还跟了一些东西,这个东西也要算进时间复杂度.
master定理应用
1.【NOIP2016】计算T(n)=2T(4n)+n的时间复杂度。
我们有c=logba=21,k=21,此时对应情况2,p=0.所以有:
T(n)=O(n2nlog1n)=O(lognn)
2.计算T(n)=8T(2n)+n2的时间复杂度.
有c=log28=3,k=2.对应情况1,故时间复杂度为T(n)=O(n3).
3.计算T(n)=2T(2T)+n.的时间复杂度。
有c=log22=1,k=1,对应情况2,故时间复杂度为T(n)=O(n1log0+1n)=O(nlogn)
4.计算T(n)=2T(2n)+n2的时间复杂度。
有c=log22=1,k=2,对应情况3,故时间复杂度为:T(n)=O(n2)
5.计算T(n)=3T(4n)+nlogn的时间复杂度.
有0<c=log43<1,k=1对应情况3的不重,n后面跟着的也要算进时间复杂度。所以时间复杂度为:T(n)=O(nlogn)
一些其它的时间复杂度计算问题
1.【NOIP2015】计算T(n)=T(n−1)+n的时间复杂度。
每一次都要计算n,总共递归n次,故时间复杂度为O(n2).
2.【NOIP2013】

首先第n项的时间复杂度为总共递归的次数。此时,设g(i)表示第i层递归的次数。
则有:g(i)=g(i−1)+g(i−2),同样对应了斐波那契数列。故有时间复杂度:T(n)=g(n)=f(n)=O(f(n))