Cristiano算法分析基础

一、算法的时间复杂性分析
1、算法的时间复杂性分析是一种事前分析估算的方法,它是对算法所消耗资源的一种渐进分析的方法。所谓渐进分析,是指忽略具体机器、编程语言和编译器的影响,只关注在输入规模增大时算法运行时间的增长效率
2、输入规模——指输入量的多少,运行算法所需要的时间T是输入规模n倍的函数,记作T(n)
3、基本语句——执行次数与整个算法的执行次数成正比的语句
1.1 算法的渐进分析
定义:若存在两个正的常数c和n0,对于任意n>=n0,都有T(n)<=c*f(n),则称T(n) = O(f(n))(或称算法在O(f(n))中)
1、大O符号用来描述增长率的上限,表示T(n)的增长最多像f(n)增长的那样快,这个上限的阶越低,结果就越有价值
2、 O(f(n))实际上是一个函数集合,这个集合具有同样的增长趋势,T(n)只是集合中的一个函数
1.2 最好、最坏和平均情况
平均情况的时间复杂度和最坏情况同数量级
1.3 非递归算法的时间复杂性分析
关键——建立一个代表算法运行时间的求和表达式,然后用渐进符号表示这个求和表达式
一般步骤:
①确定问题的输入规模
②找出算法中的基本语句——一般是最内层循环的循环体
③检查基本语句的执行次数是否只依赖于输入规模——分别研究最好、最坏、和平均情况的效率
④建立基本语句执行次数的求和表达式
⑤用渐进符号表示这个求和表达式
1.4 递归算法的时间复杂性分析
扩展递归——扩展就是将递推关系式中等式右边的项根据递推式进行替换
二、算法的空间复杂性分析
1、算法在运行过程中所需的存储空间包括:
(1)输入输出数据占用的时间——取决于问题本身,与算法无关
(2)算法本身占用的空间——大小一般固定
(3)执行算法需要的辅助空间——研究算法空间复杂性的决定性因素:S(n) = O(f(n))

猜你喜欢

转载自blog.csdn.net/Cristiano_san/article/details/108441087