zoukankan      html  css  js  c++  java
  • 算法导论笔记之渐进记号

    渐进记号

    Θ(theta):渐进紧确界。f(n) = Θ(g(n))表示:∃c1>0,c2>0,n0>0,s.t.对∀ n>n0,0 ≤c1g(n) ≤ f(n) ≤ c2g(n)成立。用极限表示为limn->∞f(n)/g(n) = c.

    O(大欧):渐进上界。 f(n) = O(g(n))表示 :∃c>0,n0>0,s.t.对∀ n>n0,0≤ f(n) ≤ cg(n)成立。

    Ω(大omega):渐进下界。f(n) = Ω(g(n))表示 :∃c>0,n0>0,s.t.对∀ n>n0,0≤ cg(n)≤ f(n) 成立。

    o(小欧):非渐进紧确上界。 f(n) = o(g(n))表示 :对∀c>0,∃n0>0,s.t.对∀ n>n0,0≤ f(n) <cg(n)成立。 f(n) = o(g(n))与 f(n) = O(g(n))的主要区别在于:前者是对任意c>0,0≤ f(n) ≤ cg(n)成立,而后者是对某个c>0,0≤ f(n) <cg(n)成立。也就是说,f(n) = o(g(n))可以表示为,当n->∞时,limf(n)/g(n) = 0.

    ω(小omega):非渐进紧确下界。 f(n) = ω(g(n))表示 :对∀c>0,∃n0>0,s.t.对∀ n>n0,0≤ cg(n)<f(n)成立。可用极限表示为:当n->∞时,limf(n)/g(n) = ∞.

    我们记 f(n) = O(g(n))以指出函数 f(n) 是集合 O(g(n))的成员,即f(n)∈ O(g(n))。注意,f(n) = Θ(g(n))蕴含着f(n) = O(g(n)),也就是说,O(g(n))⊆ Θ(g(n))。同样地,Ω(g(n))⊆ Θ(g(n))。由此可得如下重要定理:

      对于任意两个函数f(n)和g(n),我们有f(n) = Θ(g(n)),当且仅当f(n) = O(g(n))且f(n) = Ω(g(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))

     因为这些性质对渐进记号成立,所以,可以将两个函数f和g的渐进比较与实数a与b之间的比较做一种类比:

    f(n) = Θ(g(n))类似于a = b

    f(n) = O(g(n))类似于a ≤ b

    f(n) = Ω(g(n))类似于a ≥b

    f(n) = o(g(n))类似于a <b

    f(n) = ω(g(n))类似于a >b

    然而,实数的下列性质不能携带到渐进记号:

    三分性:对于任意两个实数a和b,下列三种情况恰有一种必须成立:a<b,a>b或a=b。

    虽然两个实数可以相互比较,但是不是所有的函数都可以渐进比较。也就是说,对于两个函数f(n)和g(n) 也许f(n) = O(g(n))和f(n) = Ω(g(n))都不成立。例如,我们无法使用渐进记号比较n和n1+sin n

  • 相关阅读:
    定时机制
    选择排序
    二分插入排序
    无名管道pipe
    Makefile
    Python下划线与命名规范
    Django IDE 开发环境的搭建
    Apache如何添加虚拟目录
    在Eclipse下如何安装插件
    Python的模块、包等概念的理解
  • 原文地址:https://www.cnblogs.com/begodlike/p/5986518.html
Copyright © 2011-2022 走看看