主定理

主定理适用于递归复杂度计算。

标准版:

a,ba,b 是常数,f(n)f(n) 为额外附加值函数 T(n)T(n) 为递归式 T(n)=aT(nb)+f(n) (a>0,b>1)T(n)=aT(\frac{n}{b})+f(n)\ (a>0,b>1),就有:

  1. f(n)=O(n(logba)ϵ)f(n)=\mathcal{O}(n^{(\log_ba)-\epsilon}) 其中 ϵ>0\epsilon>0 是一个常数(相当于 logba>f(n)\log_ba>f(n)),则有 T(n)=Θ(nlogba)T(n)=\Theta(n^{\log_ba})
  2. f(n)=Θ(nlogba)f(n)=\Theta(n^{\log_ba}),则有 T(n)=Θ(nlogbalogn)T(n)=\Theta(n^{\log_ba}\log n)
  3. f(n)=Ω(n(logba)+ϵ)f(n)=\Omega(n^{(\log_ba)+\epsilon}) 其中 ϵ>0\epsilon>0 是一个常数(相当于 logba<f(n)\log_ba<f(n)),且对于一个常数 c<1c<1 和所有足够大的 nnaf(nb)cf(n)af(\frac{n}{b})\leq cf(n)(这一条件在这里可以暂时忽略不看,但在证明时起到至关重要的作用),则有 T(n)=Θ(f(n))T(n)=\Theta(f(n)).
  4. f(n)=Θ(nlogbalogkn)f(n)=\Theta(n^{\log_ba}\log^kn) 其中 k1k\geq1 是一个常数,则有 T(n)=Θ(nlogbalogk+1n)T(n)=\Theta(n^{\log_ba}\log^{k+1}n)

举例:

例一:T(n)=4T(n2)+nT(n)=4T(\frac{n}{2})+n,此时 a=4,b=2,ϵ=1a=4,b=2,\epsilon=1,那么 logba=log24=2,f(n)=O(nlogbaϵ)=O(n21)\log_ba=\log_24=2,f(n)=\mathcal{O}(n^{\log_ba-\epsilon})=\mathcal{O}(n^{2-1})f(n)f(n) 成立,所以 T(n)=Θ(nlogba)=Θ(n2)T(n)=\Theta(n^{\log_ba})=\Theta(n^2)

例二:T(n)=2T(n2)+nT(n)=2T(\frac{n}{2})+n,此时 a=2,b=2a=2,b=2,那么 logba=log22=1,f(n)=Θ(nlogba)=Θ(n)\log_ba=\log_22=1,f(n)=\Theta(n^{\log_ba})=\Theta(n)f(n)f(n) 成立,所以 T(n)=Θ(nlogbalogn)=Θ(nlogn)T(n)=\Theta(n^{\log_ba}\log n)=\Theta(n\log n)

例三:T(n)=4T(n2)+n3T(n)=4T(\frac{n}{2})+n^3,此时 a=4,b=2,ϵ=1a=4,b=2,\epsilon=1,那么 logba=log24=2,f(n)=Ω(nlogba+ϵ)=Ω(n2+1)\log_ba=\log_24=2,f(n)=\Omega(n^{\log_ba+\epsilon})=\Omega(n^{2+1}),对于 c=23c=\frac{2}{3} 和够大的 nn(af(nb)=4(n2)3=4(n38)=n32)(cf(n)=2n33)\left(af(\frac{n}{b})=4(\frac{n}{2})^3=4(\frac{n^3}{8})=\frac{n^3}{2}\right)\leq \left(cf(n)=\frac{2n^3}{3}\right)f(n)f(n) 成立,所以 T(n)=Θ(f(n))=Θ(n3)T(n)=\Theta(f(n))=\Theta(n^3)

例四:T(n)=2T(n2)+nlognT(n)=2T(\frac{n}{2})+n\log n,此时 a=2,b=2,k=1a=2,b=2,k=1,那么 logba=log22=1,f(n)=Θ(nlogbalogkn)=Θ(nlogn)\log_ba=\log_22=1,f(n)=\Theta(n^{\log_ba}\log^kn)=\Theta(n\log n)f(n)f(n) 成立,所以 T(n)=Θ(nlogbalogk+1n)=Θ(nlog2n)T(n)=\Theta(n^{\log_ba}\log^{k+1}n)=\Theta(n\log^2 n)

简化版

将一个规模为 nn 的问题,通过分治得到 aa 个规模为 nb\dfrac{n}{b} 的子问题,每次递归进行的计算为 O(nd)O(n^d),满足如下形式:

T(n)=aT(nb)+O(nd)T(n)=a\cdot T(\dfrac{n}{b})+O(n^d)

T(n)T(n) 满足:

T(n)={O(nd)d>logbaO(ndlogn)d=logbaO(nlogba)d<logbaT(n)=\begin{cases} O(n^d) & d> \log_b a\\ O(n^d\log n) & d= \log_b a\\ O(n^{\log_b a}) & d<\log_b a\\ \end{cases}


例如:

有递归式:

T(n)={O(1)n=12T(n2)+notherwise.T(n)=\begin{cases} O(1) & n=1\\ 2T(\dfrac{n}{2})+n & \text{otherwise.} \end{cases}

则有 a=2,b=2,d=1a=2,b=2,d=1

1=log22T(n)=O(n1logn)=O(nlogn)\begin{array}{ll} \because 1=\log_22\\ \therefore T(n)=O(n^1\log n)=O(n\log n) \end{array}


另一例子:

T(n)={O(1)n=12T(n2)+1otherwise.T(n)=\begin{cases} O(1) & n=1\\ 2T(\dfrac{n}{2})+1 & \text{otherwise.} \end{cases}

则有 a=2,b=2,d=0a=2,b=2,d=0

0<log22T(n)=O(nlog22)=O(n)\begin{array}{ll} \because 0<\log_22\\ \therefore T(n)=O(n^{\log_2 2})=O(n) \end{array}


例三:

T(n)={O(1)n=12T(n2)+nlognotherwise.T(n)=\begin{cases} O(1) & n=1\\ 2T(\dfrac{n}{2})+n\log n & \text{otherwise.} \end{cases}

则有 a=2,b=2,d=1a=2,b=2,d=1

1=log22T(n)=O(n1lognlogn)=O(nlog2n)\begin{array}{ll} \because 1=\log_22\\ \therefore T(n)=O(n^1\log n\cdot \log n)=O(n\log^2 n) \end{array}


主定理
https://blog.makerlife.top/post/master-theorem/
作者
Makerlife
发布于
2023年9月10日
许可协议