簡體   English   中英

2-CNF SAT如何在P中,而3-CNF SAT在NPC中?

[英]How is 2-CNF SAT is in P, while 3-CNF SAT is in NPC?

我真的很困惑為什么2-CNF SAT在P中,而3-CNF SAT在NPC中。 我讀了CLRS,我理解他們如何證明3-CNF SAT在NPC中。 我不能使用從SAT到2-CNF-SAT相同的可還原性來證明2-CNF-SAT在NPC中。 我不明白為什么2-CNF SAT在P.

為什么2-CNF SAT在P.

因為有一個多項式算法來解決它。

證明的草圖:

請注意,2-CNF中的任何子句都采用A => B的形式,其中AB是變量或它們的否定。 因此,我們可以告訴該條款說當A為真時,它強制B為真。 這也意味着B是虛假的力量A是假的。 我們以后必須考慮。

現在,您可以逐個獲取變量,並搜索它是否過渡性地強制自身為負值(A => B => C => ... =>非A),反之亦然(非A =>。 .. => A)。 如果第一個是真的,A必須是假的; 如果第二個,A是真的。 如果兩者兼而有之,公式是不可滿足的。

如果您沒有找到任何使公式不可滿足的變量,那么它是可以滿足的。

請注意,這種“野蠻”算法並不是使用圖中強連接組件的實際算法,我建議您繼續閱讀。 然而,它是多項式的(搜索一個變量顯然是O(N ^ 2),因為你考慮O(N)子句一次強制一個變量,你考慮O(N)變量,這意味着算法是多項式) 。 請注意,我們在子句中最多包含兩個文字是至關重要的。 如果條款是A => B or C或其他東西,它將無法正常工作。

從CNF SAT到3-CNF SAT的規范縮減是采用類似lit_1或lit_2或......或lit_n的條款,並將其替換為兩個子句lit_1或lit_2或......或者lit_ {floor(n / 2)}或者var,lit_ {floor(n / 2)+ 1} OR ... OR lit_n OR NOT var。 如果你試圖以這種方式破解一個帶有三個文字的子句,你將得到另一個帶有三個文字的子句,因此相同的證明不適用於2-CNF SAT(並且可能是有充分理由的)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM