一. 时间复杂度(time complexity)
在进行算法分析时,语句总执行次数T(n) 是关于问题规模 n 的函数。进而分析执行次数T(n) 随规模 n 的变化情况并确定T(n) 的数量级。
算法的时间复杂度就是算法的时间度量,记作T(n) = O( f(n) ) 。它表示随问题规模 n 的增大,算法的执行时间的增长率和 f(n) 的增长率相同,称作算法的渐进时间复杂度,简称为时间复杂度。其中,f(n) 是问题规模 n 的某个函数。
常见的时间复杂度量级有:
- 常数阶O(1)
- 对数阶O(logN)
- 线性阶O(n)
- 线性对数阶O(nlogN)
- 平方阶O(n²)
- 立方阶O(n³)
- K次方阶O(n^k)
- 指数阶(2^n)
上面从上至下依次的时间复杂度越来越大,执行的效率越来越低。
二. 空间复杂度(space complexity)
作为算法所需存储空间的量度,记做S(n) = O( f(n) ) 。其中,n为问题的规模;f(n) 为语句关于 n 的所占存储空间的函数。
空间复杂度比较常用的有:O(1)、O(n)、O(n²)