算法的时间复杂度、空间复杂度

时间复杂度和空间复杂度是度量算法效率的常用指标

时间度量

  1. 事后统计,不常用
  2. 事前统计影响因素:
    算法策略 问题规模 程序语言 代码质量 机器执行指令的速度

撇开软硬件的影响,算法运行工作量的大小只依赖于问题的规模(通常用整数n表示)
一个算法是由控制结构(顺序,分支,循环三种)和原操作(指固有数据类型的操作)构成,则算法时间取决于两者的综合效果。

为了便于比较同一问题的不同算法,通常从算法中选取一种对于所研究问题来说是基本操作的原操作,以该基本操作重复执行的次数作为算法的时间度量。
算法的时间复杂度记做 T(n)=O(f(n))
它表示随问题规模n的增大,算法执行时间的增长率和 f(n) 的增长率相同

原操作的执行次数与包含他的语句的执行次数相同

  • {++x; s = 0; }
  • for( i = 1 ; i <= n ; ++i ) { ++x ; s += x;}
  • for( j = 1 ; j <= n ; ++j )
    for( k = 1 ; k <= n ; ++k ) { ++x ; s += x;}

含基本操作“x+1”的语句的频度分别为1,n和n^2,所以这三个程序段的时间复杂度分别为O(1)、O(n)、O( n^2 ) ,分别称为常量阶,线性阶和平方阶。

有些情况下,算法中基本操作重复执行的次数还随问题的输入数据集不同而不同。例如在冒泡排序算法中,“交换序列中相邻两个整数”这个基本操作执行次数可能为0,或者O(n^2)。这类算法时间复杂度有两种表示方法:一是考虑所有情况下时间复杂度的期望值(麻烦,而且出现概率难确定,所以不常用);另一种是以最坏的情况下的时间复杂度作为该算法的时间复杂度。

空间复杂度

S(n)=O(f(n))
存储空间,工作空间(计算等),辅助存储空间等
空间复杂度感觉不怎么常用。。。不研究了。。。。

参考 严蔚敏,吴伟民编著的《数据结构》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章