算法时间复杂度分析(2)

常见的复杂度分析

算法时间复杂度分析(2)

没有数据规模的变化

算法时间复杂度分析(2)

存在一个循环,循环的次数和n相关

Cn次,可能c不是大于1的数

算法时间复杂度分析(2)

算法时间复杂度分析(2)

存在一个双重循环,都与n有关

反例:

算法时间复杂度分析(2)

算法时间复杂度分析(2)

算法时间复杂度分析(2)

算法时间复杂度分析(2)

算法时间复杂度分析(2)

分析循环复杂度的时候,我们要看循环的起始点,终始点,最关键的是每次增量的变化:算法时间复杂度分析(2)

算法时间复杂度分析(2)

验证自己程序复杂度的方法

方式1:

算法时间复杂度分析(2)

可以在这个基础上降一个数量级,比如程序在1s内可以执行1000规模内的数据,大致是O(n^2):

但是这种方式可能会受到前面常数项的影响

 

方式2:

算法时间复杂度分析(2)

测试

算法时间复杂度分析(2)

算法时间复杂度分析(2)

算法时间复杂度分析(2)

算法时间复杂度分析(2)

算法时间复杂度分析(2)

运行结果:

算法时间复杂度分析(2)

从结果可知,当数据规模乘上2,那么消耗的时间也乘上2,说明复杂度是0(n)

算法时间复杂度分析(2)

算法时间复杂度分析(2)

从结果可知,当数据规模乘上2,那么消耗的时间也乘上4,说明复杂度是0(n^2)

算法时间复杂度分析(2)

算法时间复杂度分析(2)

算法时间复杂度分析(2)

特点:随着数据规模的增加,时间增加的倍数一直在减少

算法时间复杂度分析(2)

算法时间复杂度分析(2)

数据规模每扩大两倍,时间基本扩大两倍多一点点

O(n)和O(nlogn)差距差不多

递归算法的复杂度分析

算法时间复杂度分析(2)

算法时间复杂度分析(2)

算法时间复杂度分析(2)

算法时间复杂度分析(2)

算法时间复杂度分析(2)

算法时间复杂度分析(2)

算法时间复杂度分析(2)

递归的深度是logn,每层处理元素为n