算法課習題證明

題目:

吝嗇SAT問題是這樣的:給定一組子句(每個子句都是其中文字的析取)和整數k,求一個最多有k個變量爲true的滿足賦值——如果該賦值存在。證明吝嗇SAT是NP-完全問題。

SAT問題:

假設有子句: (a⋃b⋃c)⋂(a⋃b¯)⋂(b⋃c¯)(a¯⋂c)⋂(a¯⋃b¯⋃c¯)
求a,b,c的取值(true or false)使得該表達式的結果是true。不難發現,這個表達式不存在一個合適的abc的取值使得子句爲true,對於這個問題需要搜索所有取值組合才能確定是否能確定是否存在一個組合可以使得該式子爲true,如果存在我們就返回這個組合,如果不存在就返回不存在,用窮舉搜索的方法複雜度是O(2^n)。

吝嗇SAT問題:

吝嗇SAT問題可以看做SAT問題的變形,多一個變量k,要求不能多於k個變量值爲true。

證明:

已知NP完全問題爲SAT問題,易知吝嗇SAT問題的解是可在多項式時間內驗證的,因此屬於NP。

歸約,證明SAT問題 -> 吝嗇SAT 問題:
假設SAT問題有n個變量,則該SAT問題等價於k=n的吝嗇SAT問題,因此歸約過程的時間複雜度爲多項式時間複雜度O(1)。
若吝嗇SAT問題有多項式時間算法,則SAT問題也有多項式時間算法。因爲因爲SAT問題爲已知的NP-完全問題,則吝嗇SAT問題亦爲NP-完全問題。

證畢。

發佈了58 篇原創文章 · 獲贊 11 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章