第四课、程序灵魂的审判

一、程序的性价比(效率)的审判方法

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的增大,它会越来越优于另一算法,或者越来越差于另一算法 

原文地址:https://www.cnblogs.com/gui-lin/p/6798229.html