1、渐进记号
Θ记号
对一个给定的函数g(n),用Θ(g(n))来表示函数的集合:
Θ(g(n)) = {f(n):存在一个正常量c1,c2和n0,使得对所有的n >= n0,有0 <= c1g(n) <= f(n) <= c2g(n)}。即,存在常量c1和c2使得足够大的n,函数f(n)能“夹入”c1g(n)与c2g(n)之间,则f(n)属于集合Θ(g(n))。通常记做f(n) = Θ(g(n))。下面有一个直观的形式:
在上图中,对于在n0及其右边n的所有值,f(n)的值位于或高于c1g(n)且位于或高于c2g(n)。换句话说,对于所有n >= n0,函数f(n)在一个常量因子内等于g(n)。我们称g(n)是f(n)的一个渐进紧确界。以下用一个例子说明:
设:T(n) = n² + n,这里可以记为T(n) = Θ(n²)。因为存在一个值,使得 c1n² <= n² + n <= c2n²。即c1n <= n + 1 <= c2n。当c1 = 1,c2 > 1时等式成立,则记做 T(n) = Θ(n²)。
O记号
上面讲了Θ是渐进紧确界,它给出了函数的上界和下界。而O记号则是只表示上界,即渐进上界。对于给定函数g(n),则用O(g(n))表示。对于O(g(n))有
O(g(n)) = {f(n):存在一个正常量c和n0,使得对所有的n >= n0,有0 <= f(n) <= cg(n)}
对于O(g(n))有下图:
Ω记号
上面讲了Θ是渐进紧确界,它给出了函数的上界和下界。而O记号则是只表示上界,即渐进下界。对于给定函数g(n),则用Ω(g(n))表示。对于Ω(g(n))有
Ω(g(n)) = {f(n):存在一个正常量c和n0,使得对所有的n >= n0,有0 <= cg(n) <= f(n)}
对于O(g(n))有下图
定理:对于任意两个函数f(n)和g(n),我们有f(n) = Θ(g(n)),当且仅当f(n) = O(g(n))且f(n) = Ω(g(n))
o记号和ω记号
由O和Ω记号提供的上下界,可能是渐进紧确,也可能不是。例如2n² = O(n²)是紧确界,单2n = O(n²)却不是。我们使用o记号来表示一个非渐进紧的上界。ω记号表示一个非渐进紧的下界。
o(g(n)) = {f(n):对于任意正常量c > 0,存在常量n0 > 0,使得对所有的n >= n0,有0 <= f(n) <= cg(n)}
例如:2n = o(n²),但是2n² != o(n²)
ω(g(n)) = {f(n):对于任意正常量c > 0,存在常量n0 > 0,使得对所有的n >= n0,有0 <= cg(n) <= f(n)}
例如:n² / 2 = ω(n),但是n² / 2 != ω(n²)
对于各种记号,有以下性质
传递性
f(n) = Θ(g(n)) 且 g(n) = Θ(h(n)) 蕴涵 f(n) = Θ(h(n))
f(n) = O(g(n)) 且 g(n) = O(h(n)) 蕴涵 f(n) = O(h(n))
f(n) = Ω(g(n)) 且 g(n) = Ω(h(n)) 蕴涵 f(n) = Ω(h(n))
f(n) = o(g(n)) 且 g(n) = o(h(n)) 蕴涵 f(n) = o(h(n))
f(n) = ω(g(n)) 且 g(n) = ω(h(n)) 蕴涵 f(n) = ω(h(n))
自反性
f(n) = Θ(f(n))
f(n) = O(f(n))
f(n) = Ω(f(n))
对称性
f(n) = Θ(g(n)) 当且仅当 g(n) = Θ(f(n))
转置对称性
f(n) = O(g(n)) 当且仅当 g(n) = Ω(f(n))
f(n) = o(g(n)) 当且仅当 g(n) = ω(f(n))