NP完全問題

ai-exception發表於2018-05-14

如果一個演算法的最差時間效率屬於 O ( p ( n )) ,其中 p (n ) 是問題輸入規模 n 的一個多項式函式,我們說該演算法能夠在多項式的時間內對問題求解
我們把可以在多項式時間內求解的問題稱為易解的,而不能在多項式時間內求解的問題則稱為難解的

非正式地說,我們可以把那些能夠在多項式時間內求解的問題當作電腦科學家所說的* P 集合*
正式點,只有那些能夠回答是或否的問題(又稱判定問題)才屬於 P。

P 類問題是一類能夠用確定性演算法在多項式時間內求解判定問題
這種問題型別也稱為多項式型別

絕大多數判定問題的一個公共特性是:

雖然在計算上對問題求解可能是困難的,但在計算上判定一個待定解是否解決了該問題卻是簡單的,並且,這種判定可以在多項式時間內完成。

一個不確定演算法是一個兩階段的過程,它把一個判定問題的例項 l 作為它的輸入,並進行下面的操作:

  • 猜測(非確定)階段:

    生成一個任意串 S,把它當作給定例項 l 的一個候選解,但 S也可能是完全不著邊際的。

  • 驗證(確定)階段:
    確定演算法把 l 和 S 都作為它的輸入,如果 S 的確是 l 的一個解的話,就輸出“是”;
    如果 S 不是 l 的一個解,該演算法要麼返回“否”,要麼就根本停不下來。

如果一個不確定演算法在驗證階段的時間效率是多項式級的,我們說它是不確定多項式型別的演算法。 **NP 類問題**(Non-deterministic Polynomial)是一類可以用不確定多項式演算法求解的判定問題。我們把這種問題型別稱為不確定多項式類。 我們說一個判定問題 D 1 可以多項式地化簡為一個判定問題 D 2 ,條件是存在一個函式 t 能夠把 D 1 的例項轉化為D 2 的例項,使得:
  • t 把 D 1 的所有真例項對映為 D 2 的真例項,把 D 1 的所有假例項對映為 D 2 的假例項。
  • t 可以用一個多項式演算法計算。

我們說一個判定問題 D 是 NP 完全問題,條件是:

  • 它屬於 NP 型別。
  • NP 中的任何問題都能夠在多項式時間內化簡為 D。

NP 完全問題:

合取正規化的可滿足性問題
哈密頓迴路問題
旅行商問題

NP 完全問題的定義意味著,如果我們得到了一個 NP 完全問題的多項式確定演算法,就說明所有的 NP 問題都能夠用一個確定演算法在多項式的時間內解出,因此,P = NP.換句話說,得到了一個 NP 完全問題的多項式確定性演算法可以表明,對於所有型別的判定問題來說,檢驗待定解和在多項式時間內求解在複雜性上沒有本質的差別。
這種推論使得大多數電腦科學家相信 P ≠ NP但是,到目前為止,還沒有人能從數學上證明這一猜想。

相關文章