1. 算法效率的度量
算法执行的时间需通过依据该算法编制程序在计算机上运行时所消耗的时间来度量。而度量一个程序执行时间通常有两种方法。
(1)事后统计法
因为计算机内部都有计时功能,有的甚至精确到毫秒级,不同算法的程序可通过一组或若干组相同的统计数据以辨别优劣。但这种方法有两个缺陷:一是必须先运行依据算法编制的程序;二是所得时间的统计量依赖于计算机的硬件、软件等环境因素,有时容易掩盖算法本身优劣。
(2)事前分析法
一个用高级程序语言编写的程序在计算机上运行时所消耗的是阿金取决于以下因素:
①依据算法选用何种策略
②问题的规模,例如:求100以内还是1000以内的素数
③书写程序的语言,对于同一个算法,实现语言的级别越高,执行效率越低;
④编译程序所产生的机器代码质量;
⑤机器执行指令的速度。
显然,同一个算法用不同语言或者不同编译程序编译或者不同的计算机上运行,效率都不相同。这表明使用绝对的时间单位衡量算法的效率是不合适的。撇开与计算机硬件、软件相关的因素,可以认为一个特定算法“运行工作量”的大小,是依赖于问题的规模,或者说是问题规模的函数。
2. 基本操作的原操作
一个算法是由控制结构(顺序、分支和循环3种)和原操作(指固有数据类型的操作),则算法时间取决于两者的综合效果。为了比较同一问题的不同算法,通常的做法是,从算法中选取一种对于所有研究问题来说是基本操作的原操作,以该基本操作的重复执行次数作为算法的时间度量。
显然基本操作的原操作应是其重复执行次数和算法的执行时间成正比的原操作,多数情况下它是最深循环内的语句中的原操作,它执行次数和包含它的语句频度相同。语句的频度指的是该语句重复执行的次数。
3