1. 程式人生 > >P,NP,NPC,NPH問題的區別和聯絡

P,NP,NPC,NPH問題的區別和聯絡

時間複雜度

時間複雜度描述了當輸入規模變大時,程式執行時間的變化程度,通常使用\(O\)來表示。比如單層迴圈的時間複雜度為\(O(n)\),也就是說程式執行的時間隨著輸入規模的增大線性增長,兩層迴圈的時間複雜度為O\((n^2)\),快速排序的時間複雜度為\(O(nlogn)\),使用窮舉法解決旅行商問題的時間複雜度為\(O(n!)\)。時間複雜度根據變化速率的快慢可以分為兩類:1、多項式級的時間複雜度,如\(O(1)\),\(O(n),O(n^a),O(logn)\)等;2、非多項式級時間複雜度,如\(O(a^n)\),\(O(n!)\)等。當我們使用計算機解決一個問題時,我們要儘可能地找到一個具有多項式級時間複雜度的演算法,非多項式級時間複雜度的演算法一般執行時間較長,當輸入資料規模較大時很難被接收。

P類問題

如果一個問題能找到在多項式時間內解決它的演算法,那麼我們說該問題是P類問題。P是多項式(Polynomial)的第一個字母。比如排序問題就是一個P問題,因為我們可以找到一個時間複雜度為\(O(n^2)\)的氣泡排序演算法。

NP問題

有些問題比較複雜,如旅行商問題漢密爾頓迴路問題等,當我們使用暴力搜尋時,此類問題的時間複雜度為\(O(n!)\),看起來很難找到一個能在多項式時間內解決該問題的演算法,而如果別人給了我一個解,我可以很快地驗證該解是不是問題的正確答案。比如在漢密爾頓迴路問題中,我想驗證一條路徑是否正確,則驗證路徑是否正確的時間複雜度為\(O(n)\),為多項式級的時間複雜度。所以,如果我們可以在多項式級的時間內驗證一個問題解的正確性,那麼我們說該問題是NP問題,也就是說直接找NP問題的一個解可能很慢,當驗證NP問題的解卻很快。前面提到的漢密爾頓迴路就是一個NP問題。NP問題不是“非P問題”,而是非確定性多項式(nondeterministic polynomial)問題。

NPC問題

從上面的介紹我們知道,所以P問題都是NP問題,因為能在多項式時間內解決的問題也能夠在多項式時間內驗證解的正確性。那麼我們還想知道是否所有的NP問題都是P問題,這就是著名的“P對NP問題(P=NP?)”。在2000年美國的Clay數學研究所公佈的七個千年數學難題中,P對NP問題位居榜首,可見解決該問題的難度。由於直接證明P對NP問題過於複雜,人們引入了另一類問題--NPC問題(NP -complete,NP-完全問題)。

歸約

在介紹NPC問題之前,需要先了解歸約的概念。假設有兩個問題A和B,對問題A的輸入a經過某種規則轉換為對問題B的輸入b,而A(a)和B(b)的結果相同,也就是說我們可以將求解A問題轉換為求解B問題,或者說可以用解決問題B的方法解決問題A,那我們稱A可以歸約(reducibility,或“約化”)到B。比如問題A為“求解一元一次方程的解”,問題B為“求解一元二次方程的解”,那麼我們就可以將問題A歸約到問題B,因為知道怎麼求解一元二次方程的解肯定知道怎麼求解一元一次方程的解。有一點需要注意,問題A不會難於問題B,也就是說,A要歸約到更難的問題(時間複雜度更高)。除此之外,歸約還具有傳遞性,如果A可以歸約到B,B可以歸約到C,那麼A可以歸約到C。

NPC問題

當一個問題歸約到另一個問題時,問題的複雜度變高了,問題的適用範圍也更廣了。通過對問題的不斷歸約,我們可以得到更復雜、適用範圍更廣的問題來替代簡單但使用範圍小的問題。那麼我們就有一個想法 :是否可以將若干相對不那麼複雜NP問題不斷歸約,從而得到一個最難的“超級NP問題”,所有的NP問題都可以歸約到這個“超級NP問題”,只要解決了這個“超級NP問題”,那麼也就意味著所有NP問題都可以被解決。事實上,存在這樣的一類“超級NP問題”,這也就是我們所說的NPC問題。Stephen Cook是NPC理論的奠基人,而Richard Karp則證明了組合優化中的大多數經典問題(揹包問題、覆蓋問題、匹配問題、分割槽問題、路徑問題、排程問題等)都是NPC問題。NPC問題的定義如下:如果一個問題Q,它滿足以下兩條性質:
(1). Q是NP問題
(2). 任一NP問題都可在多項式時間內歸約到問題Q
那麼我們說問題Q是NPC問題。
如果我們給NPC問題找到了一個多項式時間複雜度的演算法,那麼也就意味著我們給所有的NP問題找到了多項式時間複雜度的演算法,從而NP=P,因為P=NP,所以“P對NP問題”就可以被解決。因為揹包問題是NPC問題,如果我們給揹包問題找到了一個多項式時間複雜度的演算法,那麼就證明了P=NP,但給NPC問題找一個多項式時間複雜度的演算法太難了,所以現在人們普遍相信P≠NP。

NPH問題

上面我們介紹了NPC問題需要滿足兩條性質,當一個問題僅滿足性質(2),而不滿足性質(1)時,我們說該問題時NPH問題(NP-hard,NP-難問題)。

4類問題的聯絡

下圖直觀地描述了這4類問題之間的聯絡:



可以看到P類問題是NP問題,NPC問題是NP問題中最難的問題,NPH問題至少與NPC問題一樣難。

參考

  1. http://www.matrix67.com/blog/archives/105