往期文章:
npc簡介
np-hard問題證明
npc 證明(一)
npc 證明(二)
本文介紹如何通過3sat歸約,進而證明支配集是npc問題。
→
\rightarrow
→ 3-satisfiability (3sat)
給定乙個有窮的布林變數集合x→=x=\lbrace x_1,x_2,\ldots,x_n \rbrace
x=,變數x
ix_i
xi取值為1或者0,另有一組子句c
=c=\lbrace c_1,c_2,\ldots,c_m \rbrace
c=,c =c
1∧c2
∧…∧c
m\mathbb=c_1\wedge c_2 \wedge \ldots \wedge c_m
c=c1∧
c2∧
…∧cm
,ci=x
j∨xk
∨x
lc_i = x_j \vee x_k \vee x_l
ci=xj
∨xk
∨xl
。求是否存在一組取值使得c
\mathbf
c為真,即任意c
ic_i
ci為真。
\rightarrow
→ dominating set
給定圖g我們知道將支配集歸約到3sat進而證明3sat是npc是很容易的。csci5320的習題裡,要進行相反方向的歸約,將3sat的問題轉化成支配集的問題進行求解,相對來說比較難。gg,正整數k
kk,是否存在dominating set的大小最多為kkk。
dominating set d
dd是點集v
vv的乙個子集,並且對於不在d
dd中的點v
vv,至少存在一條邊(u,
v)∈e
(u,v)\in e
(u,v)∈
e,u∈
du\in d
u∈d。
對於每個變數x
ix_i
xi,我們都構造兩個點,x
ix_i
xi和xi‾
\overline
xi
,以及一條邊(xi
,xi‾
)(x_i,\overline)
(xi,x
i)
對於c
ic_i
ci當中的三個變數xj∨
xk∨x
lx_j \vee x_k \vee x_l
xj∨xk
∨xl
,我們構造乙個點c
ic_i
ci,三條邊(xj
,ci)
(x_j,c_i)
(xj,c
i),(xk
,ci)
(x_k,c_i)
(xk,c
i)和(xl
,ci)
(x_l,c_i)
(xl,c
i)。如果布林表示式取反,那麼我們可以對應的連線(xj
‾,ci
)(\overline,c_i)
(xj,
ci)
。最關鍵的一步,我們如何確保x
ix_i
xi,xi‾
\overline
xi
恰好有且僅有乙個點落在支配集裡。我們增加乙個點y
iy_i
yi,並且新增兩條邊(xi
,yi)
(x_i,y_i)
(xi,y
i)與(xi
‾,yi
)(\overline,y_i)
(xi,
yi)
。 那麼我們可以知道c
\mathbb
c可滿足當且僅當上述構造的圖中有乙個大小m
mm的支配集。
當c
\mathbb
c可滿足時,顯而易見,對應取真的變數構成乙個支配集。
當上述構造的圖中有乙個大小為m
mm的支配集時,因為(xi
,xi‾
,yi)
(x_i,\overline,y_i)
(xi,x
i,
yi)
三個點當中最少有乙個點在支配集當中,所以支配集的大小最小為m
mm。那麼我們可以得到結論(xi
,xi‾
,yi)
(x_i,\overline,y_i)
(xi,x
i,
yi)
三個點恰好有且僅有乙個點在支配集當中。當y
iy_i
yi在支配集當中時,我們總可以由(xi
,xi‾
)(x_i,\overline)
(xi,x
i)
當中的乙個點來替換。那麼由此便可得到乙個令c
\mathbb
c可滿足的取值。
NP完全問題 3 SAT
1 什麼是3sat問題?sat是satisfiability 可滿足性 的縮寫。sat問題就是問某乙個布林表示式是不是 可滿足 的問題。這裡的術語 可滿足 的意思是存在一組 真值賦值 truth assignment 使得布林表示式為真。舉例來說,a b a與非b 就是乙個 可滿足 的布林表示式,因...
烹飪實驗問題歸約3SAT問題 NP 完全問題歸約
該題目是選自 演算法概論 中第8章課後練習題第16題。題目如下 該題目可以把烹飪實驗問題中構造乙個特例,使得它能夠滿足3sat的形式即可。我們首先假設有n個材料,分別為x1,x2,x3 xn,他們之間有乙個關係,對於xi與xj之間有不和諧度dij。在這裡,我們構造乙個特例,令p 0。對於每個i與j之...
證明精確的4SAT是NP 完全問題
題目描述 在精確的4sat exact 4sat 問題中,輸入為一組子句,每個子句都是恰好 4個文字的析取,且每個變數最多在每個子句中出現一次。目標是求它的滿足賦值 如果該賦值存在。證明精確的 4sat 是np 完全問題。顯然,4sat問題是 np問題,所有可能的賦值總數的指數級的。現從 3sat ...