渐近记号
(1)渐近上界记号O(大写O)
含义:渐近地给出了一个函数在常量因子内的上界:
- O(g(n))={f(n):存在正常量c和n0,使得对所有n>=n0,有0<=f(n)<=cg(n)}
- f(n)=Θ(g(n))蕴含着符f(n)=O(g(n))
- O可用于标记最坏的运行时间
f(n)=O(g(n))的曲线图
(注意n0和c的值)
(2)渐进下界记号Ω(大写Ω)
含义:渐进的给出一个函数在常量因子的下界
- Ω(g(n))={f(n):存在正常量c和n0,使得对所有n>=n0,有0<=cg(n)<=f(n) for all n>=n0}
- f(n)=Θ(g(n)蕴含了f(n)=Ω(g(n))
f(n)=Ω(g(n))曲线
渐进紧确界记号Θ
含义:渐进的给出了一个函数的上界和下界,
- Θ(g(n))={f(n):存在常量c1、c2和n0,使得对所有的n>=n0,有0<=c1g(n)<=f(n)<=c2g(n)}
f(n)=Θ(g(n))的曲线
- f(n)=Θ(g(n))的确切含义是:f(n)∈Θ(g(n))
- Θ(g(n))的定义要求其每个元素渐进非负,也就要求g(n)本身渐进非负。
- Θ(g(n))中的所有函数有相同的最高阶项
- f(n)∈Θ(g(n)),当且仅当f(n)∈O(g(n))&&f(n)∈Ω(g(n))
eg:形式证明(n*n)/2-3*n=Θ(n*n)
- 首先确定正常数c1,c2和n0,使得对所有n>=n0,有:
- c1*n*n<=(n*n)/2-3*n<=c2*n*n
- 除去n*n得:c1<=1/2-3/n<=c2
- 右边不等式在n>=1,c2>=1/2时成立,左边不等式.n>=7,c1<=1/14时成立,选c1=1/14,c2=1/2,n0=7时。上式成立。
非渐进紧确上界记号o(小写0)
如果f(n)=o(g(n)),那么n当趋于无穷时,f(n)相对于g(n)变得微不足道。
非渐进紧确下界记号:ω
- 如果f(n)=ω(g(n)),那么当n很大时候,f(n)相对于g(n)变得任意大了,
- 如果f(n)∈ω(g(n)),当且仅当g(n)∈o(f(n));
使用极限去定义渐进符号
五种符号的关系:
其实上述的这些符号表示的都是一个集合,一般我们对算法复杂度的描述都是用O记号。
性质