算法的时间复杂度分析
我们可以通过在代码里先获取执行前时间,再获取执行后时间,根据时间差来判断算法的执行时间,并来比较算法的优劣。
这样分析有几个缺点:
- 执行时间严重依赖硬件环境,内存大、CPU好的机器执行就快
- 换一个算法就得重写一遍计算方法
通过分析,我们认为编写好的程序在运行上所耗费的时间主要取决于以下几个因素:
- 算法所采用的策略和方案
- 编译产生的代码质量
- 问题的输入规模
- 机器执行指令的速度
由此可见,抛去硬件的差别,算法执行时间主要取决于输入规模和使用的策略方法了。
在分析程序的算法时,我们不关心程序所使用的高级语言是什么,也不关系程序要跑在什么机器上。最重要的是要把程序看做是独立于程序设计语言的算法或一系列步骤。分析算法的时间,最重要的是把核心操作的次数和输入规模关联起来。
在比较算法随着输入规模的增长量是,发现规则如下:
- 算法函数中的常数可以忽略不计
- 算法函数中最高次幂的常数因子可以忽略不计
- 算法函数中的最高次幂越小,算法效率越高
算法时间复杂度
语句总的执行次数T(n)是关于问题规模n的函数,进而分析随着n的变化情况确定T(n)的量级。
执行次数=执行时间
用O()来体现算法时间复杂度的记法,称之为大O记法。
常见的大O阶
- 线性阶 O(n)
- 平方阶O(n2)
- 立方阶
- 对数阶(随着n的规模的增大,应该忽略底数的影响)
- 常数阶O(1)