程序的效率

问题: 如果两个算法都符合功能性需求,那工程中最关心的其他特性是什么?如何比较评判? 性价比(效率)是工程中最关注的的算法附加特性! 算法效率的度量 1.事后统计法:比较不同算法对同一组输入数据的处理时间。 缺陷:(1)为了获得不同算法必须编写相应程序 (2)运行时间严重依赖硬件以及运行时的环境因素 (3)算法的测试数据选取困难 2.事前分析估算:依据统计的方法对数据进行估算 影响算法效率的主要因素: (1)算法采用的策略和方法 (2)问题的输入规模 (3)编译器所产生的代码 (4)计算机执行速度

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
}

程序效率的关键部分为n^2,随着n的不断增大,操作的数量很大程度的增大,不同的程序在这时候效率的差距就体现出来了。 总结: 事前分析估算法通过操作数量来判断程序效率。 判断一个算法效率是只需关注最高阶就能得出结论 如:2n+1 与 n^2+1 只需比较 n与n^2。