• 数据结构之


    数据结构之 - 时间复杂度/空间复杂度

    一)、复杂度:

    复杂度:又称渐进复杂度

    分类:1).时间复杂度。

    ​ 2).空间复杂度。

    时间复杂度:T(n) = O(f(n)), 表示代码的执行时间和代码的执行次数成正比关系。

    T(n): 代码的执行时间。

    f(n): 代码的执行次数。

    n: 数据规模。

    O: 代码的执行时间和数据规模增长的变化趋势。

    二)、时间复杂度分析:

    1)、只关注循环次数最多的一短代码

    T(n) = O(n)

     int cal(int n) {
       int sum = 0;
       int i = 1;
       for (; i <= n; ++i) {
         sum = sum + i;
       }
       return sum;
     }
    

    2)、加法法则,T(n) = O(max(f(n), g(n)))

    场景:多个循环: T(n) = O(mac(f(n) + g(n^2))) = O(n^2)

    int cal(int n) {
       int sum_1 = 0;
       int p = 1;
       for (; p < 100; ++p) {
         sum_1 = sum_1 + p;
       }
    
       int sum_2 = 0;
       int q = 1;
       for (; q < n; ++q) {
         sum_2 = sum_2 + q;
       }
     
       int sum_3 = 0;
       int i = 1;
       int j = 1;
       for (; i <= n; ++i) {
         j = 1; 
         for (; j <= n; ++j) {
           sum_3 = sum_3 +  i * j;
         }
       }
     
       return sum_1 + sum_2 + sum_3;
     }
    

    3)、乘法法则,O(f(n)) * O(g(n)) = O(f(n) * g(n))

    场景:嵌套循环: T(n) = O(f(n) * g(n))

    T(n) = O(f(n) * g(n^2)) = O(f(n * n^2)) = O(f(n^3))

    int cal(int n) {
       int ret = 0; 
       int i = 1;
       for (; i < n; ++i) {
         ret = ret + f(i);
       } 
     } 
     
     int f(int n) {
      int sum = 0;
      int i = 1;
      for (; i < n; ++i) {
        sum = sum + i;
      } 
      return sum;
     }
    

    三)、常见的时间复杂度实例

    O(1)< O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n)

    O(1):

    只要算法中不存在循环,递归,即使有成千上万行代码,时间复杂度也是O(1).

    O(logn): 等比数列。

    2^0 2^1 2^3 ..... 2^x = n, x = logn

    O(nlogn):

    循环中嵌套着logn的循环

    四)、当代码复杂度由两个数据规模决定时

    O(m+m) = O(f(m)) + O(g(n))

    O(m*n) = O(f(m)) * O(g(n))

    空间复杂度

    经常遇到的时间复杂度一般为O(n) 和 O(n^2)

    金麟岂能忍一世平凡 飞上了青天 天下还依然
  • 相关阅读:
    [置顶] java得到前一个月的年月日时分秒
    Windows 8.1 Preview的新功能和新API
    oracle保证读一致性原理
    10161
    Qt国际化
    使用Maven管理依赖JAR文件,自定义项目布局,利用ANT生成不同的发布包
    Haxe2.10到Haxe3,NME到OpenFL的迁移备忘
    设置RichEdit相关颜色说明
    使用MFC CImage类绘制PNG图片时遇到的问题
    把网球计分招式重构到状态模式
  • 原文地址:https://www.cnblogs.com/Auge/p/12051200.html
Copyright © 2020-2023  润新知