主定理(时间复杂度计算方式)

Master Theorem

用途

一种用于计算递归时间复杂度的定理。
比如对于一个时间复杂度递推式:T(n)=T(n/2)+O(n),
可以浅显地看出它的复杂度为O(nlog2n),因为我们这样子的递归写了太多次了。
但我们可以看到T(n)=4T(n/2)+n,
它的复杂度是多少?也是O(nlog2n)
当在问出这种问题时,我们就会有点束手无策。
所以我们就需要一个定理来把这种问题解决。

定理

对于一个时间复杂度递推式的一般式T(n)=aT(n/b)+O(nd):
T(n)={O(nd)d>logbaO(ndlog2n)d=logbaO(nlogba)d<logba

应用

回到一开始的例子:T(n)=4T(n/2)+n
这时a=4,b=2,d=1,
所以logba=2>d,则T(n)=O(nlogba)=O(n2).
这个故事告诉我们,
像二分这样的形式不要在里面套太大的常数,
不然真的会爆炸。

我们在给出一个例子:T(n)=4T(n/2)+n2
这时a=4,b=2,d=2,
所以logba=2=d,则T(n)=O(ndlog2n)=O(n2log2n).

还有一种:T(n)=4T(n/2)+n3
这时a=4,b=2,d=3,
所以logba=2<d,则T(n)=O(nd)=O(n3).

总的来说就是谁大跟谁,等大加log2n.

THE END.

posted @   Ian8877  阅读(334)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示