1、什麼是3sat問題?
sat是satisfiability(可滿足性)的縮寫。sat問題就是問某乙個布林表示式是不是「可滿足」的問題。這裡的術語「可滿足」的意思是存在一組「真值賦值」(truth assignment)使得布林表示式為真。舉例來說,「a & !b」(a與非b)就是乙個"可滿足"的布林表示式,因為存在一組真值賦值(a=1,b=0)使其為真,而"(a | b) & (a | !b) & (!a | b) & (!a | !b)「就是乙個"不可滿足"的布林表示式,因為找不到乙個真值賦值使它為真。而3sat問題就是問某個具有特殊形式的布林表示式是否可滿足的問題,這種特殊形式就是"3合取正規化"或"3-cnf」。
1.1 合取正規化
合取正規化就是一種所有子句都由合取(即「與」)聯接所構成的公式,如"a & (!b | c) & (a | !c | d)"。
這裡的「子句」是指乙個或多個"文字"的析取,而「文字」就是變數或變數的非。如上式中的「a」,「(!b | c)」和「(a | c | d)」就是「子句」,組成子句的a, !b, c, !c, d就是「文字」 ,a, b, c, d就是「變數」。
「3合取正規化」就是每個子句恰好由3個文字所組成的合取正規化。
2 例子
舉個例子:小紅,小王,小江等n人想找個地方去做運動,他們覺得這個地方可能會有m種情況。為了盡量滿足所有人的癖好,每個人都根據可能出現的情況提了乙個包含3個需求的列表:小紅想找個「有窗戶」或者「有廁所」或者「沒臭味」的地方,小王想找個「沒窗戶」或「有臭味」或「沒廁所」的地方,小江想找個「有廁所」或「沒臭味」或「沒窗戶」的地方。。。問,是否存在乙個地方可以滿足所有人的(至少乙個)要求?
其中,每個人提的需求列表就是乙個「子句」,比如小紅提的 " 『有窗戶』或』有大床』或』沒臭味』 " 就是乙個「子句」。
需求列表中的每一項具體的需求都是乙個「文字」,比如「有窗戶」就是乙個文字,「沒臭味」也是乙個文字。
需求的選項(可能出現的情況)就是「變數」,比如「窗戶」就是乙個變數,「廁所」是乙個變數,「臭味」也是乙個變數。
如果最後找到了乙個「有窗戶,沒廁所,沒臭味」的地方,那麼「有窗戶,沒廁所,沒臭味」就是變數的真值賦值。
所有人需求就是合取正規化,如果「每個人的需求都有3項且至少要滿足1項」就是「3合取正規化」。
3sat問題就是問 "是否存在"乙個滿足所有人需求的地方。
3、意義
為啥要研究這麼個奇葩的問題?因為3sat是乙個非常著名的np完全問題:除非「p=np」,否則找不到乙個多項式複雜度的演算法求解這個問題。
有人就問了:「有名就了不起嗎?有啥用啊?」
當然有用了,比方你老闆要你解決某個問題x,要是你不能又快又準的解出來他就會發飆。如果你能證明這個問題x比3sat問題還「難」,那麼x就也不可能找到乙個多項式複雜度的演算法來求解。然後你就可以把這個證明甩到你老闆臉上:我做不到,別人***也做不到!
來自:原創](
烹飪實驗問題歸約3SAT問題 NP 完全問題歸約
該題目是選自 演算法概論 中第8章課後練習題第16題。題目如下 該題目可以把烹飪實驗問題中構造乙個特例,使得它能夠滿足3sat的形式即可。我們首先假設有n個材料,分別為x1,x2,x3 xn,他們之間有乙個關係,對於xi與xj之間有不和諧度dij。在這裡,我們構造乙個特例,令p 0。對於每個i與j之...
證明吝嗇SAT問題為NP完全問題。
吝嗇sat問題是這樣描述的 給定一組子句 每個子句都是其中文字的析取 和整數k,求乙個最多有k個變數為true的滿足賦值 如果該賦值存在。而我們的目的就是證明吝嗇sat問題為np完全問題。這是書 演算法概論 的習題8.3。我證明的方法是用歸約的方法 由已知的np完全問題歸約到該問題,並證明歸約的過程...
NP完全問題
np完全問題是不確定性圖靈機在p時間內能解決的問題,是 世界七大數學難題 之一。np完全問題排在百萬美元大獎的首位,足見他的顯赫地位和無窮魅力。數學上著名的np問題,完整的叫法是np完全問題,也即 np complete 問題,簡單的寫法,是 np p?的問題。問題就在這個問號上,到底是np等於p,...