NP-complete的問題就是說這個問題既是NP又是NP-hard。
NP-complete的問題就是難以在多項式時間內解決的問題。
因此,當對於一個問題不會解決時,能證明它是NP完全問題,那麼不會做也無可厚非了。
如何證明一個問題的NP完全性呢?——使用規約
首先找到一個已知的NP完全問題,然後證明這個問題能規約到想要被證明NP完全性的問題。那麼就可以說它是一個NP完全問題了。
如何規約?
對於A->B(A規約到B),就是證明A的輸入能映射爲B的輸入,B的輸出能映射爲A的輸出。(注意映射方向)
STINGY SAT問題:給出一個字句的集合和一個整數k,每個字句由分離的文字組成(每個文字是布爾變量),找出一個可滿足的值分配,其中最多k個變量爲true。
要證明這個問題是NP完全問題,首先要找到一個已知的NP完全問題。
SAT就是一個NP完全問題,SAT問題是對布爾表達式中的每個變量賦值,使得整個式子的值爲true。
規約:SAT->STINGY SAT
輸入映射:每個SAT的輸入可以作爲一個CNF,就是多個字句間用與連接,而字句裏面的文字用或連接,SAT我們是對所有變量賦值。如果我們把變量的個數設爲k。
那麼,每個SAT的輸入都可以映射爲一個STINGY SAT的輸入了。
輸出映射:對於一個STINGY SAT的輸出,是找出一個變量賦值分配(不多於k個變量爲true),使得式子爲真。當k爲變量個數時,每一個輸出都將映射到SAT的輸出(SAT的真值指派不可能會有多於k個變量值爲true,因爲變量個數都沒有那麼多)
因此,可以說STINGY SAT是一個NP-complete