算法分析与设计学习(1)——函数增长和复杂性分类

本文详细介绍了渐进符号(如Θ,O,Ω,ω)在算法分析中的应用,讨论了它们表示函数上界、下界及渐进性质,并结合图灵机模型探讨了P、NP和NPC复杂度类的关系。
摘要由CSDN通过智能技术生成

函数增长和复杂性分类

渐进符号

  • Θ \mathit{\Theta} Θ 记号
    Θ ( g ( n ) ) = { f ( n ) ∣ ∃ n 0 , c 1 , c 2 > 0 , s . t . ∀ n > n 0 , 0 ≤ c 1 g ( n ) ≤ f ( n ) ≤ c 2 g ( n ) } \Large{\mathit{\Theta}(g(n))=\{f(n)|\exists n_0,c_1,c_2>0,\mathrm{s.t.} \forall n > n_0,0\le c_1g(n)\le f(n)\le c_2g(n) \}} Θ(g(n))={f(n)∣∃n0,c1,c2>0,s.t.n>n0,0c1g(n)f(n)c2g(n)}

    • 对于 Θ \mathit{\Theta} Θ 记号,要求 g ( n ) g(n) g(n)本身为渐进非负
    • Θ \mathit{\Theta} Θ 记号一般用来表示一个算法对于某些输入的运行时间的确界
    • 对于任意函数 f ( n ) ∈ Θ ( g ( n ) ) f(n)∈\mathit{\Theta}(g(n)) f(n)Θ(g(n)),那么 c 2 g ( n ) c_2g(n) c2g(n) c 1 g ( n ) c_1g(n) c1g(n) 分别是 f ( n ) f(n) f(n) 的上界和下界。所以θ记号渐进地给出了函数的上界和下界。
  • O O O​​ 记号
    O ( g ( n ) ) = { f ( n ) ∣ ∃ n 0 , c > 0 , s . t . ∀ n > n 0 , 0 ≤ f ( n ) ≤ c g ( n ) } \Large{\mathit{O}(g(n))=\{f(n)|\exists n_0,c>0,\mathrm{s.t.} \forall n > n_0, 0\le f(n)\le cg(n) \}} O(g(n))={f(n)∣∃n0,c>0,s.t.n>n0,0f(n)cg(n)}

    • O O O 记号表示的是一个渐进上界
    • 当用它来表示算法的最坏情况运行时间界限时,就隐含地给出了对于任意输的时间的上界,即 f ( n ) = Θ ( g ( n ) ) f(n)=\mathit{\Theta}(g(n)) f(n)=Θ(g(n))隐含着 f ( n ) = O ( g ( n ) ) f(n)=\mathit{O}(g(n)) f(n)=O(g(n))
  • o o o​​ 记号
    o ( g ( n ) ) = { f ( n ) ∣ ∀ c > 0 , ∃ n 0 , s . t . ∀ n > n 0 , 0 ≤ f ( n ) < c g ( n ) } \Large{\mathit{o}(g(n))=\{f(n)|\forall c>0,\exists n_0,\mathrm{s.t.} \forall n > n_0, 0\le f(n)< cg(n) \}} o(g(n))={f(n)∣∀c>0,n0,s.t.n>n0,0f(n)<cg(n)}

    • o o o 记号表示的是一个非渐进紧确的上界
  • Ω \mathit{\Omega} Ω​​ 记号
    Ω ( g ( n ) ) = { f ( n ) ∣ ∃ n 0 , c > 0 , s . t . ∀ n > n 0 , 0 ≤ c g ( n ) ≤ f ( n ) } \Large{\mathit{\Omega}(g(n))=\{f(n)|\exists n_0,c>0,\mathrm{s.t.} \forall n > n_0, 0\le cg(n)\le f(n) \}} Ω(g(n))={f(n)∣∃n0,c>0,s.t.n>n0,0cg(n)f(n)}

    • Ω \mathit{\Omega} Ω 记号表示的是一个渐进下界
  • ω \mathit{\omega} ω​ 记号
    ω ( g ( n ) ) = { f ( n ) ∣ ∀ c > 0 , ∃ n 0 , s . t . ∀ n > n 0 , 0 ≤ c g ( n ) < f ( n ) } \Large{\mathit{\omega}(g(n))=\{f(n)|\forall c>0,\exists n_0,\mathrm{s.t.} \forall n > n_0, 0\le cg(n)< f(n) \}} ω(g(n))={f(n)∣∀c>0,n0,s.t.n>n0,0cg(n)<f(n)}

    • ω \mathit{\omega} ω​ 记号表示的是一个非渐进紧确的下界
  • 性质

    • O ( g 1 ( n ) ) + O ( g 2 ( n ) ) = O ( m a x { g 1 ( n ) , g 2 ( n ) } ) O(g_1(n))+O(g_2(n))=O(\mathrm{max}\{g_1(n),g_2(n)\} ) O(g1(n))+O(g2(n))=O(max{g1(n),g2(n)})。对 Θ \mathit{\Theta} Θ 记号和 Ω \mathit{\Omega} Ω 记号同样成立。
    • O ( g 1 ( n ) ) ⋅ O ( g 2 ( n ) ) = O ( g 1 ( n ) ⋅ g 2 ( n ) ) O(g_1(n))·O(g_2(n))=O(g_1(n)·g_2(n)) O(g1(n))O(g2(n))=O(g1(n)g2(n))。对 Θ \mathit{\Theta} Θ 记号和 Ω \mathit{\Omega} Ω 记号同样成立。

阶的计算

  • 常见的复杂度关系:
    c < l o g n < n < n l o g n < n a < a n < n ! \Large{c<\mathrm{log}n<n<n\mathrm{log}n<n^a<a^n<n!} c<logn<n<nlogn<na<an<n!

    • 其中 c c c 是常数, a a a 是大于 1 的常数
  • 递归算法复杂度计算

    • 常用主定理计算
      T ( n ) = a T ( n b ) + f ( n ) \large{T(n)=aT(\frac{n}{b})+f(n)} T(n)=aT(bn)+f(n)

    • 三种情况下的 T ( n ) T(n) T(n)

      • ∃ ε , s . t . f ( n ) = O ( n l o g b a − ε ) \exist \varepsilon ,s.t.f(n)=O(n^{\mathrm{log}_ba-\varepsilon}) ε,s.t.f(n)=O(nlogbaε),则 T ( n ) = Θ ( n l o g b a ) T(n)=\mathit{\Theta}(n^{\mathrm{log}_ba}) T(n)=Θ(nlogba)
      • f ( n ) = Θ ( n l o g b a ) f(n)=\mathit{\Theta}(n^{\mathrm{log}_ba}) f(n)=Θ(nlogba),则 T ( n ) = Θ ( n l o g b a l o g n ) T(n)=\mathit{\Theta}(n^{\mathrm{log}_ba}\mathrm{log}n) T(n)=Θ(nlogbalogn)
      • ∃ ε , s . t . f ( n ) = Ω ( n l o g b a + ε ) \exist \varepsilon ,s.t.f(n)=\mathit{\Omega}(n^{\mathrm{log}_ba+\varepsilon}) ε,s.t.f(n)=Ω(nlogba+ε),且 ∀ c < 1 , ∃ n , s . t . a f ( n b ) ≤ c f ( n ) \forall c<1,\exist n,s.t.af(\frac{n}{b})\le cf(n) c<1,n,s.t.af(bn)cf(n),则 T ( n ) = Θ ( f ( n ) ) T(n)=\mathit{\Theta}(f(n)) T(n)=Θ(f(n))
    • f ( n ) f(n) f(n) 的执行时间是多项式时间,即 T ( n ) = a T ( n b ) + O ( n d ) T(n)=aT(\frac{n}{b})+O(n^d) T(n)=aT(bn)+O(nd)

      • d > l o g b a d>\mathrm{log}_ba d>logba​ 时,则 T ( n ) = O ( n d ) T(n)=O(n^d) T(n)=O(nd)
      • d = l o g b a d=\mathrm{log}_ba d=logba 时,则 T ( n ) = O ( n d l o g n ) T(n)=O(n^d \mathrm{log}n) T(n)=O(ndlogn)
      • d < l o g b a d<\mathrm{log}_ba d<logba 时,则 T ( n ) = O ( n l o g b a ) T(n)=O(n^{\mathrm{log}_ba}) T(n)=O(nlogba)

复杂性分类

  • 图灵机

    • k k k 个磁带,每个磁带都有一个磁头,可以对磁带的某个位置进行读或写操作
      • 有一个磁带是输入磁带,该磁带只能进行读操作。
      • 剩下的 k − 1 k-1 k1 个磁带是工作磁带,可以读也可以写。
    • 有一个寄存器,可以存储当前机器的状态。
    • 图灵机的状态集是有限的
      • 读取 k k k​ 个磁带上磁头对应位置的内容
      • 修改 k − 1 k-1 k1​ 磁带上磁头对应位置的内容
      • 改变寄存器中的状态
      • 每个磁头移动一个位置或保持不变
    • 机器有一套确定的规则
      • 如果确定了当前状态以及 k k k 个磁头位置的内容,则机器执行的步骤是确定的
  • 复杂度计算

    • P \mathrm{P} P 复杂度类:存在相应的确定性图灵机可以在输入长度的多项式时间内计算出结果

    • N P \mathrm{NP} NP 复杂度类:存在相应的确定性图灵机可以在输入长度的多项式时间内判断一个结果是否正确

      • N P C ( N P − C o m p l e t e ) \mathrm{NPC(NP-Complete)} NPC(NPComplete) 复杂度类也是 NP 的一个子集
    • 所有属于 P \mathrm{P} P 的问题也属于 N P \mathrm{NP} NP ,因此 P \mathrm{P} P N P \mathrm{NP} NP 的一个子集。

  • 18
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值