算法效率分析基础
算法分析是对一个算法需要多少计算时间和存储空间作定量的分析。
分析框架
输入规模度量
- 算法的时间效率和空间效率都用输入规模的函数进行度量。
- 对相同大小的输入实例具有相同的分析结果。
- 对于所有的算法,对于规模更大的输入都需要运行更长的时间。
- 经常使用一个输入规模n为参数的函数来研究算法的效率。
运行时间的度量单位
- 用算法的基本操作(算法中最重要的操作)的执行次数来度量算法的时间效率。
- 基本操作通常是算法最内层循环中最费时的操作。
- 算法运行时间的估计:
T ( n ) ≈ c o p C ( n ) T(n) ≈ copC(n) T(n)≈copC(n)
n是该算法的输入规模
cop是特定计算机上一个算法基本操作的执行时间
C(n)是该算法需要执行的基本操作的次数
算法的最优、最差和平均效率
- 最差效率是指在输入规模为n时,算法在最坏情况下的效率。
- 最优效率是指在输入规模为n时,算法在最优情况下的效率。
- 平均效率是指在“典型”或“随机”输入的情况下,算法具有的行为(效率)。
增长次数
- 小规模输入在运行时间上的差别不足以将高效的算法和低效的算法区分开来。
- 算法效率的主要指标是基本操作次数的增长次数。
- 为了对这些增长次数进行比较和归类,计算机科学家们使用了3种符号:
渐近符号:
O(读“O”):上界
Ω(读”omega”):下界
Θ(读”theta”):近似
存在正常数c,c1,c2和n0使得对所有n不小于n0有
更多渐近分析的符号
非紧上界记号 o o o
非紧下界记号 w w w
渐近符号的有用特性
当算法由两个连续执行部分组成时,该算法的整体效率由具有较大增长次数的那部分所决定。
基本的效率类型
常量( c ) < 对数( logn ) < log2n < 线性( n ) < nlogn < 平方( n2 ) <立方( n3 ) < 指数( 2n ) < 阶乘( n! )