1. 程式人生 > >P、NP、NPC和NP-Hard相關概念的圖形和解釋

P、NP、NPC和NP-Hard相關概念的圖形和解釋

NP問題就是指其解的正確性可以在多項式時間內被檢查的一類問題。比如說陣列求和,得到一個解,這個解對不對呢,顯然是可以在多項式時間內驗證的。再比如說SAT,如果得到一個解,也是能在多項式時間內驗證正確性的。所以SAT和求和等等都是NP問題。然後呢,有一部分NP問題的解已經可以在多項式時間內找到,比如陣列求和,這部分問題就是NP中比較簡單的一部分,被命名為P類問題。那麼P以外的NP問題,就是目前還不能夠在多項式時間內求解的問題了。會不會將來某一天,有大牛發明了牛演算法,把這些問題都在多項式時間內解決呢?也就是說,會不會所有的NP問題,其實都是P類問題呢,只是人類尚未發現呢?NP=P嗎?

可想而知,證明NP=P的路途是艱難的,因為NP問題實在太多了,要一一找到多項式演算法。這時

Stephen A. Cook這位大牛出現了,寫了一篇The Complexity of Theorem Proving Procedures,提出了一個NP-complete的概念。NPC指的是NP問題中最難的一部分問題,所有的NP問題都能在多項式時間內歸約到NPC上。所謂歸約是指,若A歸約到B,B很容易解決,則A很容易解決。顯然,如果有任何一道NPC問題在多項式時間內解決了,那麼所有的NP問題就都成了P類問題,NP=P就得到證明了,這極大的簡化了證明過程。那麼怎樣證明一個問題C是NP完全問題呢?首先,要證明C是NP問題,也就是C的解的正確性容易驗證;然後要證明有一個NP完全問題B,能夠在多項式時間內歸約到C。這就要求必須先存在至少一個NPC問題。這時Cook大牛就在1971年證明了NP完全問題的祖先就是
SAT。SAT問題是指給定一個包含n個布林變數的邏輯式,問是否存在一個取值組合,使得該式被滿足。Cook證明了SAT是一個NPC問題,如果SAT容易解決,那麼所有NP都容易解決。Cook是怎樣做到的呢?

他通過非確定性圖靈機做到的。非確定性圖靈機是一類特殊的圖靈機,這種機器很會猜,只要問題有一個解,它就能夠在多項式時間內猜到。Cook證明了,SAT總結了該機器在計算過程中必須滿足的所有約束條件,任何一個NP問題在這種機器上的計算過程,都可以描述成一個SAT問題。所以,如果你能有一個解決SAT的好演算法,你就能夠解決非確定性圖靈機的計算問題,因為NP問題在非圖機上都是多項式解決的,所以你解決了SAT,就能解決所有NP,因此——SAT是一個NP完全問題。

感謝Cook,我們已經有了一個NPC問題,剩下的就好辦了,用歸約來證明就可以了。目前人們已經發現了成千上萬的NPC問題,解決一個,NP=P就得證,可以得千年大獎(我認為還能立刻獲得圖靈獎)。

那麼肯定有人要問了,那麼NP之外,還有一些連驗證解都不能多項式解決的問題呢。這部分問題,就算是NP=P,都不一定能多項式解決,被命名為NP-hard問題。NP-hard太難了,怎樣找到一個完美的女朋友就是NP-hard問題。一個NP-hard問題,可以被一個NP完全問題歸約到,也就是說,如果有一個NP-hard得到解決,那麼所有NP也就都得到解決了。

參考文獻:

1.什麼是P問題、NP問題和NPC問題 :http://www.matrix67.com/blog/archives/105

2.P/NP/NPC/NP-hard概念的圖形解釋:

http://www.cnblogs.com/jpcflyer/archive/2012/04/15/2450622.html

3.什麼是NP問題,什麼是NP hard問題,什麼是NP完全問題 :

http://blog.csdn.net/com_stu_zhang/article/details/7248277