重谈主定理(master定理)及其证明
参考文章:
李卿. 递归算法分析中主定理的应用[J]. 黑龙江科技信息, 2011(29):97+207.
Thomas H.Cormen,Charles E.Leiserson,Ronald L.Rivest,Clifford Stein. 殷建平等译. 算法导论第三版 [M]. 北京:机械工业出版社,2013,55-58.
前言:
本篇文章与我的 博客园 同步更新。
在此之前,请先阅读 【洛谷日报#33】时空复杂度分析及master定理,其中关于时间复杂度表示的基础知识不再阐述。
引出:
现在考虑一个问题:假设某算法的计算时间表示为递归式:
求该算法的时间复杂度。
当给你抛出这么一个题型时,你怎么办?
凭经验和感觉蒙
小几率能蒙对,但你觉得这种题CCF会送你分吗?
递归进去
像这样递归进去:
每项都
即
这么做不是没有道理,但是如果
主定理(master定理)求解
主定理:
- 当
其中 是一个常数(相当于 ),则有 ; - 当
,则有 ; - 当
其中 是一个常数(相当于 ),且对于一个常数 和所有足够大的 有 (这一条件在这里可以暂时忽略不看,但在证明时起到至关重要的作用),则有 . - 当
其中 是一个常数,则有 ;
这么看着有点枯燥乏味的样子,不利于理解,但如果丢掉定理四的话(毕竟CSP/NOIp好像真的没考过定理四,其实可以发现定理二和定理四其实是同一种,便于萌新理解就分开了),主定理的定义可以直接写成:
(图一)
也就是
图一、算法导论和上面提过的论文没有提到过定理四,但是原来那篇日报(#33)有,对此我想说,洛谷日报真是太好了!导论不行!日报行!(老伏拉夫了
举例说明:
例一:
例二:
例三:
例四:
证明:
先声明:证明又长又臭,有亿点点难理解,学有余力的 dalao 可以来康康。
俗话说得好:“欲要证明master,就先画棵递归树”:
(图二)
关于图二的解释及证明:
对于第
对于第
对于
这么看,图二的递归树的总时间复杂度为
证明*:
根据上文这个
这个
- 当
其中 是一个常数,则有 ; - 当
时,则有 ; - 当
其中 是一个常数,且对于一个常数 和所有足够大的 有 ,则有 . - 当
其中 是一个常数,则有 ;
欸!有没有发现好像在哪见过!那是因为这是我从上文复制下来的(
证明关于g函数性质*:
性质 1:
将
然后根据等比数列求和公式化简
这里回想一下 (做到不忘初心牢记使命),它们是常数,所以式子中
性质 1 得证。
性质 2:
性质 1 和性质 2 操作一样,就是一直代入再一直化简,将
注意:这里重头戏来了!式子中的
性质 2 得证。
性质 3:
性质 3 是最特殊的,用
解释一下上面的式子,因为
接下来还是用等比数列求和公式化简:
你可能好奇这个等比数列求和是怎么化的,下面证明一下:
设
即
回到题目,由
而根据
所以
性质 3 得证。
性质 4:
老套路,将
和性质 2 一样:
性质 4 得证。
主定理总时间复杂度证明:
回到图二的总时间复杂度
当
当
当
当
主定理证毕。
后记 & 感谢名单:
在这篇文章证明的主定理只是对于 (主要还是懒。
我在查找资料的时候发现还有一种定理——Akra-Bazzi定理(打开要梯子)也是时间复杂度的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现