时间复杂度
时间复杂度实际上并不具体表示代码真正的执行时间,而是表示代码执
行时间随数据规模增长的变化趋势,所以,也叫作渐进时间复杂度(asymptotic timecomplexity),简称时间复杂度。
常见的时间复杂度有:
- O(1): 常量级, 不管数据规模有多大, 都不影响执行效率
- O(n): 线性级, 比如遍历, 就属于线性级
- O(n^2): 指数级, 比如冒泡排序, 耗时呈指数增长, 当输入为n时,耗时为n^2次方
- O(logn): 对数级, 比如二分查找, 当输入为256时, 只需要查找8次就可以找到结果
- O(nlogn): 线性对数阶, 为
n*logn
, 当数据增大256倍是, 耗时增大256*logn(8)
倍, 也就是256*8=2048
倍,这个复杂度高于线性低于平方
关于他们的排序为
O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n)
空间复杂度
指执行当前算法需要占用多少内存空间,我们通常用「空间复杂度」来描述。
空间复杂度全称就是渐进空间复杂度(asymptotic space complexity),表示算法的存储空间与数据规模之间的增长关系
空间复杂度比较常用的有:O(1)、O(n)、O(n²)