Skip to main content

NP完備

•10 min•2,417 words

首先需要一個問題叫做布林公式(Boolean formula)會像:

ϕ=(xˉ∧y)∨(x∧zˉ)\phi = (\bar{x} \wedge y) \vee (x \wedge \bar{z})

裡面的每一個符號稱作variable,每一個variable可以給0或1的值就像在做布林運算,一個boolean formula要滿足的話要讓各個variable做完計算後ϕ\phi輸出 1
而有一種問題叫做satisfiability problem就是倚靠boolean formula是否滿足來達成條件

SAT={<ϕ>∣ϕ  is  a  satisfiable  Boolean  formula}SAT = \{<\phi>| \phi \>\> is \>\> a \>\> satisfiable \>\> Boolean \>\> formula\}

定理:Cook-Levin Theorem

SAT∈P  iff  P=NPSAT \in P \>\> iff \>\> P = NP

定義:
f:Σ∗→Σ∗f: \Sigma^{*} \rightarrow \Sigma^{*}如果存在多項式時間的Turing Machine M可以接受任何輸入w,並且在tape裡f(ω)f(\omega)步驟之後停止並且輸出結果就稱這是一個多項式時間可運算的function
定義:
如果存在一個多項式時間可計算的function f:Σ∗→Σ∗f: \Sigma^{*} \rightarrow \Sigma^{*},ff能輸入任何字串ω\omega,代表可以讓language A在多項式時間內映射(mapping)轉換(reducible)到language B上,可以表示成A≤pBA \leq_{p} B或者可以表示成以下的對應函數:

ω∈A⇔f(ω)∈B\omega \in A \Leftrightarrow f(\omega) \in B

Reduce

這個function ff做的事情是讓問題A在多項式時間內轉換到問題B
定義:如果A≤pBA \leq_{p} B 並且 B∈PB \in P, 則代表A∈PA \in P
證明:
存在一組多項式時間Turing Machine M可以決定B的結果並且ff作為多項式時間轉換將A問題換成B問題
N = 輸入任何字串 ω\omega

  1. 計算f(ω)f(\omega)
  2. 放進輸入執行M並且不管M有沒有輸出f(ω)f(\omega)都一定要輸出一個結果(這樣才符合algorithm的定義)
    Definition
    如果一個language B滿足以下兩個條件就可以稱作NP-complete
    (1) 問題B屬於NP
    (2) 任何問題A屬於NP並且在多項式時間轉換到問題B
    (如果只有條件(2)滿足的話叫做NP-hard的特性)
    定理:如果B是NP-complete並且B∈PB \in P,那麼P=NPP = NP
    證明:參照多項式時間轉換的定義
    定義:如果B是NP-complete並且B≤pCB \leq_{p} C對於C∈NPC \in NP,那麼C也會是NP-complete
    證明:存在任何的language A∈NPA \in NP能夠在多項式時間內轉換到CC
    ∵B\because B是NP-complete, ∴\therefore 任何的language ∈NP\in NP都可以在多項式時間內轉換到B

A≤pB,B≤pC⇒A≤pCA \leq_{p}B, B \leq_{p} C \Rightarrow A \leq_{p} C

至此所有的language屬於NP都可以在多項式時間內轉換到C
定義:
literal: 一個boolean variable或是一個negated boolean(variable xx 或者 xˉ\bar{x})
clause: (x1∨v2ˉ∨x3∨x4ˉ)(x_{1} \vee \bar{v_{2}} \vee x_{3} \vee \bar{x_{4}})
conjunctive normal form (CNF):

(x1∨x2∨x3ˉ)∧(x4∨x5ˉ)∧(x3∨x6ˉ)(x_{1} \vee x_{2} \vee \bar{x_{3}}) \wedge (x_{4} \vee \bar{x_{5}}) \wedge (x_{3} \vee \bar{x_{6}})

3CNF-formula:

(x1∨x2∨x3ˉ)∧(x3∨x5ˉ∨x6)∧(x3∨x6ˉ∨x4)(x_{1} \vee x_{2} \vee \bar{x_{3}}) \wedge (x_{3} \vee \bar{x_{5}} \vee x_{6}) \wedge (x_{3} \vee \bar{x_{6}} \vee x_{4})

3SAT = {<ϕ>∣ϕ\{<\phi>|\phi 是一個satisfiable 3cnf-formula}\}
定理:3SAT可以在多項式時間內轉換到CLIQUE
證明:讓 ϕ\phi 作為一個formula擁有kk個clauses:

ϕ=(a1∨b1∨c1)∧(a2∨b2∨c2)∧…∧(ak∨bk∨ck)f⟹<G,k>\phi = (a_{1} \vee b_{1} \vee c_{1}) \wedge (a_{2} \vee b_{2} \vee c_{2}) \wedge … \wedge(a_{k} \vee b_{k} \vee c_{k}) \underset{\Longrightarrow}{f} <G, k>

ϕ=(x1∨x1∨x2)∧(x1ˉ∨x2ˉ∨x2ˉ)∧(x1ˉ∨x2∨x2)\phi = (x_{1} \vee x_{1} \vee x_{2}) \wedge (\bar{x_{1}} \vee \bar{x_{2}} \vee \bar{x_{2}}) \wedge (\bar{x_{1}} \vee x_{2} \vee x_{2})

3SATtoCLIQUE-1

其中ff為多項式時間的轉換function
而ϕ\phi要能夠滿足的話若且唯若∈CLIQUE \in CLIQUE

Cook-Levin Theorem

SAT∈NP−completeSAT \in NP-complete
證明:

  1. SAT∈NPSAT \in NP
    • 一個NTM可以猜formula的variable並且在驗證過後看是否滿足ϕ\phi
  2. 對於任何的A∈NPA \in NP並且A可以在多項式時間內轉換到SAT問題上
    • 假設N是一個Non-deterministic Turing Machine可以在nkn^{k}時間內決定A的輸出,k∈constantk \in constant,NTM N存在一組表輸入w制定出nk×nkn^{k} \times n^{k}大小的表,每一列是NTM的每一條分支在計算輸入w的configuration,如果任何一列結果是accepting的configuration就代表整個表輸出就是accepting

Tableau-1

任何accepting的表都是跟NTM N輸入w字串計算後的分支有關

TableauBranch-2

NTM N能夠accept輸入w就代表存在accepting表能決定輸出結果是accept或是reject

f:f:多項式時間轉換問題A到SAT問題
輸入w作為問題A的instance,將w轉換產生成formula ϕ\phi
假設QQ跟Γ\Gamma作為N的state集合以及tape的alphabet
讓 C=Q∪Γ∪#C = Q \cup \Gamma \cup {\#} 從1 ≤i,j≤nk\leq i, j \leq n^{k}以及每一個s∈Cs \in C,可以產生xi,j,s∼n2kx_{i, j, s} \thicksim n^{2k}個variable
如果xi,j,s=1x_{i, j, s} = 1代表cell[i, j]包含ss
設計一組ϕ\phi可以滿足variable與NTM N輸入w的結果產生一組accepting表

ϕ=ϕcell∧ϕstart∧ϕmove∧ϕaccept\phi = \phi_{cell} \wedge \phi_{start} \wedge \phi_{move} \wedge \phi_{accept}

(1) ϕcell=∨i≤i,j≤nk[(∨s∈Cxi,j,s)∧(∧s,t∈C,s≠t(xi,j,sˉ∨xi,j,tˉ))]\phi_{cell} = \underset{i \leq i, j \leq n^{k}}{\vee}[(\underset{s \in C}{\vee}x_{i,j,s}) \wedge (\underset{s, t \in C, s \neq t}{\wedge} (\bar{x_{i,j,s}} \vee \bar{x_{i,j,t}}))]

TableauCell-1

(2)ϕstart=x1,1,♯∧x1,2,q0∧x1,3,w1∧x1,4,w2∧…∧x1,n+2,wn∧x1,n+3,∪∧…∧xx1,nk−1,∪∧x1,nk,♯\phi_{start} = x_{1,1,\sharp} \wedge x_{1,2,q_{0}} \wedge x_{1,3,w_{1}} \wedge x_{1, 4,w_{2}} \wedge … \wedge x_{1,n+2,w_{n}} \wedge x_{1,n+3,\cup} \wedge … \wedge x_{x_{1},n^{k}-1, \cup} \wedge x_{1, n^{k}, \sharp}

要確認的是第一個row是NTM N輸入w的start configuration,以上就完成表內的一行row,還要再另外產生nk−1n^{k}-1組row
(3)ϕaccept\phi_{accept}保證表內一定會產生一組accepting的configuration

ϕaccept=∨1≤i,j≤nkxi,j,qaccept\phi_{accept} = \underset{1 \leq i, j \leq n^{k}}{\vee} x_{i,j,q_{accept}}

(4)ϕmove\phi_{move}:
保證表裡面的每一個row都可以合法地透過NTM N的transition rule來產生
δ(q1,a)=q1,b,R\delta(q_{1},a) = {q_{1}, b, R}
δ(q1,b)=(q2,c,L),(q2,a,R)\delta(q_{1},b) = {(q_{2}, c, L), (q_{2}, a, R)}
δ(q2,a)=q2,b,R\delta(q_{2}, a) = {q_{2}, b, R}

TableauSixCell-2

TableauLegalWindows-2

合法範例

Tableau3Example-1

Claim: 首先檢查第一層的row是不是start configuration,如果是的話代表接下來表內的內容都是合法的,並且上一層跟下一層的configuration都要遵照transition rule

TableauCheckTwoRow-1

ϕmove=∨1≤i,j≤nk\phi_{move} = \underset{1 \leq i, j \leq n^{k}}{\vee}(i,ji, j的表格內容必須是合法的) =

∨a1,….,a6(xi−1,j,a1∧xi,j,a2∧xi+1,j,a3∧xi−1,j+1,a4∧xi,j+1,a5∧xi+1,j+1,a6)\underset{a_{1},….,a_{6}}{\vee}(x_{i-1,j,a_{1}} \wedge x_{i,j,a_{2}} \wedge x_{i+1,j,a_{3}} \wedge x_{i-1, j+1, a_{4}} \wedge x_{i,j+1,a_{5}} \wedge x_{i+1,j+1,a_{6}})

需要一次看六格是不是合法的

TableauSixLegalCell-2

ϕ\phi的大小是O(n2k)O(n^{2k}),讓∣C∣=l∼|C| = l \thicksim 依據N設計的transition大小
總共所有variable會有O(n2k)O(n^{2k})
ϕcell:O(n2k),ϕstart:O(nk)\phi_{cell}:O(n^{2k}), \phi_{start}:O(n^{k})
ϕaccept,ϕmove:O(n2k)\phi_{accept}, \phi_{move}: O(n^{2k})因此轉換可以在多項式時間內完成

推論(Cor):3SAT是NP-complete

證明:3SAT屬於NP
SAT≤p3SATSAT \leq_{p} 3SAT
(a1∨a2∨a3∨a4)≡(a1∨a2∨z)∧(zˉ∨a3∨a4)(a_{1} \vee a_{2} \vee a_{3} \vee a_{4}) \equiv (a_{1} \vee a_{2} \vee z) \wedge (\bar{z} \vee a_{3} \vee a_{4})
如果l>3,(a1∨a2∨a3∨….∨al)l > 3, (a_{1} \vee a_{2} \vee a_{3} \vee …. \vee a_{l})

≡(a1∨a2∨z1)∧(z1ˉ∨a3∨a2)∧(z2ˉ∨a4∨z3)∧…∧(zl−3ˉ∨al−1∨al)\equiv (a_{1} \vee a_{2} \vee z_{1}) \wedge (\bar{z_{1}} \vee a_{3} \vee a_{2}) \wedge (\bar{z_{2}} \vee a_{4} \vee z_{3}) \wedge … \wedge (\bar{z_{l-3}} \vee a_{l-1} \vee a_{l})

推論(Cor):CLIQUE屬於NP-complete

圖G的頂點覆蓋(Vertex cover of G):如果G屬於一個無向圖,G裡覆蓋的頂點(Vertex cover)是圖G裡一個子集合能夠讓G的每一條邊都接著一個點

VertexCover-2

2,3{2, 3}是一組vertex cover
1,3{1, 3}不是一組vertex cover
Vertex-Cover = {<G,k><G, k>|G是一個無向圖並且擁有k個點的vertex cover}
定理:Vertex-Cover屬於NP-complete
證明:Vertex-Cover屬於NP

$3SAT \leq_{p} VERTEX-COVER$

ϕ=(x1∨x1∨x2)∧(x1ˉ∨x2ˉ∨x2ˉ)∧(x1ˉ∨x2∨x2)\phi = (x_{1} \vee x_{1} \vee x_{2}) \wedge (\bar{x_{1}} \vee \bar{x_{2}} \vee \bar{x_{2}}) \wedge (\bar{x_{1}} \vee x_{2} \vee x_{2})

3SAT-VertexCover-1

靠以上的轉換方法來證明滿足ϕ\phi的話代表G確實存在k個node的vertex cover
讓ϕ\phi擁有mm個variable以及ll個clauses使得k=m+2lk = m+2l

  1. 另外設計gadgets作為輔助的元件,一個true variable來自每個variable gadgets,兩個node來自clause gadget
  2. 每三個邊可以連接variable gadgets跟clause gadget來覆蓋

SUBSET-SUM

SUBSET-SUM = {<S,t>∣S=x1,…,xk<S, t>|S = {x_{1},…,x_{k}}以及對於某些y1,…,yi⊆S,∑yi=t{y_{1},…,y_{i}} \subseteq S, \sum_{y_{i}} = t}
定理:SUBSET-SUM屬於NP-complete
證明:SUBSET-SUM屬於NP

3SAT≤pSUBSET-SUM \text{3SAT} \leq_{p} \text{SUBSET-SUM}

存在ϕ\phi是一個boolean formula擁有variables x1,…,xix_{1},…,x_{i}以及clauses c1,….,ckc_{1},….,c_{k}

ϕ=c1∧c2∧….∧ck∣ϕ→ <S,t>\phi = c_{1} \wedge c_{2} \wedge …. \wedge c_{k}|\phi \rightarrow\ <S, t>

VertexCoverTableau-2

VertexCoverSum-2

  1. 假設ϕ\phi滿足的話,建構一個子集合SS,如果xix_{i}給的值是TRUE,選擇yiy_{i},否則就另外選擇ziz_{i},對於每一次的ii,一次只會選擇yiy_{i}或ziz_{i}代表true或false,最後k個digits會把整個ii加總起來算1,如果不到3的話由gg跟hh來補到3
  2. 假設一組S的子集合可以加總到tt,可以建構一組滿足ϕ\phi的公式,如果這組子集合包含yiy_{i}我們就設定xix_{i}為TRUE,否則設定xix_{i}為FALSE,而這樣的條件可以滿足ϕ\phi
    整張表的大小是O((k+i)2)∼O(n2)O((k+i)^{2}) \thicksim O(n^{2})

定理:HAMPATH∈NP−completeHAMPATH \in NP-complete

3SAT≤pHAMPATH \text{3SAT} \leq_{p} \text{HAMPATH}

證明:存在一組3cnf-formula擁有k個clauses

ϕ=(a1∨b1∨c1)∧(a2∨b2∨c2)∧…∧(ak∨bk∨ck)\phi = (a_{1} \vee b_{1} \vee c_{1}) \wedge (a_{2} \vee b_{2} \vee c_{2}) \wedge … \wedge (a_{k} \vee b_{k} \vee c_{k})

每一個a,b,ca,b,c可以看作literal的xix_{i}或者xiˉ\bar{x_{i}}以及x1,…..,xix_{1},…..,x_{i}都是ϕ\phi的variables

HAMPATH-3CNF-1

HAMPATH-3CNF-Body-2

HAMPATH-3CNF-3k1-1

HAMPATH-3CNF-zig-zag-2

如果存在一組可以滿足的參數,選擇clause裡面其中一個literal給TRUE
如果存在可以得到true的結果,代表存在一組Hamiltonian path從ss走到tt
如果Hamiltonian path是normalnormal,意思是可以從上面的鑽石型路徑頂端node走到最尾端的node,代表可以輕鬆找到一組滿足3CNF的路徑,因為每一組clause的點出現在路徑裡,只要點存在並且給TRUE的值,就可以接著走下去,如果是走zig−zagzig-zag路徑就讓每一個node放TRUE,反之走zag−zigzag-zig每一個點給False。
而Hamiltonian path必須是normalnormal的

HAMPATH-normal-1

假設有兩種case:
case 1: a2a_{2}是一個離群的點
case 2: a3a_{3}是一個離群的點
在兩種情況下,路徑不包含a2a_{2}的點
在case 1: 路徑沒辦法從a1a_{1}或者cc進入,因為路徑走到了其他的點上
在case 2: 路徑沒辦法從a3a_{3}進入,因為a3a_{3}跟a2a_{2}一樣是獨立的node在此種情況

定理:UHAMPATH屬於NP-complete

證明:

HAMPATH≤pUHAMPATH\text{HAMPATH} \leq_{p} \text{UHAMPATH}

Directed Graph G→Undirected Graph G′\text{Directed Graph} \> G \rightarrow \text{Undirected Graph} \> G'

u∈V(G)u \in V(G)
G′G'的點: u⇒uin,umid,uoutu \Rightarrow u^{in}, u^{mid}, u^{out}
s⇒sout,t⇒tins \Rightarrow s^{out}, t \Rightarrow t^{in}
G′G'的邊: u→v∈E(G)⇒uin−umid−uout−vin−vmid−voutu \rightarrow v \in E(G) \Rightarrow u^{in} - u^{mid} - u^{out} - v^{in} - v^{mid} - v^{out}

HAMPATH-UHAMPATH-1

如果s→u1→u2→…→uk→ts \rightarrow u_{1} \rightarrow u_{2} \rightarrow … \rightarrow u_{k} \rightarrow t是GG裡的Hamiltonian path
則 sout−u1in−u1mid−u1out−u2in−u2mid−u2out−…−ukin−ukmid−ukout−tins^{out} - u^{in}_{1} - u^{mid}_{1} - u^{out}_{1} - u^{in}_{2} - u^{mid}_{2} - u^{out}_{2} - … - u^{in}_{k} - u^{mid}_{k} - u^{out}_{k} - t^{in}屬於G′G'裡的無向Hamiltonian path。