渐进符号详解

1.渐近紧确界记号: Θ(big-theta)

  假设算法A的运行时间表达式T1(n)为:T 1 ( n ) = 30 n^ 4 + 20 n ^3 + 40 n^ 2 + 46 n + 100
  假设算法B的运行时间表达式T2(n)为:T 2 ( n ) = 1000 n 3 + 50 n 2 + 78 n + 10
当问题规模足够大的时候,例如n=100万,算法的运行时间将主要取决于时间表达式的第一项,其它项的执行时间只有它的几十万分之一,可以忽略不计。第一项的常数系数,随着n的增大,对算法的执行时间也变得不重要了。
  于是,算法A的运行时间可以记为:T 1 ( n ) ≈ n^ 4,记为T 1 ( n ) = Θ ( n ^4 );算法B的运行时间可以记为:T2(n)n^3,记为T 2 ( n ) = Θ ( n ^3 )

  由下图中左侧f(n)=Θ(g(n))图可以看出,对所有n>n0时,函数f(n)乘一个常量因子可等于g(n),我们称g(n)是f(n)的一个 渐近紧确界 。Θ记号在五个记号中,要求是最严格的,因为g(n)即可以表示上界也可以表示下界。

在这里插入图片描述

  需要注意的是:Θ(g(n))的定义要求每个成员f(n)Θ(g(n))均 渐近非负,即当n足够大时,f(n)非负。 渐近正函数 就是对所有足够大的n均为正的函数。

2.渐近上界记号:O(big-oh)

定义:设f(n)g(n)是定义域为自然数集N上的函数。若存在正数cn0,使得对一切nn0都有0f(n)cg(n)成立,则称f(n)的渐进的上界是g(n),记作f(n)=O(g(n))。通俗的说n满足一定条件范围内,函数f(n)的阶不高于函数g(n)。

  根据符号O的定义,用它评估算法的复杂度得到的只是问题规模充分大时的一个上界。这个上界的阶越低,评估越精确,越有价值。

几种常见的复杂度关系

符号用法测试:素数测试

int isprime(int n) {
    for(int i=2; i<=(int)sqrt(n); i++) {
        if(n%i==0) { 
            return0;
        }
    }
    return1;
}
View Code

在上面这个素数测试的例子中,基本运算是整除;时间复杂度T ( n ) = O ( n ^1 /2 ) 是正确的。当被测的数n为偶数时,基本运算一次也没执行,所以T ( n ) = Θ ( n ^1/ 2 ) 是错误的,因为没有办法证明T(n)的下界是Ω ( n^ 1 /2 )


3.渐近下界记号:Ω(big-omege)

  根据符号Ω的定义,用它评估算法的复杂度得到的只是问题规模充分大时的一个下界。这个下界的阶越高,评估越精确,越有价值。

显然,Ω(n^2)作为下界更为精确。

4.非渐近紧确上界:o(小-oh)

定义1:设f(n)和g(n)是定义域为自然数集N上的函数。若对于任意正数c,都存在n_0,使得对一切n≥n_0都有0≤f(n)

O记号提供的渐近上界可能是渐近紧确的,也可能是非紧确的。(如:2 n ^2 = O ( n ^2 )是渐近紧确的,而2n=O(n^2)是非紧确上界。)
例子:f(n)=n^2+n,则f ( n ) = o ( n ^3 ).


5.非渐近紧确下界:ω(小-omege)

定义1:设f(n)和g(n)是定义域为自然数集N上的函数。若对于任意正数c,都存在n_0,使得对一切n≥n_0都有0≤cg(n)

ω记号与Ω的关系类似于oO记号的关系。我们用ω表示一个非渐近紧确的下界。
例子:f(n)=n^2+n,则f(n)=ω(n)是正确的。f(n)=ω(n^2)则是错误的,f(n)=Ω(n^2)是正确的。


6.渐近记号Θ、Ο、o、Ω、ω关系

记号含义通俗理解
(1)Θ(西塔) 紧确界。 相当于"="
(2)O (大欧) 上界。 相当于"<="
(3)o(小欧) 非紧的上界。 相当于"<"
(4)Ω(大欧米伽) 下界。 相当于">="
(5)ω(小欧米伽) 非紧的下界。 相当于">"

在这里插入图片描述


7.习题练习

8.参考资料

1.算法导论  殷建平 译   机械工业出版社

2.计算机算法设计与分析习题解答 第二版  王晓东

posted @ 2020-11-27 17:40  Chen洋  阅读(2654)  评论(0编辑  收藏  举报