一、评估算法的核心指标是什么?
1、时间复杂度
2、空间复杂度
二、什么是时间复杂度?
1、确定算法流程的总操作数量与样本数量之间的表达式的关系
2、常数时间的操作
2.1、如何确定算法流程的总操作数量与样本数量之间的表达式的关系?
1、将处理的算法流程,按照最差的情况来计算
2、将整个流程拆分成一个个基本的动作,每个动作都是常数时间的操作
3、如果数据量是N,则看基本数量与N之间是什么关系
2.2、常数时间的操作
什么是常数时间的操作?
一个操作的执行时间,不以具体执行的数据量为转移,每次执行的时间都固定。常见的常数时间的操作如下:
常见的算术运算(+、-、*、/、% 等)
常见的位运算(>>、>>>、<<、|、&、^等)
赋值、比较、自增、自减操作等
数组寻址操作
2.3、常见的时间复杂度
排名从好到差:
O(1)
O(logN)
O(N)
O(N*logN)
O(N^2) O(N^3) … O(N^K)
O(2^N) O(3^N) … O(K^N)
O(N!)
2.4、时间复杂度的意义
例如,将数组中的数据进行从小到大进行排序。
A的时间复杂度是:N的平方
B的时间复杂度是:N的三次方在执行相同的数据量时,A的执行效率要优于B的执行效率
三、如何估算时间复杂度?
当完成了表达式的建立,低阶项都去掉,高阶项的系数都去掉,只把高阶项留下即可。
记为:O(忽略掉系数的高阶项)
四、空间复杂度
在实现算法流程的过程中,你需要开辟一些空间来支持你的算法流程。
作为输入参数和输出结果的空间,不算额外空间。
因为这些都是必要的、和现实目标有关的,所以都不算。
但除此之外,你的流程中需要开辟空间才能让你的流程继续下去,这部分空间就是额外空间。
如果你的流程只需要开辟有限几个变量,空间复杂度就是O(1)。