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

  • 相关阅读:
    每天一个linux命令---mount
    java反射机制
    每天一个linux命令---netstat
    oracle调试存储过程
    ora-14400插入的分区关键字未映射到任何分区---oracle数据库表过期问题
    Java类加载
    nginx学习笔记
    web工程spring+ibatis单元测试
    每天一个Linux命令---tcpdump
    每天一个linux命令---导出到文件
  • 原文地址:https://www.cnblogs.com/gui-lin/p/6798229.html
Copyright © 2011-2022 走看看