评价算法优劣的标准:
时间复杂度、额外空间复杂度、常数操作
常数操作
这部分操作的执行时间与样本量无关,每次执行时间固定。
常见的常数操作:
- 算术运算:+ - * / %
- 位运算:>> >>> << | & ^
带符号右移, 空缺位置用符号位补,负数 1000… ,右移 1100…
不带符号位右移,都用 0 补
- 赋值、比较、自增、自减
- 数组寻址
时间复杂度
衡量在整个流程中发生了多少次常数操作。
如何确定表达式:
- 想象该算法流程处理的最差情况
- 整个流程拆分为一个个常数操作
- 数据量为 N,看常数操作数量和 N 是什么关系
如何确定时间复杂度:
- 表达式忽略掉所有常数项,只取最高阶。
- O(忽略系数的高阶项)
额外空间复杂度
如果流程只需要定义有限个变量,变量数量与样本数无关,那么空间复杂度为 O(1)
如果要开辟一个额外数组,该空间不是功能要求的,那么空间复杂度为 O(N)
其他
刷题中的最优解
先保证时间复杂度最低,然后尽量降低空间复杂度。