主定理的定义
『在算法分析中,主定理(英语:master theorem)提供了用渐近符号(大O符号)表示许多由分治法得到的递推关系式的方法。这种方法最初由Jon Bentlery,Dorothea Haken和James B. Saxe在1980年提出,在那里被描述为解决这种递推的“天下无敌法”(master method)。此方法经由经典算法教科书Cormen,Leiserson,Rivest和Stein的《算法导论》 (introduction to algorithm) 推广而为人熟知。』(参考自百度百科)
主定理的公式
image.png对于复杂代码我们可以通过分析代码的逻辑得到地推公式,拿以下公式为例:
例1:
我们可以得到:
满足公式1,所以复杂度为
例2:
满足公式2,所以复杂度为
其中,k=0!
例3:
满足公式3,所以复杂度为
总结规律
得到和的值后与比较大的就是其复杂度,如果相等须按照公式2推到一般都是
常见算法的复杂度
image.png对于时间复杂度的分析可以用两种方法:
- 简单:看for循环
- 分治:master定理
- 动态规划:递归树方法
接下来介绍下树分析的方法
斐波那契时间复杂度和空间复杂度
时间复杂度:
image.png
求解F(n),必须先计算F(n-1)和F(n-2),计算F(n-1)和F(n-2),又必须先计算F(n-3)和F(n-4)。。。。。。以此类推,直至必须先计算F(1)和F(0),然后逆推得到F(n-1)和F(n-2)的结果,从而得到F(n)要计算很多重复的值,在时间上造成了很大的浪费,算法的时间复杂度随着N的增大呈现指数增长,时间的复杂度为
空间复杂度:
如果不使用数组缓存中间的计算结果即完全递归,复杂度为
如果使用数组缓存中间的计算结果,需要存储每个f(n)的值所以需要一个长度为n的数组,所以复杂度为
如果使用递推公式的循环,所以复杂度为
网友评论