算法基础-01.算法复杂度的计算-主定理

主定理的定义

『在算法分析中,主定理(英语: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

对于时间复杂度的分析可以用两种方法:

  1. 简单:看for循环
  2. 分治:master定理
  3. 动态规划:递归树方法

接下来介绍下树分析的方法

斐波那契时间复杂度和空间复杂度


时间复杂度:


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的数组,所以复杂度为
如果使用递推公式的循环,所以复杂度为

reference

https://zhuanlan.zhihu.com/p/53286463

你可能感兴趣的:(算法基础-01.算法复杂度的计算-主定理)