程序复杂度估计的表示方法

来源:互联网 发布:中国统计年鉴数据下载 编辑:程序博客网 时间:2024/06/05 10:08

为了预测程序运行的时间如何锁着实例特征的变化而变化,我们进行简单的估计步数,不必对程序进行准确的操作计数和执行步数,在这里一般采用大O记法,但是Ω记法、Θ记法、小o记号也是很常用的,下面对其做一一分析说明

1、大O记法

定义:f(n)=O(g(n)),当且仅当存在常数两个正整数c和n0,使得n>n0的时候f(n)≤c*g(n)。

表示方法:f(n)=O(g(n))

1)例如:f(n)=3n+2=O(n)

当n>2的时候,2n +2<3n,这时n0=3,c=3,则n>n0的时候,f(n)<c(n),所以f(n)=O(n)。

2)现在再证明f(n)=2n+2=O(n^2)

当n>2的时候,3n+2<2n^2,所以可选n0=2,c=2,则n>n0的时候,f(n)<c(n^2),所以f(n)=O(n^2)。

小结:可以看出来大O表示方法g(n)通常为f(n)的最高次幂或者更高次幂。

2、Ω记法

Ω记法与大O记法类似,它表示函数在渐近增长率意义上的下限,可以理解为算法运行时间的下限。

定义:f(n)= Ω (g(n)),当且仅当存在常数两个正整数c和n0,使得n>=n0的时候f(n)>=c*g(n)。

1)对于所有的n有f(n)=3n+2>3n,因此f(n)=Ω(n),更直接可以看出f(n)=Ω(1)

2)例如:f(n)=2n^2-4=Ω(n^2)

当n>2的时候,2n^2-4>n^2,所以可选n0=2,c=1,则n>n0的时候,f(n)>c(n^2),所以f(n)=Ω(n^2)。

小结:可以看出来Ω表示方法g(n)通常为f(n)的最高次幂或者更低次幂。

 

3、Θ记法

定义:Θ记号介于大O记号和Ω记号之间。它表示g(n)和f(n)相同的阶数

1)例如:2n<=t(n)<=2n+2,则g(n)=Θ(n)

4、小o记号

定义:f(n)=o(g(n))当且仅当f(n)=O(g(n))且f(n)≠Ω(g(n))。可以看到小o记法给出了严格的上界。

1) 例如:因为3n+2=O(n^2)且3n+2≠Ω(n^2),所以3n+2=o(n^2),但是3n+2≠o(n).

2) 同样10n^2+4n+2=o(n^3),但是10n^2+4n+2≠o(n^2).

0 0