1:Θ记号:
对一个给定的函数g(n),用Θ(g(n))来表示以下函数的集合:
Θ(g(n))={f(n):存在正常量c1、c2 和 n0,使得对所有n≥n0,有0≤c1g(n)≤f(n)≤c2g(n)}�
称g(n)是f(n)的一个渐近紧确界(asymptotically tight bound)。
2:O符号
当只有一个渐近上界时,使用O记号。对于给定的函数g(n),用O(g(n))示以下函数的集合:
O(g(n))={f(n):存在正常量c和n0,使得对所有n≥n0,有0≤f(n)≤cg(n)}
当我们说“运行时间为O(n^2)”时,意指存在一个O(n^2)的函数f(n),使得对n的任意值,不管选择什么特定的规模为n的输入,其运行时间的上界都是f(n)。这也就是说最坏情况运行时间为O(n^2)。
3:Ω记号
Ω记号提供了渐近下界。对于给定的函数g(n),用Ω(g(n))来表示以下函数的集合:
Ω(g(n))={f(n):存在正常量c和n0,使得对所有n≥n0,有0≤cg(n)≤f(n)}
当称一个算法的运行时间(无修饰语)为Ω(g(n))时,我们意指对每个n值,不管选择什么特定的规模为n的输入,只要n足够大,对那个输入的运行时间至少是g(n)的常量倍。等价地,我们再对一个算法的最好情况运行时间给出一个下界。例如,插入排序的最好情况运行时间为Ω(n),这蕴涵着插入排序的运行时间为Ω(n)。
4:o记号
由O记号提供的渐近上界可能是也可能不是渐近紧确的。界2n^2=O(n^2)是渐近紧确的,但是界2n=O(n^2)却不是。我们使用o记号来表示一个非渐近紧确的上界。形式化地定义o(g(n))为以下集合:
o(g(n))={f(n):对任意正常量c>0,存在常量n0>0,使得对所有n≥n0,有0≤f(n)<cg(n)}。
5:ω记号
ω记号与Ω记号的关系类似于o记号与O记号的关系。我们使用ω记号来表示一个非渐近紧确的下界。定义它的一种方式是:f(n)∈ω(g(n))当且仅当g(n)∈o(f(n))
然而,我们形式化地定义ω(g(n)):为以下集合:
ω(g(n))={f(n):对任意正常量c>0,存在常量n0>0,使得对所有n≥n0,有0≤cg(n)<f(n)}
6:一般来说,对任意多项式p(n)=,其中为常量且>0,我们有p(n)=Θ(n^d)。