通俗易懂的P vs NP問題解釋 -@AlejandroPiad

banq發表於2021-01-08

在整個電腦科學中最重要的問題:P是否等於NP?
關於這個問題的正確的答案是什麼?我們仍然不知道,但是大多數電腦科學家認為P不等於NP。原因主要是哲學上的,但也有證據表明,如果P等於NP,則會發生很多奇怪的事情。
 

 P對NP問題是Steve Cook於1971年首次提出的。“P/NP問題”的P指多項式時間(Polynomial),一個複雜問題如果能在多項式時間內解決,那麼它便被稱為P問題,這意味著計算機可以在有限時間內完成計算;
NP指非確定性多項式時間(nondeterministic polynomial),一個複雜問題不能確定在多項式時間內解決,假如NP問題能找到演算法使其在多項式時間內解決,也就是證得了P=NP
- 百度百科

 
電腦科學就是尋找解決難題的巧妙方法。我們為其中的一些演算法找到了巧妙的演算法:對事物進行排序,找到最短路徑,求解方程式,模擬事務...。
但是有些問題似乎太難了,一個例子是旅行問題。
查詢從您的家鄉城市出發的自駕車之旅,希望訪問您所在國家/地區的所有主要城市,但是必須以最低的燃油費用返回家中。
這是我們希望計算機輕鬆解決的問題,對嗎?那就是計算機的用途!
好吧,非常聰明的人已經嘗試過了,沒有人想出一種總是比簡單地嘗試所有可能的迴圈更好的演算法。
問題在於,迴圈數的增長速度總是快於城市的增長速度!
讓我們更加輕鬆一些,如果我簡單地問:
是否可以旅行所有燃料費少於X美元的城市?
尚無人知道一種演算法,可以精確地針對任何X值回答該問題,而無需嘗試所有迴圈,而這又是指數級的。
那麼,我們是否很愚蠢?還是這個問題太複雜了,以至於在一般情況下不可能找到一個聰明的演算法來解決它?這是所有電腦科學中最重要的問題的根源:P vs NP。
 
回答這個問題比看起來要困難得多,您會看到,CS中的大多數問題都與事物有關:如何排序,如何比較,如何處理...
但這是一個元問題:
關於是否存在本質上很難解決的事物問題?
斯蒂芬·庫克(Stephen Cook)在電腦科學的早期試圖回答這個問題。他提出了以下定義:
假設我們有一個形式的問題:

是否存在具有指定屬性Q的物件X?
 
現在來看看這個問題的回答難度。以下是這種型別的簡單問題的一個示例:

給定一個由N個元素組成的陣列,是否有一個元素小於X?
回答這個問題很容易。逐個檢視每個元素,然後將其與X進行比較。對於任何可能的陣列,該過程最多需要N個步驟。
這是P中問題的一個示例。P在這裡表示“多項式時間複雜度”。直觀地講,如果存在一種演算法可以在多項式時間內計算出正確的答案,那麼它屬於P問題。
現在回到旅行推銷員,假設我給您一個答案:

是的,這是一個燃料成本小於X的迴圈。
您如何驗證答案的正確性?您只需累計迴圈中所有邊/路線的成本。這會再次需要N步計算才能得到答案。

 
下面這是NP問題的一個例子。此處的NP表示“不確定的多項式-時間複雜度”。直觀上,如果存在一種演算法可以驗證多項式時間的正確答案,則屬於NP問題。
 
P問題很容易解決。NP問題,我們尚不知道,但至少它們很容易驗證,這是關鍵的。
請注意,P問題也是NP。
現在,P與NP問題正式是這樣的:

NP中是否存在P中沒有的問題?
P vs NP基本上是在問:是否存在天生難於解決的問題,而與我們未來的聰明程度無關。
正確的答案是什麼?我們仍然不知道,但是大多數電腦科學家認為P不等於NP。
原因主要是哲學上的,但也有證據表明,如果P等於NP,則會發生很多奇怪的事情。
 
這個問題是電腦科學的核心,因為它討論了計算的本質及其固有的侷限性,無論技術如何改進。






 

相關文章