计算复杂性理论

参考:

  1. OI Wiki - 计算理论基础
  2. 各种复杂度类的记号与解释
  3. 7个复杂度类及它们的关系

问题

字母表(alphabet):有限非空集合 Σ \Sigma Σ,其中的元素被称为符号(symbol)

语言(language):字母表中元素组成的串的子集, L ∈ Σ ∗ L \in \Sigma^* LΣ;任何语言都可以转化为比特串,一般令 Σ = { 0 , 1 } \Sigma=\{0,1\} Σ={0,1}

判定问题:判定一个串 x x x是否属于一个语言 L L L,只能回答Yes/No。 f : Σ ∗ → { 0 , 1 } f:\Sigma^* \rightarrow \{0,1\} f:Σ{0,1}

功能性问题:回答不止Yes/No,可以是其他对象。 f : Σ ∗ → Σ ∗ f:\Sigma^* \rightarrow \Sigma^* f:ΣΣ

判定问题和功能性问题可以相互转化。如:判定两数之和是否等于第三个数可以转化为计算指示函数计算两数之和可以转化为判定两数之和是否等于第三个数

图灵机

(标准)图灵机:在一条双向无限延伸的磁带(tap)上操作的机器,拥有内部状态,还有可在磁带上读写移动的磁针。描述为七元组 M = ( Q , Γ , b , Σ , δ , q 0 , F ) M=(Q,\Gamma,b,\Sigma,\delta,q_0,F) M=(Q,Γ,b,Σ,δ,q0,F)

  1. Q Q Q有限非空的状态集合
  2. Γ \Gamma Γ有限非空的磁带字母表
  3. b ∈ Γ b \in \Gamma bΓ:空字符,唯一可以在磁带上无限频繁出现的字符
  4. Σ ⊆ Γ \ { b } \Sigma \subseteq \Gamma \backslash \{b\} ΣΓ\{b}:输入字母表,可以出现在输入带的符号
  5. q 0 ∈ Q q_0\in Q q0Q:初始状态
  6. F ⊆ Q F \subseteq Q FQ:接受状态集合。如果图灵机在某接受状态停机,则称输入带上的内容被这个图灵机接受
  7. δ : ( Q \ F ) × Γ ↛ Q × Γ × { L , R } \delta:(Q \backslash F) \times \Gamma \not \rightarrow Q \times \Gamma \times \{L,R\} δ:(Q\F)×ΓQ×Γ×{L,R}:转移函数,一个只对定义域子集有定义的partial function,若当前状态无定义则停机。
  8. { L , R } \{L,R\} {L,R}:磁针左右移动
  9. δ ( x , y ) = ( a , b , c ) \delta(x,y)=(a,b,c) δ(x,y)=(a,b,c):内部状态 x x x,磁针位置的字符 y y y,图灵机将内部状态修改为 a a a,将磁针位置的字符修改为 b b b,并将磁针左右移动。

多带图灵机:具有(有限的) k k k条磁带的图灵机,第一条磁带是只读输入带, 其他的 k − 1 k-1 k1条纸带是读写工作带,其中一条用作输出带。

图灵机的输出:输入为 x x x时的输出记为 M ( x ) M(x) M(x) M ( x ) = 1 M(x)=1 M(x)=1当仅当 M M M接受 x x x M ( x ) = 0 M(x)=0 M(x)=0当仅当 M M M不接受 x x x且可以在有限步停机。

确定性图灵机:每一步只能转移到一个状态,只能串行计算。

非确定性图灵机:每一步可以同时转移到多个状态,可以无限并行计算。如果某个分支在接受状态停机,那么图灵机停机并接受输入;如果在所有分支在拒绝状态停机,那么图灵机停机并拒绝输入。

任何确定性图灵机,都可以用类似于迭代加深度优先搜索的方式,在指数级时间内模拟一台非确定性图灵机多项式时间内的行为。

编码:存在满射函数 f : N → M f:N \rightarrow M f:NM,任意自然数都对应一个图灵机,每个图灵机都有无数个编码。由自然数 α \alpha α编码的图灵机记做 M α M_\alpha Mα

通用图灵机:存在图灵机 U U U,对于任意 x ∈ { 0 , 1 } ∗ x\in\{0,1\}^* x{0,1},若图灵机 M α M_\alpha Mα T ( ∣ X ∣ ) T(|X|) T(X)时间内停机,那么 U ( x , α ) U(x,\alpha) U(x,α) O ( T ( ∣ x ∣ ) log ⁡ T ( ∣ x ∣ ) ) O(T(|x|) \log T(|x|)) O(T(x)logT(x))时间内停机,且 U ( x , α ) = M α ( x ) U(x,\alpha)=M_\alpha(x) U(x,α)=Mα(x);否则, U ( x , α ) U(x,\alpha) U(x,α)也不会在有限时间内停机。

简单地说,存在一台通用图灵机,它能模拟任何一台图灵机,且花费的时间只会比这台被模拟的图灵机慢其运行时间的对数倍。

图灵不可计算:一个判定问题,如果存在一个总是有限步停机且能够正确判定的图灵机,那么这个问题是图灵可计算的,否则是图灵不可计算的。

由于图灵机有可数无穷个,语言有不可数无穷个,并且一个图灵机最多判定一个语言,因此存在可数无穷个图灵可计算问题以及不可数无穷个图灵不可计算问题

图灵停机问题:给定 α , x \alpha,x α,x,判断 M α M_\alpha Mα对于输入 x x x是否会有限步内停机。这是经典的图灵不可计算问题。

丘奇-图灵论题(The Church-Turing thesis):数学和逻辑学中所有的有效运算方法(有限条清晰的有限长指令、可在有限步内结束且得到正确结果)均可以用一台图灵机来表示和演算。这是一个假设,也是计算理论的一条基本公理。

复杂度类

多项式时间:如果存在 k > 0 k>0 k>0,使得算法的时间复杂度为 O ( n k ) O(n^k) O(nk),那么说算法是多项式时间的。多项式时间可分为强多项式时间和弱多项式时间,除此之外还有伪多项式时间。

归约:对于问题 A A A和问题 B B B,如果存在一个可计算函数 f f f,使得对于问题 A A A的任意实例 x x x,都有 A ( x ) = B ( f ( x ) ) A(x)=B(f(x)) A(x)=B(f(x)),我们称问题 A A A可以归约到问题 B B B,记做 A ≤ B A \le B AB,即问题 B B B不比问题 A A A容易。

R R R类:语言 L L L,图灵机 M M M,如果 M M M对于任意输入都能有限步停机,且 M ( x ) = 1    ⟺    x ∈ L M(x)=1 \iff x \in L M(x)=1xL,那么说 M M M判定 L L L R R R类是所有可以被某台图灵机判定的语言的集合,即所有图灵可计算的语言。

R E RE RE类:语言 L L L,图灵机 M M M,如果 M M M对于任意属于 L L L的输入都能有限步停机,且 M ( x ) = 1    ⟺    x ∈ L M(x)=1 \iff x \in L M(x)=1xL,那么说 M M M识别 L L L R E RE RE类是所有可以被某台图灵机识别的语言的集合,也被称作递归可枚举语言。易知 R ⊆ R E R \subseteq RE RRE

D T I M E DTIME DTIME类:语言 L L L,如果存在确定性图灵机 M M M可以判定 L L L,且对于任意输入 x x x它在 O ( f ( ∣ x ∣ ) ) O(f(|x|)) O(f(x))时间内停机,那么 L ∈ D T I M E ( f ( ∣ x ∣ ) ) L \in DTIME(f(|x|)) LDTIME(f(x))

P P P类:可以由确定性图灵机多项式时间内解决的判定问题,即 P = ∪ k ∈ N D T I M E ( n k ) P=\cup_{k \in N} DTIME(n^k) P=kNDTIME(nk)

E X P T I M E EXPTIME EXPTIME类:可以由确定性图灵机指数级时间内解决的判定问题,即 E X P T I M E = ∪ k ∈ N D T I M E ( 2 n k ) EXPTIME=\cup_{k \in N} DTIME(2^{n^k}) EXPTIME=kNDTIME(2nk)

N T I M E NTIME NTIME类:语言 L L L,如果存在非确定性图灵机 M M M可以判定 L L L,且对于任意输入 x x x它在 O ( f ( ∣ x ∣ ) ) O(f(|x|)) O(f(x))时间内停机,那么 L ∈ N T I M E ( f ( ∣ x ∣ ) ) L \in NTIME(f(|x|)) LNTIME(f(x))

N P NP NP类:可以由非确定性图灵机多项式时间内解决的判定问题,即 N P = ∪ k ∈ N N T I M E ( n k ) NP=\cup_{k \in N} NTIME(n^k) NP=kNNTIME(nk)

N E X P T I M E NEXPTIME NEXPTIME类:可以由非确定性图灵机指数级时间内解决的判定问题,即 N E X P T I M E = ∪ k ∈ N N T I M E ( 2 n k ) NEXPTIME=\cup_{k \in N} NTIME(2^{n^k}) NEXPTIME=kNNTIME(2nk)

N P − h a r d NP-hard NPhard类:如果所有的 N P NP NP类问题都可以多项式时间归约到问题 H H H,那么称 H H H N P − h a r d NP-hard NPhard的,即 H H H不比 N P NP NP类问题容易。

N P − c o m p l e t e NP-complete NPcomplete类:如果问题 C C C既属于 N P NP NP类又属于 N P − h a r d NP-hard NPhard类,那么称 C C C N P C NPC NPC的。

c o − N P co-NP coNP类:一个问题(或者说,语言) L ⊆ Σ ∗ L\subseteq \Sigma^* LΣ属于 c o − N P co-NP coNP类,当仅当它的补集属于 N P NP NP

N P − i n t e r m e d i a t e NP-intermediate NPintermediate类:如果一个问题是 N P NP NP的,但它既不是 P P P的也不是 N P C NPC NPC的。

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值