参考:
字母表(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),
多带图灵机:具有(有限的) k k k条磁带的图灵机,第一条磁带是只读输入带, 其他的 k − 1 k-1 k−1条纸带是读写工作带,其中一条用作输出带。
图灵机的输出:输入为 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:N→M,任意自然数都对应一个图灵机,每个图灵机都有无数个编码。由自然数 α \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 A≤B,即问题 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)=1⟺x∈L,那么说 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)=1⟺x∈L,那么说 M M M能识别 L L L。 R E RE RE类是所有可以被某台图灵机识别的语言的集合,也被称作递归可枚举语言。易知 R ⊆ R E R \subseteq RE R⊆RE
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|)) L∈DTIME(f(∣x∣))
P P P类:可以由确定性图灵机在多项式时间内解决的判定问题,即 P = ∪ k ∈ N D T I M E ( n k ) P=\cup_{k \in N} DTIME(n^k) P=∪k∈NDTIME(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=∪k∈NDTIME(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|)) L∈NTIME(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=∪k∈NNTIME(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=∪k∈NNTIME(2nk)
N P − h a r d NP-hard NP−hard类:如果所有的 N P NP NP类问题都可以多项式时间归约到问题 H H H,那么称 H H H是 N P − h a r d NP-hard NP−hard的,即 H H H不比 N P NP NP类问题容易。
N P − c o m p l e t e NP-complete NP−complete类:如果问题 C C C既属于 N P NP NP类又属于 N P − h a r d NP-hard NP−hard类,那么称 C C C是 N P C NPC NPC的。
c o − N P co-NP co−NP类:一个问题(或者说,语言) L ⊆ Σ ∗ L\subseteq \Sigma^* L⊆Σ∗属于 c o − N P co-NP co−NP类,当仅当它的补集属于 N P NP NP
N P − i n t e r m e d i a t e NP-intermediate NP−intermediate类:如果一个问题是 N P NP NP的,但它既不是 P P P的也不是 N P C NPC NPC的。