数据结构&算法

https://www.cnblogs.com/LeeJD/p/12524855.htmlhtml


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

(1)最坏状况复杂度:Tworst(n)函数

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

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

注:通常分析最坏状况复杂度,由于平均复杂度不容易找blog

下表可以比较直观的看出各个复杂度的运行时间图片

  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

 

 

 

  

 

 

 

 

因此通常状况下避免出现后两种复杂度for循环

下图是几种复杂度的增加速度table

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

 

 

 

复杂度分析的窍门:

  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

相关文章
相关标签/搜索