算法效率的度量方法
- 事后统计方法:这种方法主要是通过设计好的测试程序和数据,利用计算机计时器对不同的算法编制的程序的运行时间进行比较,从而确定算法效率的高低。
- 事后统计方法缺点:必须依据算法事先编制好的测试程序,通常需要花费大量时间和精力。
- 事前分析估算方法:在计算机程序编写前,依据统计方法对算法进行估算。
经过总结,高级语言编写的程序在计算机上运行时所消耗的时间取决于下列因素:
- 算法采用的策略,方案
- 编译产生的代码质量
- 问题的输入规模
- 机器执行指令的速度
由此可见,抛开计算机硬件、软件有关的因素,一个程序的运行时间依赖于算法的好坏和问题的输入规模。(问题的输入规模指输入量的多少)
第一种算法:
int n=100
private static int suanfa1(int n){ int sum=0; //执行一次 for (int i = 1; i <=n ; i++) { //执行n+1 sum+=i; //执行n次 } return sum; }
第二种算法:
private static int suanfa2(int n){ int sum=0; //执行1次 sum=(1+n)*(n/2); //执行1次 return sum; }
第一种算法执行了1+(n+1)+n=2n+2次
第二种算法执行了1+1=2次
如果我们把循环看做一个整体,忽略头尾判断的开销,那么这两个算法其实就是n和1的差距。
我们研究算法的复杂度,侧重的是研究算法随着输入规模扩大增长量的一个抽象,而不是精确地定位需要执行多少次,因为如果这样的话,我们就又得考虑回编译器优化等问题。在分析一个算法的运行时间时,重要的是把基本操作的数量和输入模式关联起来。