如何比较两种算法解决问题的效率
- 事后统计方法
就是用源程序分别实现这两种算法,然后输入适当的数据运行,测算两个程序各自的开销。 - 事前分析估算的方法
我们称之为渐进算法分析(asymptotic algorithm analysis),简称算法分析(algorithm analysis)。它可以估算出当问题规模变大时,一种算法及实现它的程序的效率和开销。
运行时间
通常情况下,程序的运行时间取决于下列因素:
- 算法所采用的策略
- 问题规模
- 书写程序采用的语言
- 机器速度
仅需考虑算法策略和问题规模对时间的影响情况,在这种情况下,以算法中基本操作(basic operation)数衡量算法的时间性能。一般情况下,执行次数是问题规模的函数。
- 规模:一般是指输入量的数目。
- 基本操作:一个“基本操作”必须具有这样的性质:完成该操作所需时间与操作数的具体取值无关。
时间代价
渐近分析
渐近分析是指当输入规模n→∞时, 对算法运行时间函数T(n)的渐近性态的估算, 它提供了对算法资源开销进行评估的简单化的模型。
上限
算法运行时间的**上限(upper bound)**用来表示该算法可能有的最高增长率。增长率的上限用符号O表示, 称为大O表示法(big-Oh notation)。
下限
算法的下限用符号Ω表示, 称为大Ω表示法。
Θ表示法
大O表示法和Ω表示法使我们能够描述某一算法的上限和下限。当上、下限相等时,我们就可以用Θ表示法。
简化法则
二分检索法
-
二分法的下一步工作是检查k可能存在的那部分元素中的中间位置。该位置上的元素值使我们又能缩小一半的检索范围。
-
重复这个过程,就能找到指定的元素(或确定它不在数组中)。
-
该过程至多需要重复 l o g 2 n + 1 log_2^{n+1} log2n+1次。