zoukankan      html  css  js  c++  java
  • 第四课、程序灵魂的审判

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

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

  • 相关阅读:
    对结构化学习(structured learning)的理解
    【语义分割】large kernel matters中GCN模块的pytorch实现
    【C++】使用find函数快速定位元素
    Python通过Openpyxl包汇总表格,效率提升100倍
    conda环境管理
    C++解决大数组问题
    C++ 赋值运算符重载
    [Android] java代码无错误,但跳转失败
    android 如何从activity跳转到另一个activity下指定的fragment
    绝命毒师口语精析(6)
  • 原文地址:https://www.cnblogs.com/gui-lin/p/6798229.html
Copyright © 2011-2022 走看看