一、程序的性价比(效率)的审判方法
1、事后统计法:比较不同算法对同一组输入数据的运行处理时间
缺陷
(1)、为了获得不同算法的运行时间必须编写相应的代码
(2)、运行时间严重依赖硬件以及运行时的环境因素(因此不太准确)
(3)、算法的测试数据选取相当困难
2、事前分析估算:依据统计的方法对算法效率进行估算
影响算法的主要原因
(1)、算法采用的策略和方法(最重要)
(2)、问题的输入规模(也很重要)
(3)、编译器所产生的代码(如C++比JAVA高)
(4)、计算机执行速度
二、算法效率的度量举例
1、算法效率的简单估算一
2、算法效率的简单估算二
3、算法效率的简单估算三
int func(int a[], int len) // ==> (n*n + 2) { int ret = 0; // 1 for(int i=0; i<len; i++) { for(int j=0; j<len; j++) { ret += a[i] * a[j]; // n * n } } return ret; // 1 }
三、启示
(1)、程序效率联系中的关键部分的操作数量为n*n
(2)、三种求和算法中的关键部分的操作数量分别为2n、n和1
(3)、随着问题规模n的增大,它们的操作数量的差异会越来越大,因此实际算法在效率上的差异也会变得非常明显
算法操作数量的对比一
结论:
算法操作数量的对比二
结论:
算法操作数量的对比三
结论:
四、小结
(1)、算法的度量有事后统计法和事前分析估算法
(2)、事后统计法不容易准确度量算法的执行效率
(3)、事前分析估算法通过操作数量度量算法效率
(4)、判断一个算法效率时只需要关注最高阶项就可以得出结论
(5)、某个算法,随着问题规模n的增大,它会越来越优于另一算法,或者越来越差于另一算法