• 渐进符号详解


    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.计算机算法设计与分析习题解答 第二版  王晓东

  • 相关阅读:
    hadoop生态--ElasticSearch--ES操作
    Haoop生态--ElasticSeaarch(1)--ES预备知识(全文检索的概念、Lucence、倒排索引)
    hadoop生态--Hive(2)--Hive的使用方式
    hadoop生态--Zookeeper
    gsoap使用
    set容器
    如何杀死defunct进程
    关于多态
    数组类型与函数指针基本语法知识
    syslog日志
  • 原文地址:https://www.cnblogs.com/cy0628/p/14049405.html
Copyright © 2020-2023  润新知