一、 算法时间复杂度
- 符号:O(f(n))
- 含义:某个算法需要执行的指令数的量级
- 定义:
- 学术界:算法执行上界
- 工业界:算法执行的最低上界
- 注意点:通常算法时间复杂度与算法所处环境有关,如插入排序最差情况为O(n^2),最好情况为O(1),但一般所说的插入排序的时间复杂度为O(n^2)是平均情况(绝大多数情况下的复杂度),快速排序同理,最差为O(n^2),最好情况为O(nlogn),而平均情况为O(nlogn),这也就表示为快速排序的平均情况。
二、空间复杂度:
- 符号:O(f(n))
- 含义:算法运行过程中额外开辟的空间的大小
- 注意点:当有递归时,还需要考虑递归所占的空间,因为需要保存断点以及临时变量,通常来说,递归本身所需的空间复杂度为O(递归深度)
三、数据规模:
- 条件:运行10^8个指令需要一秒(通常来说),所以如果需要在1秒内执行完毕某个算法,
- 当一个算法是O(n^2),数据规模必须小于10^4,而由于每个数据的执行指令通常大于1,所以一般来说,当数据规模小于10^3时,才能保证一定能在1秒内执行完毕某个算法。
- 当一个算法是O(nlogn),数据规模必须小于10^7,而保险来看,数据规模必须小于10^6。
- 而当一个算法是O(n),数据规模必须小于10^8,而保险来看,数据规模必须小于10^7。