渐进符号(Asymptotic Notation)用于描述算法的复杂度,特别是随着输入规模增大时,算法性能的变化。以下是常见的渐进符号及其定义和例子:
大O符号(Big-O Notation)
大O符号 O(f(n)) 描述的是上界,表示算法在最坏情况下的时间或空间复杂度。它给出一个函数的渐进上界。
定义:T(n)=O(f(n))如果存在正数常数 c 和 n0,使得对于所有 n≥n0,有 T(n)≤c⋅f(n)。
例子:对于算法运行时间 T(n)=3n2+2n+1,我们可以说 T(n)=O(n2)。
大Ω符号(Big-Omega Notation)
大Ω符号 Ω(f(n)) 描述的是下界,表示算法在最好的情况下的时间或空间复杂度。它给出一个函数的渐进下界。
定义:T(n)=Ω(f(n)) 如果存在正数常数 c 和 n0,使得对于所有 n≥n0,有 T(n)≥c⋅f(n)。
例子:对于算法运行时间 T(n)=3n2+2n+1,我们可以说 T(n)=Ω(n2)。
大Θ符号(Big-Theta Notation)
大Θ符号 Θ(f(n))描述的是算法的精确增长率。它同时给出上界和下界,表示算法的时间或空间复杂度的渐进紧界。
定义:T(n)=Θ(f(n))如果存在正数常数 c1、c2 和 n0,使得对于所有 n≥n0,有c1⋅f(n) ≤ T(n) ≤ c2⋅f(n)。
例子:对于算法运行时间 T(n)=3n2+2n+1,我们可以说 T(n)=Θ(n2)。
小o符号(Little-O Notation)
小o符号 o(f(n))描述的是严格上界,表示算法的时间或空间复杂度严格小于某个函数的增长率。
定义:T(n)=o(f(n))如果对于任意正数常数 c,存在 n0,使得对于所有 n≥n0,有 T(n)<c⋅f(n)。
例子:对于算法运行时间 T(n)=nlogn,我们可以说 T(n)=o(n2)。
小ω符号(Little-Omega Notation)
小ω符号 ω(f(n)) 描述的是严格下界,表示算法的时间或空间复杂度严格大于某个函数的增长率。
定义:T(n)=ω(f(n)) 如果对于任意正数常数 c,存在 n0,使得对于所有 n≥n0,有 T(n)>c⋅f(n)。
例子:对于算法运行时间 T(n)=n2,我们可以说 T(n)=ω(n)。