时间复杂度分析

       时间复杂度的全称是渐进时间复杂度,表示算法的执行时间与数据规模之间的增长关系

       直接看某个函数或者代码根据n的不同会执行多少次

       常用的时间复杂度表示:

       O(1)            Constant Complexity 常数复杂度     

      O(logN)       Logarithmic Complexity 对数复杂度 

      O(n)            Linear Complexity 线性时间复杂度 

      O(n^2)        N square Complexity 平⽅方

      O(n^3): N square Complexity ⽴方

      O(2^n): Exponential Growth 指数 

 

     O(1)的时间复杂度实例

       不管n为多大的数值,这段代码永远只执行一次print

      

算法时间复杂度和空间复杂度分析_空间复杂度

 

      不管n为多大值,下面的代码永远只执行三次print  不会随着n的改变而改变  所以时间复杂度也是O(1)

      

算法时间复杂度和空间复杂度分析_时间复杂度_02

 

 O(n)的时间复杂度实例

             n=1执行1次print,n=100就会执行100次print.  print代码的执行次数和n的值成正比关系

     

算法时间复杂度和空间复杂度分析_时间复杂度_03

 O(n^2)的时间复杂度实例

          print语句的执行次数是n*n   所以时间复杂度是n^2

     

算法时间复杂度和空间复杂度分析_复杂度_04

 O(logN)的时间复杂度实例 每次循环规模扩大两倍就是是O(n^2), 每次循环缩小两倍就是O(logN)

    

算法时间复杂度和空间复杂度分析_空间复杂度_05

     计算所有类型递归函数的时间复杂度的主定理

    

算法时间复杂度和空间复杂度分析_时间复杂度_06

空间复杂度分析

     空间复杂度全称就是渐进空间复杂度(asymptotic space complexity),表示算法的存储空间与数据规模之间的增长关系.

     常见的空间复杂度就是O(1)、O(n)、O(n2),像O(logn)、O(nlogn) 这样的对数阶复杂度平时都用不到

      

算法时间复杂度和空间复杂度分析_复杂度_07

      第2行代码中,我们申请了一个空间存储变量i, 但是它是常量阶的,跟数据规模n没有关系,可以忽略

      第3行申请了一个大小为n的int类型数组,除此之外,剩下的代码都没有占用更多的空间,所以整段代码的空间复杂度就是O(n)