計算理論導論筆記
正則語言和自動機(Regular Languages and Automata)
DFA
確定性有限狀態自動機(Deterministic Finite state Automata/DFA)由一個五元組 \((Q,\Sigma,\delta,q_0,F)\) 唯一確定。
- \(Q\) 為狀態集合。
- \(\Sigma\) 為字符集。
- \(\delta:Q\times\Sigma\to Q\) 為狀態轉移函式。
- \(q_0\) 初始狀態。
- \(F\sube Q\) 為可接受狀態集(accept states)。
令 \(A\) 為機器 \(M\) 接受的所有串的集合,稱 \(A\) 是機器 \(M\) 的語言(Language),或者稱 \(M\) 接受/承認 \(A\),記作 \(\mathrm{L}(M)=A\)。
正則語言
對於某個語言,如果存在某個機器承認它,那麼我們稱其為正則語言(Regular Language)。
可以證明,所有正則語言的集合關於交集、並集、補集、笛卡爾積、級聯(Concatenation)運算、閉包(star)操作封閉。
級聯:\(A\circ B=\{ab|a\in A,b\in B\}\)。
閉包操作:\(A^{*}=\{x_1x_2\cdots x_k|k\ge 0,x_i\in A\}\)。
NFA
非確定性有限狀態自動機(Non-deterministic Finite state Automata/NFA)也可以由一個五元組 \((Q,\Sigma,\delta,q_0,F)\) 唯一確定。
- \(Q\) 為狀態集合。
- \(\Sigma\) 為字符集。(記 \(\Sigma_{\epsilon}=\Sigma\cup \{\epsilon\}\))
- \(\delta:Q\times\Sigma_{\epsilon}\to \mathcal{P}(Q)\) 為狀態轉移函式,其中 \(\mathcal{P}(\cdot)\) 為冪集。
- \(q_0\) 初始狀態。
- \(F\sube Q\) 為可接受狀態集(accept states)。
\(N=(Q,\Sigma,\delta,q_0,F)\),則串 \(w=w_1w_2\cdots w_n(w_i\in \Sigma)\) 被 \(N\) 接受當其可以被視作 \(w_1w_2\cdots w_m((w_i\in \Sigma_{\epsilon}))\) \(Q\) 中存在狀態序列 \(r_0,r_1,\dots,r_m\) 滿足 \(r_0=q_0\),\(r_{i+1}\in \delta(r_i,w_{i+1}),\forall 0\le i\le n-1\),\(r_m\in F\)。這裡的 \(\epsilon\) 為空字元。NFA 同樣也有其對應的語言。
顯然 NFA 是 DFA 的擴充套件。同時可以證明對於每個 NFA \((Q,\Sigma,\delta,q_0,F)\),存在和其識別語言相同的 DFA \((Q',\Sigma',\delta',q_0',F')\)。
先不考慮 \(\epsilon -\) 邊,考慮到每一個字元字首在 NFA 上對應的可能能跳到的節點都是 \(Q\) 的一個子集,於是我們直接令 \(Q'=\mathcal{P}(Q)\),然後 \(\forall S\in Q',a\in \Sigma\),令 \(\delta'(S,a)=\bigcup_{s\in S}\delta(s,a)\),接著取 \(q_0'=\{q_0\}\),最後令 \(F'=\{S\in Q'|\exist s\in S,s\in F\}\)。
如果加上 \(\epsilon -\) 邊差不多,取 \(E(S)\) 為 \(S\) 可以透過 \(0\) 或更多 \(\epsilon -\) 邊到達的狀態集,取 \(\delta'(S,a)=\bigcup_{s\in S}E(\delta(s,a))\),\(q_0'=E(\{q_0\})\) 即可。
正規表示式
\(R\) 是正規表示式(Regular Expressions)如果 \(R\) 是(下面 \(R_1,R_2\) 是一些正規表示式):
- 一個字元 \(a(a\in \Sigma)\) 的集合
- 長度為 \(0\) 的字元 \(\epsilon\)
- \(\varnothing\)
- \(R_1\cup R_2\)
- \(R_1\circ R_2\)
- \(R_1^{*}\)
定理:一個語言正則當且僅當存在正規表示式描述它。
則表示式描述的一定是正則語言:按照正則語言的定義構造 DFA 即可。
正則語言一定可以用正規表示式描述,這個證明有點複雜。
首先我們引入推廣性確定性有限自動機(GNFA),區別在於每條邊上除了可能是空字元 \(\epsilon\)、字符集中字元,還有可能是一個正規表示式。然後整個構造方法大概就是由 NFA 不斷縮小,最後只剩下兩個狀態為止,此時即找到該正則語言對應的正規表示式。
對於一個 DFA,我們先透過一些簡單的處理讓其變成 NFA,同時只有一個初始節點與接受節點,且初始節點沒有入邊,接受節點沒有出邊。刪減過程就是每次選擇一個非初始節點並且非接受節點的節點 \(x\),然後對於每對節點 \(s,t\),更新 \(s\to t\) 的邊為 \((s\to t)\cup(s\to x)\circ(x\to x)^{*}\circ(x\to t)\),接著刪掉 \(x\)。重複該過程直到只剩下初始節點與接受節點,此時它們之間的邊即為正則語言對應的正規表示式。
非正則語言
泵引理(Pumping Lemma):如果 \(A\) 是正則語言,那麼存在 \(p\) 滿足,對於任意長度大於等於 \(p\) 的 \(A\) 中字串 \(s\),\(s\) 總能切成三部分 \(s=xyz\) 滿足 \(\forall i\ge 0,xy^iz\in A,|y|>0,|xy|\le p\)。(直觀來說就是存在迴圈節,這個比較好證,由狀態有限,直接取 \(p=|Q|\) 即可,總有一個狀態被經過了至少兩次)
上下文無關語言和下推自動機(Context Free Languages and Pushdown Automata)
上下文無關語言(CFL)
上下文無關語法是一個四元組 \((V,\Sigma,R,S)\),其中:
- \(V\) 是一個叫做變數(variables)的有限集合。
- \(\Sigma\) 是一個和 \(V\) 不相交的有限集合,叫做終結符(terminals)集合。
- \(R\) 是一個規則(rules)的有限集,每條規則把一個變數對映成一個變數和終結符的字串。
- \(S\in V\) 是開始變數。
令 \(u,v,w\) 是變數和終止符組成的字串,如果 \(A\to w\) 是該語法的一條規則,那麼我們稱 \(uAv\) 可以產生(yields)\(uwv\),記作 \(uAv\Rightarrow uwv\)。稱 \(u\) 可以產生(derives)\(v\),同樣記作 \(u\Rightarrow v\),當 \(u=v\) 或者存在序列 \(u_1,u_2,\dots,u_k(k\ge 0)\) 滿足 \(u\Rightarrow u_1\Rightarrow u_2\Rightarrow \cdots \Rightarrow v\)。
那麼所有可以由 \(S\) 產生的字串集合稱作該語法的語言。
下推自動機(PDA)
下推自動機由六元組 \((Q,\Sigma,\Gamma,\delta,q_0,F)\) 組成,其中:
- \(Q\) 狀態集。
- \(\Sigma\) 輸入字符集。
- \(\Gamma\) 堆疊字符集。
- \(\delta:Q\times \Sigma_{\epsilon}\times \Gamma_{\epsilon}\to \mathcal{P}(Q\times \Gamma_{\epsilon})\) 轉移函式。
- \(q_0\in Q\) 起始狀態。
- \(F\sube Q\) 接受狀態集。
一個字串 \(w\) 可以被下推自動機 \(M=(Q,\Sigma,\Gamma,\delta,q_0,F)\) 接受當 \(w\) 可以被視作 \(w_1,w_2,\dots,w_m(w_i\in \Sigma_{\epsilon})\),並且存在狀態序列 \(s_0,s_1,s_2,\dots,s_m\) 和字串 \(t_1,t_2,\dots,t_m\) 滿足:
- \(s_0=q_0\) 並且 \(t_0=\epsilon\)。
- 對於 \(i=0,1,\dots,m-1\),滿足 \((s_{i+1},b)\in \delta(s_i,w_{i+1},a)\),其中 \(t_i=ar,t_{i+1}=br\) 並且 \(a,b\in \Gamma_{\epsilon},r\in \Gamma^*\)。
- \(s_m\in F\)。
兩者關係
上下文無關語言和下推自動機的計算能力是一樣的。
從語言到自動機:一個很簡單的想法就是考慮展開規則是有限的,所以直接用堆疊描述當前歷史所有在展開哪個規則以及展開到哪一步即可。
從自動機到語言:
我們可以很簡單地修改 PDA 使得接受狀態只有一個,且最後棧彈空,且棧只存在加入和刪除,不存在替換。
\(P=(Q,\Sigma,\Gamma,\delta,q,\{q_a\}),G=(V,\Sigma,R,S)\),取 \(V=\{A_{p,q}|p,q\in Q\}\),取三條規則。
- \(\forall p,q,r,s\in Q,u\in \Gamma,a,b\in \Sigma_{\epsilon}\),若 \(\delta(p,a,\epsilon)\ni (r,u),\delta(s,b,u)\ni (q,\epsilon)\),加入規則 \(A_{p,q}\Rightarrow aA_{r,s}b\)。
- \(\forall p,q,r\in Q\),加入規則 \(A_{p,q}\Rightarrow A_{p,r}A_{r,q}\)。
- \(\forall p\in Q\),加入規則 \(A_{p,p}\Rightarrow \epsilon\)。
取 \(S=A_{q,q_a}\)。
CFL 的邊界
Pumping Lemma for CFLs:如果 \(A\) 是 CFL,那麼存在 \(p\) 滿足如果 \(s\in A\) 且 \(|s|\ge p\),那麼 \(s\) 可以被切分為五個部分 \(uvxyz\) 滿足 \(\forall i\ge 0,uv^ixy^iz\in A\) 且 \(|vy|>0,|vxy|\le p\)。
怎麼證明:考慮 CFL 按照語法構造過程中形成的樹結構,樹只要足夠大必然存在兩個相同的變數出現在一條直上直下的路徑上,那麼用上面的變數樹替換下面的變數樹即可造成重複。
舉例:\(\{a^nb^nc^n|n\in \mathbb{N}\},\{ww|w\in \{0,1\}^*\}\) 不是上下文無關模型。
圖靈機
圖靈機(Turing Machine/TM)
\(k\) 紙帶圖靈機是一個七元組 \((Q,\Sigma,\Gamma,\delta,q_0,q_{accept},q_{reject})\):
- \(Q\) 狀態集,\(\Sigma\) 輸入字符集,\(\Gamma\) 紙帶字符集。
- \(\delta:Q\times \Gamma^k\to Q\times \Gamma^k\times \{L,S,R\}^k\)。
- \(q_0\) 開始狀態,\(q_{accept}\) 接受狀態,\(Q_{reject}\) 拒絕狀態。
可以看成是一個布林函式。
當前狀態 \(q;x=(x_1,\dots,x_k)\),一次轉移步驟 \(\delta(q,x)=(q',x',z),z\in \{L,S,R\}^k\)。
一個格局(configuration):當前狀態,紙帶內容,當前紙帶頭位置。
進入 \(q_{accept},q_{reject}\) 停機。
可識別 可判定
如果一個語言可以被圖靈機 \(M\) 識別,就稱其是可識別的(recognizable),然而還是有可能存在輸入使得 \(M\) 無法停機。
如果一個圖靈機 \(M\) 從來不會死迴圈就稱其可以判定一個語言,繼而有可判定的(decidable)定義。
對於一個函式 \(f:\{0,1\}^*\to \{0,1\}^*\),稱 \(M\) 計算 \(f\) 如果對於任意輸入 \(x\),\(M\) 都會進入停機狀態且在輸出紙帶上面寫了 \(f(x)\)。
稱圖靈機 \(M\) 執行時間為 \(T(n)\) 當對任意輸入 \(x\),圖靈機執行不超過 \(T(|x|)\) 步就會停機。
\(T:\mathbb{N}\to \mathbb{N}\) 是時間可構造(time-constructible)當 \(T(n)\ge n\) 且存在一個圖靈機在時間 \(T(n)\) 內計算 \(x\rightarrow T(|x|)\)。
大字符集
對於任意圖靈機 \(M\) 在時間 \(T(n)\) 內計算函式 \(f\),使用紙帶字符集 \(\Gamma\),那麼存在另一個圖靈機 \(M'\) 在時間 \(O(T(n)\log |\Gamma|)\) 內計算函式 \(f\) 而只用紙帶字符集 \(\{0,1,\triangle,\underline{ }\}\)。
把大字符集編碼即可。
多條紙帶
對於任意 \(k\) 條紙帶圖靈機 \(M\) 在時間 \(T(n)\) 內計算函式 \(f\),那麼存在另一個只用一條紙帶的圖靈機 \(M'\) 在時間 \(O(kT^2(n))\) 內計算函式 \(f\)。
Church-Turing Thesis
任何演算法等價於一個圖靈計算過程。
通用圖靈機(Universal TM)
存在一個通用圖靈機可以模擬任何圖靈機執行。
存在一個圖靈機滿足 \(\forall x.\alpha\in \{0,1\}^*,U(x,\alpha)=M_{\alpha}(x)\),其中 \(\alpha\) 代表了圖靈機 \(M_{\alpha}\),如果對於某個輸入 \(x\),\(M_{\alpha}\) 執行了 \(T\) 步停機,那麼 \(U(x,\alpha)\) 執行了 \(CT\log T\) 步停機,其中 \(C\) 是取決於 \(M_{\alpha}\) 的一個常數。
圖靈機的能力
存在不能被任何圖靈機計算的布林函式嗎?
存在不能被任何圖靈機識別/判定的語言嗎?
存在能被圖靈機識別但是不能被判定的語言嗎?
可計算性
\(\mathrm{UC}\)
定義一個布林函式 \(\mathrm{UC}:\{0,1\}^*\to \{0,1\}\),對於任意輸入 \(\alpha\),設 \(\alpha\) 表示的圖靈機為 \(M_{\alpha}\),那麼如果 \(M_{\alpha}(\alpha)=1\) 表示 \(M_{\alpha}\) 接受字串 \(\alpha\),那麼我們取 \(\mathrm{UC}(\alpha)=0\)(拒絕),否則我們取 \(\mathrm{UC}(\alpha)=1\)(接受)。
那麼 \(\mathrm{UC}\) 就是不可計算,其對應的語言就是不可判定的。
證明:假設存在圖靈機 \(M\) 計算 \(\mathrm{UC}\),令 \(<M>\) 為 \(M\) 的字串表示,那麼有 \(\mathrm{UC}(<M>)=M(<M>)\) 而 \(\mathrm{UC}(<M>)\ne M(<M>)\) 矛盾。
\(\mathrm{HALT}\)
考慮語言 \(\mathrm{HALT}=\{<M,\alpha>|M\text{ halts on }\alpha\}\),那麼該語言是不可判定的。(PS:該語言是可識別的,考慮直接模擬將 \(\alpha\) 輸入 \(M\)。)
考慮反證法,假設存在這樣一個判定該語言的圖靈機 \(M_{\mathrm{HALT}}\),那麼對於任意字串 \(\alpha\) 定義的圖靈機 \(M_{\alpha}\),考慮用 \(<M_{\alpha},\alpha>\) 輸入 \(M_{\mathrm{HALT}}\),如果被接受了,說明不會死迴圈,然後直接模擬可以得出 \(M_{\alpha}(\alpha)\) 取反,否則輸出 \(1\),由此我們透過該圖靈機構造出了一個計算 \(\mathrm{UC}\) 的圖靈機,矛盾。
\(A_{\mathrm{TM}}\)
考慮語言 \(A_{\mathrm{TM}}=\{<M,\alpha>|M\text{ accepts }\alpha\}\),那麼該語言不可判定。
同樣用判定語言 \(A_{\mathrm{TM}}\) 的圖靈機 \(M_A\) 構造 \(M_{\mathrm{UC}}\),對於輸入 \(\alpha\) 取 \(M_A(\alpha,\alpha)\) 即可。
對映歸約
對於兩個問題 \(A,B\),我們將 \(A\) 規約成 \(B\) 來解決 \(A\),可以先解決 \(B\) 然後用這個解決方法解決 \(A\)。
我們稱一個語言 \(A\) 可以被對映歸約(mapping reducible)到語言 \(B\),記作 \(A\le_m B\),如果存在一個可計算的函式 \(f:\Sigma^*\to \Sigma^*\) 滿足 \(\forall w,w\in A\) 當且僅當 \(f(w)\in B\)。
如果 \(A\le_m B\),那麼:\(B\) 可判定 \(\Rightarrow\) \(A\) 可判定,\(A\) 不可判定 \(\Rightarrow\) \(B\) 不可判定。
\(E_{\mathrm{TM}}\)
考慮語言 \(E_{\mathrm{TM}}=\{<M>|M \text{ accepts nothing}\}\),那麼該語言不可判定。
考慮證明 \(A_{\mathrm{TM}}\le_m E_{\mathrm{TM}}\) 或者 \(A_{\mathrm{TM}}\le_m \overline{E_{\mathrm{TM}}}\)。
\(EQ_{\mathrm{TM}}\)
考慮語言 \(EQ_{\mathrm{TM}}=\{<M_1,M_2>|M_1 \text{ and }M_2 \text{ are TMs and } L(M_1)=L(M_2)\}\),那麼該語言不可判定。
考慮證明 \(E_{\mathrm{TM}}\le_m EQ_{\mathrm{TM}}\)。
回顧
\(A\) 可識別不等價於 \(\overline{A}\) 可識別。
\(A\) 可判定等價於 \(\overline{A}\) 可判定。
定理:\(A\) 可判定等價於 \(A\) 可識別且 \(\overline{A}\) 可識別。
時間複雜性(Time Complexity)
複雜性類
複雜性類:可以由一定量的計算資源計算的問題(語言)構成的集合。
定義時間函式 \(T:N\to N\) 任意函式,定義 \(\mathrm{DTIME}(T(n))\) 為可以被某些圖靈機在 \(O(T(n))\) 時間內解決的問題(判定的語言集合)。
多項式時間複雜性類 \(\mathrm{P}=\cup_{c\ge 0}\mathrm{DTIME}(n^c)\)。
考慮兩個時間可建構函式 \(f,g\),若 \(f(n)=o(g(n))\),則顯然 \(\mathrm{DTIME}(f(n))\sube \mathrm{DTIME}(g(n))\)。能否構造語言 \(A\) 使得 \(A\in \mathrm{DTIME}(g(n))\) 而 \(A\notin \mathrm{DTIME}(f(n))\)?
考慮構造圖靈機 \(M\):對於任意輸入 \(x\),取 \(x\) 對應的圖靈機 \(M_x\),在 \(O(g(n))\) 時間內模擬 \(M_x(x)\),如果結果是 \(1\) 輸出 \(0\),否則輸出 \(1\)。那麼顯然 \(\mathrm{L}(M)\in \mathrm{DTIME}(g(n))\)。如果 \(\mathrm{L}(M)\in \mathrm{DTIME}(f(n))\),那麼存在圖靈機 \(M'\) 在時間 \(O(f(n))\) 內判定 \(\mathrm{L}(M)\),\(M'\) 的字串表示為 \(<M'>\) 則有 \(M'(<M'>)=M(<M'>)\) 矛盾。
多項式時間可驗證複雜性類 \(\mathrm{NP}\),一個語言 \(L\) 屬於 \(\mathrm{NP}\) 當存在多項式函式 \(P:N\to N\) 和一個多項式時間圖靈機 \(M\) 滿足對於任意 \(x\in \{0,1\}^*\),\(x\in L\) 當且僅當 \(\exist u\in \{0,1\}^{P(|x|)}\) 滿足 \(M(x,u)=1\)。此時也稱 \(M\) 是 \(L\) 的驗證機(verifier),\(u\) 被稱作 \(x\) 的驗證(certificate)。
定義 \(\mathrm{EXP}=\cup_{c\ge 0}\mathrm{DTIME}(2^{n^c})\),則有 \(\mathrm{P}\sube \mathrm{NP}\sube \mathrm{EXP}\)。已經有證明 \(\mathrm{P}\subsetneq \mathrm{EXP}\)。
非確定性圖靈機
\(\mathrm{NP}\) 的最初定義是由非確定性圖靈機(non-deterministic Turing machine/NDTM)引入的,NDTM 和 TM 的區別在於對於每個格局有多種可能的轉移,只要存在一個分支接受一個輸入即認為接受,只有所有分支都不接受即認為不接受。
同樣類似地,我們可以定義在所有可能輸入的所有分支都會停機的 NDTM 為判定機(decider),對於一個函式 \(T:N\to N\),稱一個 NDTM 執行時間為 \(T(n)\) 如果對於任意長度為 \(n\) 的輸入,其所有分支都在 \(T(n)\) 步驟內停機。
同樣地,對於 \(T:N\to N\),\(\mathrm{NTIME}(T(n))\) 為可以被某些非確定性圖靈機在 \(O(T(n))\) 時間內解決的問題(判定的語言集合)。則有 \(\mathrm{NP}=\cup_{c\ge 0}\mathrm{NTIME}(n^c)\)。
兩種 \(\mathrm{NP}\) 的定義等價直接考慮驗證 \(u\) 與不確定性的關係即可。
多項式時間規約
兩者關係只需要考慮 \(\mathrm{NP}\) 中最難的那一類問題,使用歸約的思想來定義難度。不過這裡考慮的是時間複雜性,所以我們需要對歸約過程做一點修改,就是在研究兩種複雜性類的時候,歸約過程不應該比其中更容易的複雜性類更復雜。在比較 \(\mathrm{P}\) 和 \(\mathrm{NP}\) 過程中,規約過程應該只考慮多項式時間歸約(Polynomial Time Reduction)。
多項式時間歸約:稱 \(A\) 可以多項式時間歸約到 \(B\),寫作 \(A\le_p B\) 當存在一個多項式時間可計算函式 \(f:\Sigma^*\to \Sigma^*\) 滿足 \(\forall w,w\in A\Leftrightarrow f(w)\in B\)。
\(\mathrm{NP-hard}\) 和 \(\mathrm{NP-complete}\)
語言 \(L\) 被稱作是 \(\mathrm{NP-hard}\) 當且僅當 \(\forall A\in\mathrm{NP},A\le_pL\)。語言 \(L\) 被稱作是 \(\mathrm{NP-complete}\) 當且僅當 \(L\) 是 \(\mathrm{NP-hard}\) 且 \(L\in NP\)。
由此我們可以得出,對於 \(\mathrm{NP-complete}\) 中的任意語言 \(L\),\(L\in P\) 等價於 \(\mathrm{P}=\mathrm{NP}\)。由此我們只需要研究 \(\mathrm{NP-complete}\) 的那些語言。
布林表示式(Boolean formulas)與 \(\mathrm{3SAT}\)
變數 \(u_1,u_2,\dots,u_n\) 的布林表示式 \(\varphi\) 由這些變數和三個邏輯運算子 \(\land,\lor,\lnot\) 組成,\(\lnot u\) 也可用 \(\overline{u}\) 表示。\(\varphi\) 也可以被視作一個布林函式 \(\{0,1\}^n\to \{0,1\}\)。
文字(literal)是一個原子公式(的肯定)(positive)或一個原子公式的否定(negative),分別可以稱作是文字和否文字。
析取(Disjunctive)類似或,析取子句(Disjunctive clause)是僅由或運算子/析取操作連線起來的文字組成的布林表示式。
合取(Conjunctive)類似與,合取子句(Conjunctive clause)是僅由與運算子/合取操作連線起來的文字組成的布林表示式。
\(\varphi\) 是合取正規化(CNF/Conjunctive Normal Form)當它是由若干析取語句的合取操作組成,形如 \(\land_i(\lor_j v_{i,j})\)。同樣有析取正規化(DNF/Disjunctive Normal Form)由若干合取語句的析取操作組成。這兩個都是命題公式(propositional formula)的標準形式。
\(k\)CNF 指每個語句只有 \(\le k\) 個文字。
Cook-Levin Theorem:定義語言 \(\mathrm{SAT}\) 由所有可滿足的 CNF 語句組成;語言 \(\mathrm{3SAT}\) 由所有可滿足的 \(3\)CNF 語句組成。則二者都是 \(\mathrm{NP-complete}\) 的。
\(\mathrm{SAT}\in\mathrm{NP}\):其驗證即為一組合法的賦值。
\(\forall L\in \mathrm{NP},L\le_p\mathrm{SAT}\):考慮驗證機 \(M\) 的計算過程,使用長度為多項式級別的 CNF 表示式描述。
\(\mathrm{SAT}\le_p\mathrm{3SAT}\) 知 \(\mathrm{3SAT}\in\mathrm{NP-complete}\)。
更多 \(\mathrm{NP}\) 相關例子
獨立集(Independent Set)
\(\mathrm{INDSET}\) 判斷圖 \(G\) 是否有大小為 \(k\) 的獨立集,則 \(\mathrm{INDEST}\in \mathrm{NP-complete}\)。
\(\mathrm{INDSET}\in \mathrm{NP}\):驗證為點集。
\(\mathrm{3SAT}\le_p \mathrm{INDSET}\):考慮 \(\mathrm{3SAT}\) 中的每一個子句,共有 \(2^3-1\) 種合法的狀態,而且只有其中一個狀態能夠存在,於是連一個大小為 \(7\) 的團,而對於團外的任意兩個狀態,如果其衝突則連一條邊,然後看是否有子句數量那麼多的獨立集即可。
點覆蓋(Vertex Cover)
\(\mathrm{Vertex-Cover}\) 判斷圖 \(G\) 是否有大小為 \(k\) 的點覆蓋,則 \(\mathrm{Vertex-Cover}\in \mathrm{NP-complete}\)。
\(\mathrm{Vertex-Cover}\in \mathrm{NP}\):驗證為點集。
\(\mathrm{INDSET}\le_p\mathrm{Vertex-Cover}\):有大小為 \(k\) 的點覆蓋,取反得到大小為 \(n-k\) 的獨立集。
0/1整數規劃(0/1 Integer Programming)
\(\mathrm{IPROG}\) 給定 \(m\) 個有理數係數的線性約束,判斷是否有合法的給每個變數賦 \(\{0,1\}\) 滿足每個約束的方法,則 \(\mathrm{IPROG}\in \mathrm{NP-complete}\)。
\(\mathrm{IPROG}\in \mathrm{NP}\):驗證為一種合法賦值。
\(\mathrm{SAT}\le_p\mathrm{IPROG}\):析取子句每個文字和大於等於 \(1\) 即可。
哈密頓路徑(Hamiltonian Path)
\(\mathrm{dHAMPATH}\) 判斷有向圖是否有哈密頓路徑,則 \(\mathrm{dHAMPATH}\in \mathrm{NP-complete}\)。
\(\mathrm{dHAMPATH}\in \mathrm{NP}\):驗證是路徑順序。
\(\mathrm{SAT}\le_p\mathrm{dHAMPATH}\):對於任意的 \(n\) 個變數 \(m\) 個子句的 \(\mathrm{SAT}\),每個變數構造 \(2m+2\) 個點按順序排列,相鄰點連雙向邊,經過這些點時使用從左到右表示該變數取 \(1\),從右到左表示該變數取 \(0\)。然後額外有開始點和結束點,接著我們按任意順序確定每個變數的取值,也即將前一個變數的兩個端點都連到下一個變數的兩個端點,開始點和結束點同樣如此操作,接著對於每個限制構造一個點,如果限制 \(j\) 包含了 \(u_i\),那麼將第 \(i\) 個變數的第 \(2j\) 個點連到限制 \(j\) 的點再連到第 \(i\) 個變數的第 \(2j+1\) 個點,而如果包含 \(\lnot u_i\) 則反著來。不妨認為這裡的第 \(2j\) 個點和第 \(2j+1\) 個點互為匹配點。
首先如果存在合法賦值那麼如此按照順序走即可。
如果構造的圖存在哈密頓迴路,那麼我們可以證明其必然是按照順序走的,如果有透過限制構造的點跳躍的情況那麼其匹配點只和一個額外點連線,就必須是結束點,矛盾,所以按照走的順序依次給每個變數賦值即可。
同樣有 \(\mathrm{dHAMCYCLE}\) 哈密頓環(Hamiltonoian Cycle),哈密頓路徑很容易歸約到哈密頓環(新增一個超級點連向所有點且被所有點連),所以也是 \(\mathrm{NP-complete}\)。
而無向圖的情況容易變為有向圖。
旅行商問題(TSP/Traveling Salesman)是否有長度小於等於 \(k\) 的經過所有點的方案,顯然可以由哈密頓路徑歸約。
\(\mathrm{coNP}\)
語言 \(L\in \mathrm{coNP}\) 當 \(\lnot L\in \mathrm{NP}\),有 \(\mathrm{P}\sube \mathrm{NP}\cap \mathrm{coNP}\)。
另一種定義方式;語言 \(L\in \mathrm{coNP}\) 當存在多項式函式 \(P:N\to N\) 和多項式時間圖靈機 \(M\) 滿足對於任意 \(x\in \{0,1\}^*\),有 \(x\in L\) 當且僅當 \(\forall u\in \{0,1\}^{P(|x|)}\) 有 \(M(x,u)=0\)。
類似的,我們有 \(\mathrm{coNP-complete}\),且 \(\lnot \mathrm{SAT}\in\mathrm{coNP-complete}\)。
\(\mathrm{NEXP}\)
\(\mathrm{NEXP}=\cup_{c\ge 0}\mathrm{NTIME}(2^{n^c})\)。
有 \(\mathrm{P}\sube \mathrm{NP}\sube\mathrm{EXP}\sube \mathrm{NEXP}\)。
如果 \(\mathrm{P}=\mathrm{NP}\),我們可以推出 \(\mathrm{EXP}=\mathrm{NEXP}\)。
空間複雜性(Space Complexity)
類似時間複雜性,在圖靈機中,使用過的工作紙帶格子(work tapes,注意輸入紙帶格子不算在內)被稱作使用過的空間。定義函式 \(S:N\to N\),如果圖靈機 \(M\) 對於任意長度 \(n\) 的輸入最多使用 \(S(n)\) 個工作紙帶格子,那麼我們可以稱 \(M\) 執行空間消耗為 \(S(n)\)。
稱語言 \(L\in\mathrm{SPACE(S(n))}\) 當存在圖靈機 \(M\) 在空間 \(S(n)\) 判定 \(L\);類似的稱 \(L\in\mathrm{NSPACE(S(n))}\) 當存在非確定性圖靈機 \(M\) 在空間 \(S(n)\) 判定 \(L\)。特別的要求 \(S(n)\) 可以在 \(S(n)\) 空間內計算。
由於不考慮輸入紙帶格子,所以 \(S(n)<n\),然而一般要求 \(S(n)\ge \log n\) 因為要記錄讀到哪裡了。
定理:$\mathrm{DTIME}(S(n))\sube \mathrm{SPACE}(S(n))\sube \mathrm{NSPACE}(S(n))\sube \mathrm{DTIME}(2^{O(S(n))}) $。
格局圖(Configuration Graph)
回憶圖靈機的格局:狀態,紙帶頭位置,所有的紙帶內容。
對於一個空間 \(S(n)\) 的圖靈機,工作紙帶內容最多 \(S(n)\) 有用。
對於任意空間 \(S(n)\) 的(非確定性)圖靈機 \(M\) 和輸入 \(x\in \{0,1\}^*\),其對應的格局圖是一個有向圖,其中每個節點對應 \(M\) 的所有可能的格局,從格局 \(C\) 到 \(C'\) 有邊當且僅當根據 \(M\) 的轉移函式,\(C\) 可以走一步到達 \(C'\),這個圖記作 \(G_{M,x}\)。
可以修改 \(M\) 使得接受格局只有一個 \(C_{\text{accept}}\),則 \(M\) 接受輸入 \(x\) 當且僅當 \(G_{M,x}\) 中存在一條從 \(C_{\text{start}}\) 到 \(C_{\text{accept}}\) 的有向路徑。
如果 \(M\) 空間為 \(S(n)\),則格局圖中的每一個點都可以由 \(c(S(n))\) 個位元位表示,在格局圖上面 bfs/dfs 可以得到 \(\mathrm{NSPACE}(S(n))\sube \mathrm{DTIME}(2^{O(S(n))})\)。
空間複雜性類
\(\mathrm{PSPACE}=\cup_{c\ge 0}\mathrm{SPACE}(n^c)\)。
\(\mathrm{NPSPACE}=\cup_{c\ge 0}\mathrm{NSPACE}(n^c)\)。
\(\mathrm{L}=\mathrm{SPACE}(\log n)\)。
\(\mathrm{NL}=\mathrm{NSPACE}(\log n)\)。
注意到 \(\mathrm{NP}\sube \mathrm{PSPACE}\)。
\(\mathrm{PATH}=<G,s,t>\) 表示有向圖 \(G\) 中是否存在 \(s\) 到 \(t\) 的路徑,那麼 \(\mathrm{PATH}\in \mathrm{NL}\),猜每一步往哪裡走即可,而其是否屬於 \(\mathrm{L}\) 還是 open 的。
Space Hierarchy Theorem:如果 \(f,g\) 是空間可構造的函式滿足 \(f(n)=o(g(n))\),那麼有 \(\mathrm{SPACE}(f(n))\subsetneq \mathrm{SPACE}(g(n))\)。
\(\mathrm{PSPACE}\)-Completeness
語言 \(L\in \mathrm{PSPACE-hard}\) 當 \(\forall L'\in \mathrm{PSPACE}\),\(L'\le_p L\);如果還有 \(L\in \mathrm{PSPACE}\),則稱 \(L\in \mathrm{PSPACE-complete}\)。注意這裡的 \(\le_p\) 還是多項式時間歸約。
帶量詞的布林表示式(QBF/Quantified Boolean Formula)的正確性是 \(\mathrm{PSPACE-complete}\) 的。
QBF 是一個形如 \(\psi=Q_1x_1Q_2x_2\dots Q_nx_n,\phi(x_1,x_2,\dots,x_n)\) 的布林表示式,其中 \(Q_i\) 是 \(\forall\) 或者 \(\exists\),而 \(\phi\) 是一個普通的布林表示式。
定義 \(\mathrm{TQBF}\) 為所有真的 QBF,其為 \(\mathrm{PSPACE-complete}\)。
具體而言解決 \(\mathrm{TQBF}\) 的演算法就是按照順序遞迴列舉 \(x_i\) 的取值即可,由於空間可以重複利用所以容易發現其屬於 \(\mathrm{PSPACE}\)。
對於任意 \(L\in \mathrm{PSPACE}\),令 \(M\) 為在 \(S(n)\) 空間內判定 \(L\) 的圖靈機,考慮 \(M\) 的格局圖,令 \(m=O(S(n))\) 為需要編碼 \(M\) 格局的位元數,則存在長度為 \(O(m)\) 的表示式 \(\phi_{M,x}\) 滿足對於任意兩個格局 \(C,C'\),\(\phi_{M,x}(C,C')=1\) 當且僅當 \(C\) 走一步可以到達 \(C'\)。
更一般地,我們可以構造一個多項式大小的 QBF \(\psi_i\) 滿足對任意格局 \(C,C'\),\(\psi(C,C')=1\) 當且僅當 \(G_{M,x}\) 存在長度不超過 \(2^i\) 的 \(C\) 到 \(C'\) 的有向路徑。
取 \(\psi_0=\phi\),而 \(\psi_i(C,C')=\exist C'',\psi_{i-1}(C,C'')\land \psi_{i-1}(C'',C)\),不過該轉移每次大小乘以 \(2\) 不夠優秀,注意到:
而 \(A=B\Leftrightarrow (A\land B)\lor (\lnot A\land \lnot B),A\Rightarrow B\Leftrightarrow \lnot A\lor B\),由此我們節省大小,記 \(S_i\) 表示 \(\psi_i\) 的大小,我們有 \(S_i=S_{i-1}+O(m)\),進而我們找到了多項式時間歸約方法。
綜上 \(\forall L\in\mathrm{PSPACE},L\le_p\mathrm{TQBF}\),由此 \(\mathrm{TQBF}\in\mathrm{PSPACE-complete}\)。
注意到上述證明沒有要求 \(M\) 一定要是確定性圖靈機,所以同樣有 \(\mathrm{TQBF}\in\mathrm{NPSPACE-hard}\),進而 \(\mathrm{PSPACE}=\mathrm{NPSPACE}\)。
\(\mathrm{NL}\) 和 \(\mathrm{coNL}\)
回憶 \(\mathrm{NL}=\mathrm{NSPACE}(\log n)\)。
另一種等價定義:語言 \(L\in \mathrm{NL}\) 當存在確定性圖靈機 \(M\)(驗證機)以及一個額外的僅讀一次的輸入紙帶(這個指的是輸入的驗證 \(u\)),以及一個多項式函式 \(P:N\to N\) 滿足對於任意 \(x\),\(x\in L\) 當且僅當存在 \(u\in \{0,1\}^{P(|x|)}\) 滿足 \(M(x,u)=1\),其中 \(M\) 最多使用 \(O(\log|x|)\) 額外工作紙帶空間。
二者等價考慮驗證和非確定性的關係即可。注意到僅讀一次是因為 \(\log |x|\) 的空間使得其無法記錄之前所有的選擇。
類似 \(\mathrm{coNP}\),我們可以定義 \(\mathrm{coNL}\),例如 \(\lnot \mathrm{PATH}=\{<G,s,t>\}\) 滿足 \(G\) 中不存在 \(s\) 到 \(t\) 的邊,由於 \(\mathrm{PATH}\in \mathrm{NL-complete}\),同樣有 \(\lnot\mathrm{PATH}\in\mathrm{coNL-complete}\)。
事實上可以證明 \(\lnot\mathrm{PATH}\in\mathrm{NL}\),從而 \(\mathrm{NL}=\mathrm{coNL}\)。
證明略,後面補。
更加一般化地,有對於任意空間可建構函式 \(S(n)\ge \log n\),有 \(\mathrm{NSPACE}(S(n))=\mathrm{coNSPACE}(S(n))\)。
總結: