master\mathrm{master}定理求解范围

对于一些递归性时间复杂度,由于难以计算,我们需要使用Master\mathrm{Master}定理来进行求解。

例如,我们熟悉的分治算法,其递归式为:T(n)=2T(n2)+nT(n)=2T(\frac{n}{2})+n时间复杂度就是O(nlog2n)O(nlog_2n).因此,我们普遍的将时间复杂度问题形式化为:T(n)=aT(nb)+f(n)T(n)=aT(\frac{n}{b})+f(n)

对于对于此类我们,我们便可以使用master\mathrm{master}定理来进行求解了。

master\mathrm{master}定理的内容

对于递归的时间复杂度问题T(n)=aT(nb)+f(n)T(n)=aT(\frac{n}{b})+f(n)

我们令c=logbac=log_ba,再和f(n)f(n)的时间复杂度进行比较,可以分为三类情况。

我们可以令f(n)=O(nk)f(n)=O(n^k)或者O(nklog)O(n^klog)之类的。那么我们将cc和这里的kk进行比较。这样就可十分方便的去分类,还比较好记。

  • 1.当c>kc>k时,且T(n)=aT(nb)+f(nk)T(n)=aT(\frac{n}{b})+f(n^k),我们有:T(n)=O(nc)T(n)=O(n ^c)
  • 2.当c=kc=k时,且T(n)=aT(nb)+f(nklogpn)T(n)=aT(\frac{n}{b})+f(n^klog^{p}n),我们有:T(n)=O(nclogp+1n)T(n)=O(n^clog^{p+1}n)
  • 3.当c<kc<k时,且T(n)=aT(nb)+f(n)T(n)=aT(\frac{n}{b})+f(n),.我们有:T(n)=O(nk)T(n)=O(n^k)

显然在初赛上,我们不需要知道如何证明时间复杂度,只需要能够计算出对应的时间复杂度,选对对应的选择题即可。所以你可以这么记忆:如果cckk不相等,时间复杂度为O(nmax(c,k))O(n^{\max(c,k)}),否则时间复杂度为O(nclogpn)O(n^clog^pn)O(nklogp+1n)O(n^klog^{p+1}n).

注意对于情况3:若nkn^k还跟了一些东西,这个东西也要算进时间复杂度.

master\mathrm{master}定理应用

1.【NOIP2016】计算T(n)=2T(n4)+nT(n)=2T(\frac{n}{4})+\sqrt n的时间复杂度。

我们有c=logba=12,k=12c=log_ba=\frac{1}{2},k=\frac{1}{2},此时对应情况2,p=0p=0.所以有:
T(n)=O(nn2log1n)=O(lognn)T(n)=O(n^{\frac{n}{2}}log^1n)=O(logn\sqrt n)

2.计算T(n)=8T(n2)+n2T(n)=8T(\frac{n}{2})+n^2的时间复杂度.

c=log28=3,k=2.c=log_28=3,k=2.对应情况1,故时间复杂度为T(n)=O(n3)T(n)=O(n^3).

3.计算T(n)=2T(T2)+n.T(n)=2T(\frac{T}{2})+n.的时间复杂度。

c=log22=1,k=1c=log_22=1,k=1,对应情况2,故时间复杂度为T(n)=O(n1log0+1n)=O(nlogn)T(n)=O(n^1log^{0+1}n)=O(nlogn)

4.计算T(n)=2T(n2)+n2T(n)=2T(\frac{n}{2})+n^2的时间复杂度。

c=log22=1,k=2c=log_22=1,k=2,对应情况3,故时间复杂度为:T(n)=O(n2)T(n)=O(n^2)

5.计算T(n)=3T(n4)+nlognT(n)=3T(\frac{n}{4})+nlogn的时间复杂度.

0<c=log43<1,k=10<c=log_43<1,k=1对应情况3的不重,nn后面跟着的也要算进时间复杂度。所以时间复杂度为:T(n)=O(nlogn)T(n)=O(nlogn)

一些其它的时间复杂度计算问题

1.【NOIP2015】计算T(n)=T(n1)+nT(n)=T(n-1)+n的时间复杂度。

每一次都要计算nn,总共递归nn次,故时间复杂度为O(n2).O(n^2).

2.【NOIP2013】
NOIP/CSP初赛主定理(master定理)学习笔记:递归复杂度求解
首先第nn项的时间复杂度为总共递归的次数。此时,设g(i)g(i)表示第ii层递归的次数。

则有:g(i)=g(i1)+g(i2)g(i)=g(i-1)+g(i-2),同样对应了斐波那契数列。故有时间复杂度:T(n)=g(n)=f(n)=O(f(n))T(n)=g(n)=f(n)=O(f(n))

相关文章:

  • 2021-05-23
  • 2021-11-12
  • 2022-02-05
  • 2022-01-03
  • 2022-12-23
  • 2021-09-06
  • 2021-08-16
  • 2022-12-23
猜你喜欢
  • 2021-11-28
  • 2022-12-23
  • 2021-10-06
  • 2021-11-01
  • 2022-12-23
  • 2022-12-23
  • 2021-12-05
相关资源
相似解决方案