證精確的4SAT是NP 完全問題

2021-08-14 08:22:25 字數 2960 閱讀 5363

此題源於《演算法概論》(清華大學出版社)課後習題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 就是乙個 可滿足 的布林表示式,因...