首先需要一個問題叫做布林公式(Boolean formula)會像:
ϕ=(xˉ∧y)∨(x∧zˉ)
裡面的每一個符號稱作variable,每一個variable可以給0或1的值就像在做布林運算,一個boolean formula要滿足的話要讓各個variable做完計算後ϕ輸出 1
而有一種問題叫做satisfiability problem就是倚靠boolean formula是否滿足來達成條件
SAT={<ϕ>∣ϕisasatisfiableBooleanformula}
定理:Cook-Levin Theorem
SAT∈PiffP=NP
定義:
f:Σ∗→Σ∗如果存在多項式時間的Turing Machine M可以接受任何輸入w,並且在tape裡f(ω)步驟之後停止並且輸出結果就稱這是一個多項式時間可運算的function
定義:
如果存在一個多項式時間可計算的function f:Σ∗→Σ∗,f能輸入任何字串ω,代表可以讓language A在多項式時間內映射(mapping)轉換(reducible)到language B上,可以表示成A≤pB或者可以表示成以下的對應函數:
ω∈A⇔f(ω)∈B

這個function f做的事情是讓問題A在多項式時間內轉換到問題B
定義:如果A≤pB 並且 B∈P, 則代表A∈P
證明:
存在一組多項式時間Turing Machine M可以決定B的結果並且f作為多項式時間轉換將A問題換成B問題
N = 輸入任何字串 ω
- 計算f(ω)
- 放進輸入執行M並且不管M有沒有輸出f(ω)都一定要輸出一個結果(這樣才符合algorithm的定義)
如果一個language B滿足以下兩個條件就可以稱作NP-complete
(1) 問題B屬於NP
(2) 任何問題A屬於NP並且在多項式時間轉換到問題B
(如果只有條件(2)滿足的話叫做NP-hard的特性)
定理:如果B是NP-complete並且
B∈P,那麼
P=NP
證明:參照多項式時間轉換的定義
定義:如果B是NP-complete並且
B≤pC對於
C∈NP,那麼C也會是NP-complete
證明:存在任何的language
A∈NP能夠在多項式時間內轉換到
C
∵B是NP-complete,
∴ 任何的language
∈NP都可以在多項式時間內轉換到B
A≤pB,B≤pC⇒A≤pC
至此所有的language屬於NP都可以在多項式時間內轉換到C
定義:
literal: 一個boolean variable或是一個negated boolean(variable x 或者 xˉ)
clause: (x1∨v2ˉ∨x3∨x4ˉ)
conjunctive normal form (CNF):
(x1∨x2∨x3ˉ)∧(x4∨x5ˉ)∧(x3∨x6ˉ)
3CNF-formula:
(x1∨x2∨x3ˉ)∧(x3∨x5ˉ∨x6)∧(x3∨x6ˉ∨x4)
3SAT = {<ϕ>∣ϕ 是一個satisfiable 3cnf-formula}
定理:3SAT可以在多項式時間內轉換到CLIQUE
證明:讓 ϕ 作為一個formula擁有k個clauses:
ϕ=(a1∨b1∨c1)∧(a2∨b2∨c2)∧…∧(ak∨bk∨ck)⟹f<G,k>
ϕ=(x1∨x1∨x2)∧(x1ˉ∨x2ˉ∨x2ˉ)∧(x1ˉ∨x2∨x2)

其中f為多項式時間的轉換function
而ϕ要能夠滿足的話若且唯若∈CLIQUE
SAT∈NP−complete
證明:
- SAT∈NP
- 一個NTM可以猜formula的variable並且在驗證過後看是否滿足ϕ
- 對於任何的A∈NP並且A可以在多項式時間內轉換到SAT問題上
- 假設N是一個Non-deterministic Turing Machine可以在nk時間內決定A的輸出,k∈constant,NTM N存在一組表輸入w制定出nk×nk大小的表,每一列是NTM的每一條分支在計算輸入w的configuration,如果任何一列結果是accepting的configuration就代表整個表輸出就是accepting

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

NTM N能夠accept輸入w就代表存在accepting表能決定輸出結果是accept或是reject
f:多項式時間轉換問題A到SAT問題
輸入w作為問題A的instance,將w轉換產生成formula ϕ
假設Q跟Γ作為N的state集合以及tape的alphabet
讓 C=Q∪Γ∪# 從1 ≤i,j≤nk以及每一個s∈C,可以產生xi,j,s∼n2k個variable
如果xi,j,s=1代表cell[i, j]包含s
設計一組ϕ可以滿足variable與NTM N輸入w的結果產生一組accepting表
ϕ=ϕcell∧ϕstart∧ϕmove∧ϕaccept
(1) ϕcell=i≤i,j≤nk∨[(s∈C∨xi,j,s)∧(s,t∈C,s=t∧(xi,j,sˉ∨xi,j,tˉ))]

(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,♯
要確認的是第一個row是NTM N輸入w的start configuration,以上就完成表內的一行row,還要再另外產生nk−1組row
(3)ϕaccept保證表內一定會產生一組accepting的configuration
ϕaccept=1≤i,j≤nk∨xi,j,qaccept
(4)ϕmove:
保證表裡面的每一個row都可以合法地透過NTM N的transition rule來產生
δ(q1,a)=q1,b,R
δ(q1,b)=(q2,c,L),(q2,a,R)
δ(q2,a)=q2,b,R



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

ϕmove=1≤i,j≤nk∨(i,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)
需要一次看六格是不是合法的

ϕ的大小是O(n2k),讓∣C∣=l∼ 依據N設計的transition大小
總共所有variable會有O(n2k)
ϕcell:O(n2k),ϕstart:O(nk)
ϕaccept,ϕmove:O(n2k)因此轉換可以在多項式時間內完成
證明:3SAT屬於NP
SAT≤p3SAT
(a1∨a2∨a3∨a4)≡(a1∨a2∨z)∧(zˉ∨a3∨a4)
如果l>3,(a1∨a2∨a3∨….∨al)
≡(a1∨a2∨z1)∧(z1ˉ∨a3∨a2)∧(z2ˉ∨a4∨z3)∧…∧(zl−3ˉ∨al−1∨al)
圖G的頂點覆蓋(Vertex cover of G):如果G屬於一個無向圖,G裡覆蓋的頂點(Vertex cover)是圖G裡一個子集合能夠讓G的每一條邊都接著一個點

2,3是一組vertex cover
1,3不是一組vertex cover
Vertex-Cover = {<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)

靠以上的轉換方法來證明滿足ϕ的話代表G確實存在k個node的vertex cover
讓ϕ擁有m個variable以及l個clauses使得k=m+2l
- 另外設計gadgets作為輔助的元件,一個true variable來自每個variable gadgets,兩個node來自clause gadget
- 每三個邊可以連接variable gadgets跟clause gadget來覆蓋
SUBSET-SUM = {<S,t>∣S=x1,…,xk以及對於某些y1,…,yi⊆S,∑yi=t}
定理:SUBSET-SUM屬於NP-complete
證明:SUBSET-SUM屬於NP
3SAT≤pSUBSET-SUM
存在ϕ是一個boolean formula擁有variables x1,…,xi以及clauses c1,….,ck
ϕ=c1∧c2∧….∧ck∣ϕ→ <S,t>


- 假設ϕ滿足的話,建構一個子集合S,如果xi給的值是TRUE,選擇yi,否則就另外選擇zi,對於每一次的i,一次只會選擇yi或zi代表true或false,最後k個digits會把整個i加總起來算1,如果不到3的話由g跟h來補到3
- 假設一組S的子集合可以加總到t,可以建構一組滿足ϕ的公式,如果這組子集合包含yi我們就設定xi為TRUE,否則設定xi為FALSE,而這樣的條件可以滿足ϕ
整張表的大小是O((k+i)2)∼O(n2)
3SAT≤pHAMPATH
證明:存在一組3cnf-formula擁有k個clauses
ϕ=(a1∨b1∨c1)∧(a2∨b2∨c2)∧…∧(ak∨bk∨ck)
每一個a,b,c可以看作literal的xi或者xiˉ以及x1,…..,xi都是ϕ的variables




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

假設有兩種case:
case 1: a2是一個離群的點
case 2: a3是一個離群的點
在兩種情況下,路徑不包含a2的點
在case 1: 路徑沒辦法從a1或者c進入,因為路徑走到了其他的點上
在case 2: 路徑沒辦法從a3進入,因為a3跟a2一樣是獨立的node在此種情況
證明:
HAMPATH≤pUHAMPATH
Directed GraphG→Undirected GraphG′
u∈V(G)
G′的點: u⇒uin,umid,uout
s⇒sout,t⇒tin
G′的邊: u→v∈E(G)⇒uin−umid−uout−vin−vmid−vout

如果s→u1→u2→…→uk→t是G裡的Hamiltonian path
則 sout−u1in−u1mid−u1out−u2in−u2mid−u2out−…−ukin−ukmid−ukout−tin屬於G′裡的無向Hamiltonian path。