算法基本概念
1. 评估算法优劣的核心指标是什么
1.1 时间复杂度(流程决定)
常数时间的操作
如果一个操作的执行时间不以具体样本量为转移,每次执行时间都是固定的时间,这样的操作为常数时间操作。
- 常见的算术运算:+、-、*、/、%
- 常见的位运算:>>、<<、>>>、<<<、|、&、^
- 赋值、比较、自增、自减
- 数组寻址
总之,执行时间固定的操作都是常数时间的操作。反之,执行时间不固定的操作,都不是常数时间的操作。
如何确定算法流程的总操作数量与样本数量
- 想象该算法流程所处理的数据状况,要按最差情况来
- 把整个流程彻底拆分成一个个基本动作,保证每个动作都是常数时间的操作
- 如果数据量为N,看看基本动作的数量和N是什么关系。
如何确定算法流程的时间复杂度?
当完成了表达式的建立,只要把最高阶项留下即可。低阶项都去掉,高阶项的系数也去掉。
记为 O(忽略掉系数的高阶项)
注意
- 算法的过程,和具体的语言是无关的
- 相分析一个算法流程的时间复杂度的前提,是对这个算法的流程非常熟悉
- 一定要确保拆分算法流程时,拆分出来的所有行为都是常数时间操作。这意味着你写算法时,对自己用过的每一个系统api,都非常的熟悉,否则会影响对时间复杂度的估算