此題源於《演算法概論》(清華大學出版社)課後習題8.8精確4sat(exact 4sat)問題是這樣的:輸入為一組字句,每個字句都是恰好4個文字的析取,且每個變數最多在每個字句出現一次。目標是求它的滿足賦值——如果該賦值存在。
總結下來,exact 4sat問題是sat的乙個變種,即有約束條件的sat。但是,我們仍然可以進行sat -> exact 4sat的歸約,歸約過程如下。
首先,證明任意乙個sat問題都能對映成exact 4sat問題:
設函式f
表示字句的變數數目,例如:f(
a∨b)
=2對任意乙個sat問題,先將字句中的相同變數約去,很明顯,a∨
a 可以約成
a ,a∨
a¯恒為真,可以約去。約去相同變數後,它的任意乙個字句p可能有三種情況:f(
p)<
4 :
對該字句,新加入乙個變數x,可得:p≡
p∧(x
∨x¯)
≡(p∨
x)∧(
p∨x¯
)
我們因此就可以把乙個字句p轉換成兩個字句q1,q2,其中f(
q1)=
f(q2
)=f(
p)+1
反覆幾次上述操作,即可將乙個f(
p)<
4 的字句轉換成多個字句q1…qn,其中f(
q1)=
f(q2
)=..
.=f(
qn)=
4 f(
p)=4
:該字句符合exact 4sat的字句,無需轉換。f(
p)>
4 :
假設該字句其中有兩個變數,分別為a,b,即p=
(a∨b
∨...
)
新加入乙個變數x,讓x替代a∨
b ,得到新的字句q=
(x∨.
..)
目前出現了乙個新的問題,即
x 和a∨
b並不等價,接下來我們通過新加入額外的字句來解決這個問題。
由於sat問題中,變數只能取使最終結果為t的布林值,當變數取值使最終結果為f則無法取值,我們利用這個特點,當x,
a,b 的取值使x≠
a∨b 時,最終結果為f,這樣剩下的x,
a,b 取值必定滿足x=
a∨b 。
先構造出x,
a,b 的真值表:xa
bx=a
∨btt
tttt
fttf
tttf
ffft
tfft
ffff
tfff
ft用析取正規化表達該真值表,可得: (x
¯∨a∨
b)∧(
x∨a¯
∨b¯)
∧(x∨
a¯∨b
)∧(x
∨a∨b
¯)因此,字句p就能用五個其他字句代替:(四個字句分別命名為q1, q2, q3, q4) p≡
q∧q1
∧q2∧
q3∧q
4≡q∧
(x¯∨
a∨b)
∧(x∨
a¯∨b
¯)∧(
x∨a¯
∨b)∧
(x∨a
∨b¯)
其中f(
q)=f
(p)−
1 ,f(
q1)=
f(q2
)=f(
q3)=
f(q4
)=3
對q反覆進行1和3中的操作,即可將乙個f(
p)>
4 的字句轉換成多個字句q1…qn,其中f(
q1)=
f(q2
)=..
.=f(
qn)=
4 對sat問題中的每乙個字句都進行上述轉換,任意乙個sat問題都能對映成exact 4sat問題,證畢。
其次,證明對映的exact 4sat問題的解可轉化為原sat的解:
這個步驟很好證明,由於我們新加入的變數僅僅是用於填補和制約,因此新加入的變數的解對原sat問題的解沒有影響,當我們得到exact 4sat問題的解,拋棄掉所有新加入的變數,即為原sat問題的解。
最後,證明該問題轉換的時間複雜度是多項式時間的:
設原sat問題有n個字句,每個字句都有數量不等的不同變數,字句裡總共有m個變數(包含相同變數)。定義p
1,p2...pn
為sat問題中的不同字句,t1
=f(p
1),t
2=f(
p2).
..tn
=f(p
n),即m=
∑ni=
1ti
同理,對其中任意字句pi
∈ ,:ti
<
4 :由於f
(pi)
每加1就需要翻倍,因此,字句p最多轉換成8個符合exact 4sat的字句,所花的時間複雜度不超過o(
8⋅ti
) ti=4:
無需轉換。ti
>
4 :由於f
(pi)
每減1就需要生成4個輔助字句,將4個輔助字句轉換成符合exact 4sat的字句又需要翻倍,因此,f(
pi) 每減1就需要生成8個符合exact 4sat的字句,所花的時間複雜度也不超過o(
8⋅ti
)
因此,將所有的字句轉換後,所花的時間複雜度不超過o(
8⋅m)
,證畢。
之前已經證明,sat問題可以歸約成exact 4sat問題,由於sat問題是np-完全問題,因此exact 4sat問題也是np-完全問題,證畢。
證明精確的4SAT是NP 完全問題
題目描述 在精確的4sat exact 4sat 問題中,輸入為一組子句,每個子句都是恰好 4個文字的析取,且每個變數最多在每個子句中出現一次。目標是求它的滿足賦值 如果該賦值存在。證明精確的 4sat 是np 完全問題。顯然,4sat問題是 np問題,所有可能的賦值總數的指數級的。現從 3sat ...
精確4SAT問題np完全性證明
1.題目描述 在精確的4sat問題中,輸入為一組子句,每個子句都是恰好4個文字的析取,且每個變數最多在每個子句中出現一次.目標是求它的滿足賦值 如果該賦值存在.證明精確的4sat問題是no 完全問題.2證明過程 通過將 3sat 歸約到 exact 4sat 來證 明後者的 np 完全性。對於任意乙...
NP完全問題 3 SAT
1 什麼是3sat問題?sat是satisfiability 可滿足性 的縮寫。sat問題就是問某乙個布林表示式是不是 可滿足 的問題。這裡的術語 可滿足 的意思是存在一組 真值賦值 truth assignment 使得布林表示式為真。舉例來說,a b a與非b 就是乙個 可滿足 的布林表示式,因...