一、引言
为什么要学习《数据结构与算法分析》,因为不同算法的代码运行的时间不同,更好的算法在处理大量数据时会节省很多时间!提起算法,自然与高等数学无法离开关系,那么今天就来讨论讨论算法与数学的关系!
二、算法中的相对增长率
在算法中定义,
1.如果T(N)的增长率小于等于f(N),
记为T(N)= O f(N);
ps:如果使用o来记,则不包括等于的这种情况;
2.如果T(N)的增长率大于等于g(N),
记为T(N)= Ω f(N);
3.同理,如果增长率相等,则用符号θ来记;
4.举个例子,我们可以说N的平方=O(N的立方),
N的立方=Ω(N的平方)。
三、法则
我们可以通过计算n趋于无穷时的f(N)/g(N)来判断相对增长率的大小:
1.极限为0: f(N)= O g(N)并尽量用o表示;
2.极限为c不等于0:f(N)= θ (N);
3.极限为无穷:g(N)= O f(N)并尽量用o表示;
4.极限摆动:暂不考虑。
四、与数学的关系
我们知道在数学中有无穷级数(常数项级数)这个概念,如果级数收敛,那么通项趋于无穷时必为0!
我们知道代码运行的时间一定是正项级数,所以
符合如下规则:
比较趋于无穷时的通项,就是比较谁更趋于0!
所以:
比值为c时,二者同阶,意味着代码运行时间同阶;
比值为0时,分子更趋于0,则分子是分母的高阶无穷小,所以分子代码的运行时间将小于分母代码的运行时间;
比值为无穷时,分母更趋于0,则分子是分母的低阶无穷小;所以分子代码的运行时间将大于分母代码的运行时间;
所以算法与数学中的两种比值是不是就有所联系了呢?
ps:这个比值在数学中也可用来判断敛散性。