主定理(master theorem)学习小记

1 篇文章 0 订阅
1 篇文章 0 订阅

前言

这是分析复杂度的一个玩意儿,东西不多,原本只要死记一下就好了,但是考虑到我不太好的记忆力,所以还是解析一遍比较好

正文

主定理是用来分析 T ( n ) = a T ( n b ) + f ( n ) T(n)=aT(\frac nb)+f(n) T(n)=aT(bn)+f(n)满足 a , b ≥ 1 a,b\ge1 a,b1的复杂度的
其实感觉也挺好分析的
考虑 T ( n ) T(n) T(n)的瓶颈问题
假设 a T ( n b ) > > f ( n ) aT(\frac nb)>>f(n) aT(bn)>>f(n)
那么 T ( 1 ) = O ( 1 ) , T ( n ) = a T ( n b ) = a l o g b n = Θ ( n l o g b a ) T(1)=\mathcal O(1),T(n)=aT(\frac nb)=a^{log_bn}=\Theta(n^{log_ba}) T(1)=O(1),T(n)=aT(bn)=alogbn=Θ(nlogba)
因为要满足 a T ( n b ) > > f ( n ) aT(\frac nb)>>f(n) aT(bn)>>f(n),所以此时的条件为 f ( n ) = O ( n l o g b a − ϵ ) , ϵ > 0 f(n)=\mathcal O(n^{log_ba-\epsilon}),\epsilon>0 f(n)=O(nlogbaϵ),ϵ>0
即当 f ( n ) = O ( n l o g b a − ϵ ) , ϵ > 0 f(n)=\mathcal O(n^{log_ba-\epsilon}),\epsilon>0 f(n)=O(nlogbaϵ),ϵ>0时, T ( n ) = Θ ( n l o g b a ) T(n)=\Theta(n^{log_ba}) T(n)=Θ(nlogba)

假设 a T ( n b ) < < f ( n ) aT(\frac nb)<<f(n) aT(bn)<<f(n)
因为前者的 n n n会变小,使得 f ( x ) f(x) f(x)差的非常快,所以显然瓶颈在后者
所以当 f ( n ) = O ( n l o g b a + ϵ ) , ϵ > 0 f(n)=\mathcal O(n^{log_ba+\epsilon}),\epsilon>0 f(n)=O(nlogba+ϵ),ϵ>0时, T ( n ) = Θ ( f ( n ) ) T(n)=\Theta(f(n)) T(n)=Θ(f(n))

然后我们考虑一下 f ( n ) = O ( n l o g b a ) f(n)=\mathcal O(n^{log_ba}) f(n)=O(nlogba)的情况
那么 T ( 1 ) = O ( 1 ) , T ( n ) = a T ( n b ) + O ( n l o g b a ) T(1)=\mathcal O(1),T(n)=aT(\frac nb)+O(n^{log_ba}) T(1)=O(1),T(n)=aT(bn)+O(nlogba)
这个东西列出来其实不好算,但是我们可以脑补一下这个递归大概有logn层,也许会想到假如 a 、 b a、b ab的数值极端怎么办,但其实后面的 n l o g b a n^{log_ba} nlogba已经保证了结论的正确性,大雾
所以最后的复杂度是 Θ ( f ( n ) l o g n ) \Theta(f(n)logn) Θ(f(n)logn)
在实际写的时候可以设 f ( n ) = O ( n l o g b a l o g k n ) f(n)=\mathcal O(n^{log_ba}log^kn) f(n)=O(nlogbalogkn),那么 T ( n ) = Θ ( n l o g b a l o g k + 1 n ) T(n)=\Theta(n^{log_ba}log^{k+1}n) T(n)=Θ(nlogbalogk+1n)

总结

对于 T ( n ) = a T ( n b ) + f ( n ) T(n)=aT(\frac nb)+f(n) T(n)=aT(bn)+f(n),满足 a , b ≥ 1 a,b\ge1 a,b1
T ( n ) = { Θ ( n l o g b a ) f ( n ) = O ( n l o g b a − ϵ ) , ϵ > 0 Θ ( n l o g b a l o g k + 1 n ) f ( n ) = O ( n l o g b a l o g k n ) Θ ( f ( n ) ) f ( n ) = O ( n l o g b a + ϵ ) , ϵ > 0 T(n)=\begin{cases} \Theta(n^{log_ba})&f(n)=\mathcal O(n^{log_ba-\epsilon}),\epsilon>0\\ \Theta(n^{log_ba}log^{k+1}n)&f(n)=\mathcal O(n^{log_ba}log^kn)\\ \Theta(f(n))&f(n)=\mathcal O(n^{log_ba+\epsilon}),\epsilon>0 \end{cases} T(n)=Θ(nlogba)Θ(nlogbalogk+1n)Θ(f(n))f(n)=O(nlogbaϵ),ϵ>0f(n)=O(nlogbalogkn)f(n)=O(nlogba+ϵ),ϵ>0

后记

本篇文章一些符号不怎么严谨,仅能表意,主要是写一个推的方法,如果有什么好的建议欢迎在评论提出
另外如果有更好的理解方式,也欢迎与我交流
2019.10.17:之前有一些错误进行了改正

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值