绪论
比起课本上更加详细的时间复杂度的介绍。
Justification for analysis
这一章的标题是algortihm analysis,也就是算法分析。算法是用数学,计算机来解决问题的方法,在得到算法之后,我们需要从算法运行的快慢,空间的占用大小,利用率,出错的概率等不同的角度来评判和比较这些算法,从而在不同的场合选择不同的算法。
这个评判和比较的过程从学科专业的角度就叫做算法分析。
ppt这里举了一些例子,比如在有序表中寻找某个元素。
这里提供了线性查找和二分查找两种算法。
初始化给数组a中的第i个元素赋值为i-1,然后用两种不同的算法将0到n-1的数值全部查找一遍,计算查找完所有元素所花的时间。
结果就是n为0-1000时,两个算法的效率各有快慢。
然而当n逐渐变大时,两个算法的效率出现了显明的差异。
所以我们从效率图的直观角度认为对于较大的数据二分查找算法的效率更高。
分析图象能够大概估算出两种算法所耗费的时间t和数据n存在哪种运算的关系,二分查找大概是nlogn,线性查找为n2(不计常数)。
但是这么直观观察肯定无法运用到众多的算法分析当中。于是引入一个概念(或者说符号)来描述这个从数据规模n到耗费时间t的函数关系,这个概念我们称为Landau symbols (a.k.a. Big-O notation),朗读符号,aka大O符号(aka原来是这么正规的名词么)。
因为这个函数的计算是不计常数且不计低次数位也就是一个渐进的计算,这个概念又称渐进(时间/空间)复杂度。
Landau symbols
有关朗道符号,首先需要知道一个事实:对于最高次项相同的多项式,即使后面的低次项差异很大,当n的值较大时,最终结果的差异就整体很小,可以忽略不计。
n较小时,差异还是比较大的: