zoukankan      html  css  js  c++  java
  • 数据结构&算法

    在分析算法效率时,经常关注以下两种复杂度:

    (1)最坏情况复杂度:Tworst(n)

    (2)平均复杂度:Tavg(n)

    易知Tavg(n)<=Tworst(n)

    注:一般分析最坏情况复杂度,因为平均复杂度不容易找

    下表能够比较直观的看出各个复杂度的运行时间

      1 2 4 8 16 32
    C(常函数) 1 1 1 1 1 1
    logn 0 1 2 3 4 5
    n 1 2 4 8 16 32
    nlogn 0 2 8 24 64 160
    n2 1 4 16 64 256 1024
    n3 1 8 64 512 4096 32768
    2n 2 4 16 256 65536 4294967296
    n! 1 2 24 40326 2092278988000 26313×1033

      

    所以一般情况下避免出现后两种复杂度

    下图是几种复杂度的增长速度

    (图片来自慕课,陈越姥姥那堂课)

    复杂度分析的窍门:

    1. 若已知T1(n) = O(f1(n))和T2(n) = O(f2(n)),则
      T1(n) + T2(n) = max(O(f1(n)),O(f2(n)))  (就是O(f1(n))和O(f2(n))的最大值)
      T1(n) × T2(n) = O(f1(n) × f2(n))
    2. for循环的T(n) = 循环次数 × 循环体代码的复杂度
    3. if-else结构的复杂度取决于if的条件判断复杂度两个分支部分的复杂度,总体复杂度取三者中的最大值

     2020-03-19

  • 相关阅读:
    Spring中的AOP
    P2782 友好城市
    1576 最长严格上升子序列
    1058 合唱队形 2004年NOIP全国联赛提高组
    5294 挖地雷
    1643 线段覆盖 3
    4768 跳石头
    1026 逃跑的拉尔夫
    2727:仙岛求药
    codevs 4888 零件分组
  • 原文地址:https://www.cnblogs.com/LeeJD/p/12524855.html
Copyright © 2011-2022 走看看