zoukankan      html  css  js  c++  java
  • 第六课、算法效率的度量

    一、常见的时间复杂度

    常见时间复杂度的比较

    二、算法分析

    定义一个数组

    此算法最好的情况时执行一次

    而最坏的情况却要执行n次

    注意:数据结构课程中,在没有特殊说明时,所分析算法的时间复杂度都是指最坏时间复杂度

    三、算法的空间复杂度(space complexity)

    (1)、定义:S(n) = S(f(n))

    n为算法的问题规模

    f(n)为空间使用函数,与n相关

    注:推导时间复杂度的方法同样适应空间复杂度

    如:当算法所需空间是常数时,空间复杂度为S(1)

    (2)、空间复杂度计算练习

    四、时间与空间算法策略

    (1)、多数情况下,算法的时间复杂度令人关注

    (2)、如果有必要,可以通过增加额外空间降低时间复杂度

    (3)、同理,也可以通过增加算法的耗时降低空间复杂度

    时间换空间的例子

    /*
        问题: 
        在一个由自然数1-1000中某些数字所组成的数组中,每个数字可能出现零次或者多次。
        设计一个算法,找出出现次数最多的数字。
    */
    
    #include <iostream>
    
    using namespace std;
    
    void search(int a[], int len)     //时间复杂度为 O(n)
    {
        int sp[1000] = {0};
        int max = 0;
        
        for(int i=0; i<len; i++)
        {
            sp[a[i] - 1]++;//将对应数字的总数按顺序存储起来,如将1的个数存在sp[0]的位置,将2的个数存在sp[1]的位置
        }
        
        for(int i=0; i<1000; i++)
        {
            if( max < sp[i] )
            {
                max = sp[i];
            }
        }
        
        for(int i=0; i<1000; i++)
        {
            if( max == sp[i] )
            {
                cout << i + 1 << endl;//打印出数量最多的数(不一定只有一个)
            }
        }
    }
    
    int main(int argc, char* argv[])
    {
        int a[] = {1, 1, 3, 4, 5, 6, 6, 6, 3, 3};
        
        search(a, sizeof(a)/sizeof(*a));
    
        return 0;
    }

    五、笔试题

    问:两个算法的大O表示法一样,是否意味着它们的算法效率完全一样?

    答:大O表示法完全相同只能说明它们属于同一级别的算法,并不能说明它们算法的执行效率完全一致

    六、小结

    (1)、一般而言,工程中使用的算法,时间复杂度不超过O(n^3)

    (2)、算法分析设计时,重点考虑最坏情况下的时间复杂度

    (3)、数据结构课程中重点关心算法的时间复杂度

    (4)、空间换时间是工程开发中常用的策略

  • 相关阅读:
    php中获取各种路径
    大型网站系统架构演化之路
    404、500、502等HTTP状态码介绍
    Linux 查看进程和删除进程
    mysql中FIND_IN_SET的使用方法
    PHP导出Excel 数字末尾变0或小数点解决办法
    PHP API接口测试小工具
    要慎用mysql的enum字段的原因
    mysql 导入&导出sql文件
    Linux下php安装memcache扩展
  • 原文地址:https://www.cnblogs.com/gui-lin/p/6803940.html
Copyright © 2011-2022 走看看