学习算法都应该了解算法复杂度,第一章来说明算法复杂度

算法度分析

计算复杂度以及渐进复杂度
同一个问题可以用效率不同的算法来解决,当处理数据项增长时,这种差距就会比较明显,所以引入了一种称为“计算复杂度”的标准来衡量算法。
计算复杂度表示应用一种算法需要付出多大努力或者成本多少,这种成本可以用很多标准来衡量,不同的应用场合决定了成本的不同的含义。本人介绍两种:空间、时间。时间因素通常空间因素更为重要,考虑效率时一般关注处理数据的所花费的时间,然而效率最低的算法,当运行在Cray计算机上时,也会比效率最高的算法在pc机上快,所以运行时间通常依赖系统。如果比较算法的速度,在同一机器上,并且用同一语言编写。
在评估算法时不能使用微秒或纳秒这种实际的时间单位,而采用某种逻辑单位,来描述文件或数组的尺度n同处理数据所需要的时间t之间的关系。如果尺度n和时间t之间是线性关系,即t=cn,那么数据量增长5倍,那么时间也会增长相同的倍数。
通常,表示n与t之间关系的函数比上面的函数复杂得多,只有当数据量非常巨大时,计算这样的的函数才比较重要,不会从实质上改变函数数量级的项应当从函数中剔除。经过处理的函数给出的是原函数的近似效率值。但这个近似值与原函数已经足够接近,当处理的数据量很大尤其是如此,这种效率的估量就称为渐进复杂度。当忽略某些项来表示算法的效率,或者函数很难计算甚至无法计算而只能采用近似值时,都会用到这种复杂度