常见的复杂度分析
没有数据规模的变化
存在一个循环,循环的次数和n相关
Cn次,可能c不是大于1的数
存在一个双重循环,都与n有关
反例:
分析循环复杂度的时候,我们要看循环的起始点,终始点,最关键的是每次增量的变化:
验证自己程序复杂度的方法
方式1:
可以在这个基础上降一个数量级,比如程序在1s内可以执行1000规模内的数据,大致是O(n^2):
但是这种方式可能会受到前面常数项的影响
方式2:
测试
运行结果:
从结果可知,当数据规模乘上2,那么消耗的时间也乘上2,说明复杂度是0(n)
从结果可知,当数据规模乘上2,那么消耗的时间也乘上4,说明复杂度是0(n^2)
特点:随着数据规模的增加,时间增加的倍数一直在减少
数据规模每扩大两倍,时间基本扩大两倍多一点点
O(n)和O(nlogn)差距差不多
递归算法的复杂度分析
递归的深度是logn,每层处理元素为n