由第二章中我们得知,算法的时间复杂度只与算法的高阶项有关。当输入规模n足够大时,高阶项的花费远超过低阶项。因此在计算算法的运行时间时,尽管可以求出精确的运行时间,但是并不值得我们这么做。
在n很大的情况下,我们更感兴趣的是算法的渐进效率,即,当输入规模无限增加时,在极限中,算法的运行时间如何随着输入规模的变大而变大。
这一章首先介绍了几个“渐进记号”,其中,我们见过Θ记号。然后,我们简单介绍几个函数以及性质。
一、渐进记号
我们用渐进记号来刻画算法的运行时间,以便于方便的描述最坏运行时间函数T(n)。
本章主要介绍Θ、O、Ω记号,以及相对应的θ、o、ω记号(注意大小写)。
上图给出了f(n)与g(n)的关系。标出的n0是最小的可能值。任何大于n0的值都有效。在图一中,表示Θ记号,即将f(n)限制在c1g(n)与c2g(n)之间,给出了f(n)的上下界。图二中表示O记号,给出函数f(n)的上界。图三中表示Ω记号,给出f(n)的下界
Θ记号
由第二章,我们知道插入排序的最坏时间是T(n)=Θ(n²)。我们给出这个记号的定义:对于一个给定的函数g(n),Θ(g(n))表示以下函数的集合:
θ(g(n))={f(n):存在常量c1、c2 和 n0,使得对所有n≥n0,有0≤c1g(n)≤f(n)≤c2