前言

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

正文

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

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

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

总结

对于T(n)=aT(nb)+f(n)T(n)=aT(\frac nb)+f(n)T(n)=aT(bn​)+f(n),满足a,b≥1a,b\ge1a,b≥1
T(n)={Θ(nlogba)f(n)=O(nlogba−ϵ),ϵ>0Θ(nlogbalogk+1n)f(n)=O(nlogbalogkn)Θ(f(n))f(n)=O(nlogba+ϵ),ϵ>0T(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)=⎩⎪⎨⎪⎧​Θ(nlogb​a)Θ(nlogb​alogk+1n)Θ(f(n))​f(n)=O(nlogb​a−ϵ),ϵ>0f(n)=O(nlogb​alogkn)f(n)=O(nlogb​a+ϵ),ϵ>0​

后记

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

主定理(master theorem)学习小记相关推荐

  1. 主定理(Master Theorem) 及其应用

    主定理"Master Theorem" 一.主定理(Master Theorem) 二.应用举例 在分析算法的时候,我们经常需要分析递归算法的时间复杂度. 一.主定理(Master ...

  2. 主定理 Master Theorem

    分治法主定理 主定理的证明 假设有递归式: T(n)=aT(nb)+f(n)T(n) = aT(\frac{n}{b}) + f(n)T(n)=aT(bn​)+f(n) 证明: T(n)=aT(n/b ...

  3. 主定理(Master Theorem)

    主定理是分析分治算法时间复杂度很重要的一个定理. 我们之前对于一个递归类的代码进行时间复杂度分析,一般会采用递归树的方式,下面我们先介绍一下递归树的方式,理解之后,再引入主定理的相关内容. 分治的介绍 ...

  4. 【】02-07主定理

     定理2.6 主定理(Master Theorem)    递归树:

  5. 【算法设计zxd】第2章 主定理

    定理2.6 主定理(Master Theorem) 设a≥1, b>1为常数, f(n)为函数,T(n)为非负整数,且 T(n)=aT(n/b)+f(n) 证明: (1) (2) (3) 主定理 ...

  6. 离散数学及其应用学习笔记——主定理(Master Theorem)的证明

    先贴出两个初中数学公式 使用换根公式和对数倒数性质可以得出这样的结论: alogbn=nlogba a^{log_bn}=n^{log_ba} 等比数列求和公式: Sn=anq−a1q−1 S_n=\ ...

  7. 主定理(Master theorem)与Akra–Bazzi定理

    一.主定理(Master theorem) 主定理是算法分析中的一个重要结论,它主要用于求解基于分治思想设计的递归算法的渐进复杂度.该结论最初由Jon Bentley, Dorothea Haken, ...

  8. Master—Theorem 主定理的证明和使用

    引言? 在分析算法的时候,我们经常需要分析递归算法的时间复杂度.Master--Theorem 正是用于快速得出递归算法时间复杂度的方法. Master-Theorem 假设某个递归算法的时间复杂度递 ...

  9. 主定理(Master Theorem)与时间复杂度

    1. 问题 Karatsuba 大整数的快速乘积算法的运行时间(时间复杂度的递推关系式)为 T(n)=O(n)+4⋅T(n/2),求其最终的时间复杂度. 2. 主定理的内容 3. 分析 所以根据主定理 ...

最新文章

  1. 谷歌跟随微软加入云安全联盟 亚马逊依然游离
  2. Go程序性能分析pprof
  3. SpringAMQP--FanoutExchange
  4. 你真的会玩SQL吗?Case也疯狂
  5. 虚线 实现_redis跳跃表实现
  6. 目前微型计算机的内存储量一般是多大的,微型计算机内存容量的大小一般是指什么而言...
  7. 栈操作与栈帧 (转)
  8. PCD Lesson2:PCD文件的write
  9. matlab $r$n$m,维纳滤波器推导以及MATLAB代码(Wiener Filter)
  10. 全场景效能平台猪齿鱼 VS Jira
  11. PCI 总线及地址空间
  12. 配置 nginx server 出现nginx: [emerg] root directive is duplicate in /etc/nginx/server/blogs.conf:107...
  13. module java.base does not “opens java.lang“ to module spring.core
  14. 【外网不好用】可以尝试添加dns即可解决上不去外网的问题。
  15. 前端面试题精编2020(js、html、小程序、React、ES6、Vue、算法、全栈热门视频资源)持续更新
  16. SLF4J(六) - MDC/MDCAdapter是什么?
  17. Java: Java字面量、 变量和常量
  18. CSS(七) css列表样式(ul)
  19. 安全学习笔记0day,凯文·米特尼, 社会工程学
  20. 萤石网络在科创板过会:海康威视持股60%,独立性遭上市委关注

热门文章

  1. 古典密码学-古典密码破解方式
  2. Lambda表达式的省略模式【应用】
  3. 反射获取构造方法并运行的快速的方式
  4. Spring Boot整合@Cacheable注解使用
  5. MySQL常用存储引擎之Federated
  6. MySQL常用存储引擎之CSV
  7. 几个使用linux内核的系统,[科普] Linux 的内核与 Linux 系统之间的关系
  8. tableau示例超市数据在哪儿_超市运营分析 -- Tableau 实战
  9. InfluxDB基本使用说明
  10. python字典有什么用_在Python中使用范围作为字典键,我有什么选...