Loading AI tools
複雜度類別 来自维基百科,自由的百科全书
NP完全或NP完备 (NP-Complete,縮寫為NP-C或NPC),是計算複雜度理論中,決定性問題的等級之一。NP完备是NP与NP困难問題的交集,是NP中最難的決定性問題,所有NP問題都可以在多項式時間內被歸約(reduce to)為NP完備問題。倘若任何NP完備問題得到多項式時間內的解法,則該解法就可應用在所有NP問題上,亦可證明NP問題等於P問題,然而目前為止並未發現任何能在多項式時間內解決NP完備問題的方法。
![]() | 此條目需要精通或熟悉计算机科学的编者参与及协助编辑。 (2012年10月14日) |
![]() | 此條目內容疑欠准确,有待查證。 (2012年10月14日) |
一個決定性問題C若是為NPC(NP完備),則代表它對NP是完備的,這表示:
可歸約(reducible)在此意指對每個問題L,總有一個多項式時間多對一變換,即一個決定性的演算法可以將實例l ∈ L轉化成實例c ∈ C,並讓c回答Yes当且仅当此答案對l也是Yes。為了證明某個NP問題A實際上是NP完備問題,證明者必須找出一個已知的NP完備問題可以歸約成A。
本定義得到一個結論,就是若上述的C有一個多項式時間可解的演算法,則我們可以將所有的NP問題降到P之中。若欲證明一個問題是NPC,最簡單的方法是先證明它屬於NP,然後將「某個已知是NPC的問題」歸約成它。
前述定義是史提芬·古克 所提出。雖然NPC這個詞並沒有出現在這篇論文上任何地方。在這個資訊科學會議上,資訊科學家激動地討論NPC問題是否可以在一個確定型圖靈機上以多項式時間求解。John Hopcroft總結與會眾人的共識,認為由於沒有人能對某一命題提出駁倒對方的證明,此問題不會於現在解決。此命題就是知名的
一開始很難相信NPC問題是實際存在的,但著名的古克-李芬定理說明了一切(由Leonid Levin與Cook獨立證出SAT問題是NPC問題(即Cook-Levin理論)。
在1972年,理查德·卡普證明有好幾個問題也是NPC(請見卡普的二十一個NP-完全問題),因此除了SAT問題外,的確存在著一整類NPC問題。從古克開始,數千個問題藉由從其他NPC問題變換而證實也是NPC問題,其中很多問題被蒐集在Garey與Johnson於1979年出版的書之中 。
滿足條件2(无论是否满足条件1)的問題集合被稱為NP困难。一個NP困难問題至少跟NPC問題一樣難。有一类问题已经被证明属于NP困难但不属于NP,即,这类问题至少与NP-complete一样难,但这类问题又不属于NP(自然也不属于NP-complete)。例如圍棋的必勝下法,就是这样一个問題。[1]
一個NPC問題的例子是子集合加總問題,題目為
這個問題的答案非常容易驗證,但目前沒有任何一個夠快的方法可以在合理的時間內(意即多項式時間)找到答案。只能一個個將它的子集取出來一一測試,它的時間複雜度是,是此集合的元素數量。
另一個有趣的例是圖同構(isomorphism)問題,即以圖論方法決定兩個圖是否為同構。兩圖同構的直覺條件是若其中一圖可以經由移動頂點使它與另一個圖重合,則為同構。思考下列兩問題:
子圖同構問題是NPC,而圖同構問題一般認為不是P也不是NPC問題,雖然它明顯是一個NP問題。這是一個典型被認為很難卻還不是NPC問題的例子。
下表列出了一些以決定性命題表示的著名NPC問題:
更多NPC問題的例子,請見NP-complete問題列表。
右邊是一些NPC問題及證明其為NPC問題的變換流程圖。在流程圖中,箭頭代表的是從何問題變換成另一問題的過程,要注意的是這張圖並不代表這些問題的數學關係,事實上任兩個本質為NPC的問題都可以以多項式時間變換,這圖僅指示可以讓研究者較為簡單地變換問題的順序。
通常一個P與NPC問題的敘述看起來只有一些不同的地方,例如3SAT問題(SAT問題的限制版本)仍然是NPC問題,但更限制的2SAT問題則是個P問題(準確的說,是NL-complete問題),而條件較為寬鬆的MAX 2SAT問題卻又成了NPC問題。決定一個圖是否能被兩色塗滿是P問題,但三色圖是NPC問題,即使我們將它限制在平面圖上。決定一個圖有無迴圈或它是兩分圖很容易(在log空間等級),但是發現一個最大二分圖或最大迴圈子圖則是NPC。以一固定百分比來求郊遊打包問題的最佳解可以在多項式時間解決,但是求最佳解是NPC。
目前為止,所有已知解NPC問題的演算法需要依照資料數量而定的超多項式(superpolynomial)時間,目前也不知道是否有任何更快的演算法存在。因此要在輸入資料量大的時候解決一個NPC問題,通常我們使用下列的手段來解:
依照上述NPC的定義,所謂的歸約(reduce to)其實是多項式時間多對一變換的簡稱。
另一種歸約法稱為多项式时间图灵归约(polynomial-time Turing reduction)。若我們提供一個副函式(subroutine)可以在多項式時間解出"Y",又可寫出呼叫此副函式的程式並在多項式時間解出問題"X",代表我們可以將"X"多項式時間圖靈變換成"Y"。相較起來,不同處在於多對一變換只能呼叫上述副函式一次,且副函式的回傳值必須就是整個變換程式回傳的值。
如果有人使用圖靈變換而非多對一變換來解析NPC,此問題的解答集合不一定會小於NPC。孰大孰小其實是個開放問題。如果兩個概念相同,則可導出NP=反NP(co-NP)。此結論成立的道理在於NPC與反NPC的定義以图灵归约來看是相等的,且圖靈變換定義的NPC包含多對一變換定義的NPC,反NPC也是相同情況。所以若是兩種變換定義的NPC一樣大的話,反NPC也會比照辦理(在兩者的定義之下)。例如SAT的反問題也會是NPC(在兩者的定義之下)。因此推得NP = 反NP(證明在反NP條目中)。雖然NP是否等於反NP是個開放問題,但一般認為這似乎不大可能,也因此那兩類的NPC定義也不大可能相等。
另一種很常用於NPC證明的歸約手法是對數空間多對一變換(logarithmic-space many-one reduction),它是一種可以在對數量級空間運用的多對一變換法。由於每道可以在對數空間完成的運算也可以在多項式時間做完,因此能使用對數空間多對一變換的場合也可以使用多項式時間多對一變換。本方法較多項式時間多對一變換優雅,它也可以讓我們對演算法複雜度細分出更多分類,例如P完備複雜度。而NPC的定義是否會因為使用不同變換手法而產生差異,仍是一個未知的問題。