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

      常见的时间复杂度如下:

    常见的时间复杂度的比较:

    实例分析:

    从上图的分析中,最坏的情况更具有现实的意义。

    当算法在最坏的情况下仍能满足需求时,可以推断,算法的最好情况和平均情况都满足要求。

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

    算法的空间复杂度:

    空间复杂度示例:

    空间与时间的策略:

      多数情况下,算法的时间复杂度更令人关注

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

      同理,也可以增加算法的耗时降低空间复杂度

     空间换时间的例子:

     1 /*
     2     问题: 
     3     在一个由自然数1-1000中某些数字所组成的数组中,每个数字可能出现零次或者多次。
     4     设计一个算法,找出出现次数最多的数字。
     5 */
     6 
     7 #include <iostream>
     8 
     9 using namespace std;
    10 
    11 void search(int a[], int len)     // O(n)
    12 {
    13     int sp[1000] = {0};
    14     int max = 0;
    15     
    16     for(int i=0; i<len; i++)
    17     {
    18         sp[a[i] - 1]++;
    19     }
    20     
    21     for(int i=0; i<1000; i++)
    22     {
    23         if( max < sp[i] )
    24         {
    25             max = sp[i];
    26         }
    27     }
    28     
    29     for(int i=0; i<1000; i++)
    30     {
    31         if( max == sp[i] )
    32         {
    33             cout << i + 1 << endl;
    34         }
    35     }
    36 }
    37 
    38 int main(int argc, char* argv[])
    39 {
    40     int a[] = {1, 1, 3, 4, 5, 6, 6, 6, 3, 3};
    41     
    42     search(a, sizeof(a)/sizeof(*a));
    43 
    44     return 0;
    45 }

    上面的例子中时间复杂度为O(n)。

    当两个算法的大O表示法相同时,是否意味着两个算法的效率完全相同呢?

      只能说明它们的运行效率时同一个级别的,不能说它们的效率完全相同。

    总结:

      一般而言,工程中使用的算法,时间复杂度不超过O(n*n*n)。
      算法分析与设计时,重点考虑最坏情况下的时间复杂度

      数据结构课程中重点关注算法的时间复杂度

      大O表示法同样适用于算法的空间复杂度

      空间换时间是工程开发中常用的策略

  • 相关阅读:
    Firefly 3288又一次制作android和lubuntu双系统固件
    想做一个完美的健身训练计划,你须要知道什么?
    【LeetCode-面试算法经典-Java实现】【075-Sort Colors (颜色排序)】
    每天进步一点点——Ganglia的Python扩展模块开发
    Unity3D-rigidBody.velocity
    泛型初识
    HDOJ 5418 Victor and World 状压DP
    UIPopoverController具体解释
    怎样提升站点的性能?
    PHP操作MongoDB数据库具体样例介绍(增、删、改、查) (六)
  • 原文地址:https://www.cnblogs.com/wanmeishenghuo/p/9495977.html
Copyright © 2011-2022 走看看