时间复杂度分析
时间复杂度的全称是渐进时间复杂度,表示算法的执行时间与数据规模之间的增长关系
直接看某个函数或者代码根据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)
O(n)的时间复杂度实例
n=1执行1次print,n=100就会执行100次print. print代码的执行次数和n的值成正比关系
O(n^2)的时间复杂度实例
print语句的执行次数是n*n 所以时间复杂度是n^2
O(logN)的时间复杂度实例 每次循环规模扩大两倍就是是O(n^2), 每次循环缩小两倍就是O(logN)
计算所有类型递归函数的时间复杂度的主定理
空间复杂度分析
空间复杂度全称就是渐进空间复杂度(asymptotic space complexity),表示算法的存储空间与数据规模之间的增长关系.
常见的空间复杂度就是O(1)、O(n)、O(n2),像O(logn)、O(nlogn) 这样的对数阶复杂度平时都用不到
第2行代码中,我们申请了一个空间存储变量i, 但是它是常量阶的,跟数据规模n没有关系,可以忽略
第3行申请了一个大小为n的int类型数组,除此之外,剩下的代码都没有占用更多的空间,所以整段代码的空间复杂度就是O(n)