NP-完全問題

Hang3發表於2024-10-09

演算法導論

這個文件是學習“演算法設計與分析”課程時做的筆記,文件中包含的內容包括課堂上的一些比較重要的知識、例題以及課後作業的題解。主要的參考資料是 Introduction to algorithms-3rd(Thomas H.)(對應的中文版《演算法導論第三版》),除了這本書,還有的參考資料就是 Algorithms design techniques and analysis (M.H. Alsuwaiyel)。

NP-完全問題

在之前介紹的問題中,有些問題能夠在較低次數(e.g. 3)的多項式時間內解決,而有些問題則是無法使用高效的演算法解決。此外,這些問題也不太可能在未來某天找到高效的演算法進行求解。

\(\Pi\) 表示任何一個問題,稱存在一個多項式時間的演算法解決問題 \(\Pi\) 當且僅當存在一個時間複雜度問題 \(O(n^k)\) 演算法求解問題 \(\Pi\),其中 n 為輸入的長度,k 為一個非負整數。

然而有趣的是,在現實世界中,大多數問題並不屬於這個分類,因為求解這些問題的演算法的時間複雜度都是指數甚至是超指數的,e.g.\(2^n, n!\)

因此在電腦科學中,將那些存在多項式時間演算法求解的問題稱為易駕馭的(tractable),而那些不可能找到一個多項式時間複雜度演算法求解的問題稱為棘手的(intractable)。

這裡將會介紹棘手問題的一個子類,被稱為NP-完全問題(NP-complete Problems)。

在研究NP-完全理論(Theory of NP-completeness)的時候,通常會將問題重申為一個決策問題(decision problem),也就是這個問題的解只能是yes或者no,與之形成對比的就是最佳化問題(optimization problem),也就是與某個數量的最小化或者最大化相關的問題,比如找到列表中的最小數或者最大數,又或者最小生成樹問題。

下面介紹一個例子,令 S 為一個實數序列,那麼問題 ELEMENT UNIQUENESS 問題就是關心 S 中的所有數字是否都是不同的。

將這個問題改寫為決策問題,則

決策問題: ELEMENT UNIQUENESS
輸入: A sequence S of integers.
問題: S 中是否有兩個相等的元素?

將這個問題改寫成最佳化問題,那麼就是關心序列 S 中出現頻率最高的元素,如下:

最佳化問題: ELEMENT COUNT
輸入: A sequence S of integers.
輸出: S 中出現頻率最高的元*.

如果能夠一個高效的演算法解決一個決策問題,那麼也能很容易找到該問題對應的最佳化問題

比如下面這個問題,給定一個無向圖 G = (V, E),為圖中每個節點使用 k 種顏色中的一種著色,要求鄰接的節點不同使用相同的顏色,那麼著色問題是指,是否能夠用一個指定數目的顏色數為一個無向圖著色。決策問題如下:

決策問題: COLORING
輸入: 無向圖 G = (V,E) 以及一個正整數 k ≥ 1
問題: 圖 G 是否是能夠k-著色的? 也就是說是否能夠最多使用 k 中顏色為圖 G 著色?

這個問題是棘手的(intractable),如果令 k = 3,那麼這個問題就是著名的3-著色問題,即使當 G 是一個平面圖也是棘手的。

這個問題的最佳化問題是,用上述的方法對一個圖進行著色所需的最小顏色數,記為\(\chi(G)\),如下:

最佳化問題: CHROMATIC NUMBER
輸入: 無向圖 G = (V,E).
輸出: 圖 G 的著色數.

那麼,如果能夠一個高效的演算法 A 解決圖著色的決策問題,那麼就可以利用演算法 A 以二分搜尋法來找到圖 G 的著色數:顯然 \(1\le\chi(G)\le n\),那麼就在這個區間內找到一個數 k,滿足A(k) = yes, A(k-1) = no,這樣只需要呼叫 \(O(\log n)\) 次演算法 A 就能得到圖G的著色數。

因為這個原因,在研究NP-完全問題時,通常更加關注決策問題。

P 類問題

確定性演算法:令 A 表示解決問題 \(\Pi\) 的一個演算法,稱演算法 A 是確定的,如果在問題 \(\Pi\) 的一個例項中,演算法在執行的每一個步驟中都只有一個選擇,因此,使用相同的輸入例項執行演算法 A 時,其輸出不會改變。

有了確定性演算法的定義後,就可以定義P類問題:

P類問題:如果一個決策問題的解能夠透過一個確定性演算法在多項式 \(O(n^k)\) 個步驟中得到,其中 n 為輸入的規模,k 為一個非負整數,那麼就稱這個問題是 P 類問題。

比如排序問題:
SORTING: 給定一個包含 n 個整數的序列,判斷這個序列是否是以非遞減(nodecreasing)的順序排序的?

如果對於任何問題 \(\Pi\in C\)\(\Pi\) 的補集也在 C 中,那麼就稱 C 類問題在補集下是封閉的(closed under complementation)。

P類問題在補集下都是封閉的,比如上面的SORTING問題。

NP 類問題

NP類問題是指,存在一個確定性演算法 A,能夠在多項式時間內驗證這類問題的解。

為了定義NP類問題,這裡先介紹非確定性演算法的定義,對於一個輸入 x,非確定演算法通常由兩個階段組成:

  1. guessing phase: 這個階段會生成一個任意的字串 y,這裡的“任意”是指這個字串可能對應輸入例項的解,也可能不對應,甚至可能不滿足問題解的格式。
    非確定性演算法的不同執行可能會得到不同的字串。而對這個字串唯一的要求是要能夠在多項式個步驟中生成這樣的字串,即\(O(n^i)\) 個步驟中,其中 \(n = |x|\)i 是一個非負整數。
  2. verification phase: 在這個階段,使用一個確定演算法驗證兩件事:首先,驗證前一步生成的字串 y 是否是滿足問題解的格式,如果不滿足,那麼演算法輸出 no 並終止。
    否則,演算法進一步驗證 y 是否是問題的解,如果是,那麼就輸出 yes 並終止,否則輸出 no 並終止。要求這一步也能在多項式時間 \(O(n^j)\) 內完成,其中 j 為一個非負整數。

A 為問題 \(\Pi\) 的一個非確定演算法,稱 A 接受(accepts)了問題 \(\Pi\) 的一個例項 I 當且僅當,演算法 A 對於輸入I,能夠在某次猜測中得到 yes 的答案。

這裡需要強調的是,如果非確定演算法 A 對於輸入 I 輸出了答案 no 也並不意味著演算法 A 不接受例項 I,而是演算法 A 可能猜測了一個不正確的解。

NP類問題:如果一個決策問題存在一個執行在多項式時間的非確定演算法,那麼這個問題就是NP類問題。

P類問題和NP類問題有下面兩點區別:

  • P類問題是指能夠透過執行在多項式時間內的確定演算法決策或者解決的決策問題;
  • NP類問題是指能夠透過執行在多項式時間內的確定演算法驗證該問題的解的決策問題;
    或者等價的,NP類問題是指能夠透過執行在多項式時間內的非確定演算法解決的決策問題。

也就是說,可以有兩種方法證明一個問題屬於NP類問題。

NP-complete

術語“NP-完全”(NP-complete)代表NP類問題中最難的那部分決策問題,也就是說,如果能夠證明NP-完全問題中的某個問題是能夠透過執行在多項式時間內的確定演算法解決的,那麼所有的NP類問題都能夠透過一個執行在多項式時間內的確定演算法解決,也就是說 NP = P,然而到目前為止,還沒有人能夠證明 NP = P,也就是說證明一個NP-完全問題能夠在多項式的時間內求解。

而這裡主要是介紹如果證明一個問題是NP-完全問題。

多項式規約:假設有兩個決策問題 \(\Pi,\Pi'\),如果存在一個多項式時間的確定演算法 AA 能夠將問題 \(\Pi\) 的例項 I,轉換成為問題 \(\Pi'\) 問題的例項 I',並且對問題 I 的解為 yes 當且僅當對問題 I' 的解也為yes。 那麼就稱問題 \(\Pi\) 能夠多項式規約到問題 \(\Pi'\),記為\(\Pi\propto_{poly} \Pi'\)

NP-hard:對於一個決策問題 \(\Pi\),如果有 \(\forall \Pi'\in NP, \Pi'\propto_{poly} \Pi\) ,則稱問題 \(\Pi\) 是NP-hard 的。

NP-complete:對於一個決策問題\(\Pi\),如果有 \(\forall \Pi'\in NP,\Pi'\propto_{poly}\Pi\),且\(\Pi\in NP\),則稱問題 \(\Pi\) 是NP-complete的。

The satisfiability problem

這是一個著名的NP-完全問題,給定一個布林表示式 f,如果 f 是多個子句的合取(conjunction),而每個子句是多個布林變數或布林變數取反的析取(disjunction),稱這個表示式是CNF(Conjunctive Normal Form)正規化。比如下面這個例子:
\(f=(x_1\lor x_2)\land (\bar{x_1}\lor x_3\lor x_4\lor \bar{x_5})\land (x_1\lor \bar{x_3}\lor x_4)\)

稱一個CNF正規化是可滿足的,如果存在對正規化中的布林變數的某中賦值方式使得該正規化為真,比如上面例子中的CNF中令 \(x_1,x_3\) 為真,則正規化也為真,所以上面的CNF正規化是可滿足的。

決策問題: SATISFIABILITY
輸入: 一個CNF布林公式 f
問題: f 是否是可滿足的?

可滿足性問題是第一個被證明為NP-完全的問題,而作為第一個NP-完全問題,也沒有別的NP-完全問題能夠多項式歸約到這個問題上。所以這個問題的NP-完全性的證明是透過證明所有NP問題能夠多項式歸約到這個問題上,也就是說所有的NP問題都能夠透過呼叫多項式確定演算法 A 求解,其中演算法 A 將可滿足性問題作為其子程式,並且只呼叫一次這個子程式。

The proof consists of constructing a boolean formula f in conjunctive normal form for an instance I of Π such that there is a truth assignment that satisfies f if and only if a nondeterministic algorithm A for the problem Π accepts the instance I. f is constructed so that it “simulates” the computation of A on instance I.

CNF可滿足性問題的證明過程也蘊含了一些基本定理,下面將會介紹。

NP-完全性的證明

多項式規約的關係是可傳遞的(transitive),這對於NP-完全性的證明是有必要的。

定理:令 \(\Pi, \Pi'\) 以及 \(\Pi''\) 為三個決策問題,如果滿足 \(\Pi\propto_{poly}\Pi',\Pi'\propto_{poly}\Pi''\),則有 \(\Pi\propto_{poly}\Pi''\)

證明略,可參考 Algorithms Design Techniques and Analsis

推論:令 \(\Pi,\Pi'\) 為兩個NP問題,如果有 \(\Pi'\propto_{poly}\Pi\),並且 \(\Pi'\) 是NP-完全的,那麼 \(\Pi\) 也是NP完全的。

證明略,可參考 Algorithms Design Techniques and Analsis

所以透過上面的推論,如果要證明一個問題 \(\Pi\) 是NP-完全的,那麼就需要證明:

  1. \(\Pi \in NP\)
  2. \(\exists\Pi'\in NP-complete,\Pi'\propto_{poly} \Pi\)

下面看一個例子,考慮下面兩個問題:

  1. Hamiltonian 迴路問題:給定一個無向圖 G = (V, E),是否存在一個Hamiltonian迴路,即能夠訪問圖中每一個節點一次的迴路?
  2. 旅行售貨員問題:給定一個集合的城市,以及每個城市間來往的距離,以及一個整數 k,是否存在一個僅訪問每個城市一次的迴路,並且迴路的距離不超過 k?

現在已知Hamiltonian迴路問題是NP-完全問題,現在要證明旅行售貨員問題是NP-完全的。

#1. 首先需要證明旅行售貨員問題是NP類問題。

這個比較容易證明,可以構造一個非確定性演算法,首先生成一個任意城市的序列,然後驗證這個序列是否是滿足要求的,即按照序列的順序能訪問到每個城市一次並回到起點,然後再驗證這個序列中城市間路徑的長度是否是小於 k

這樣一個演算法的時間複雜度顯然是多項式時間以內的,於是可以得到一個多項式時間的非確定演算法來解決這個問題。因此旅行售貨員問題是NP類問題。

#2. 其次要證明Hamiltonian迴路問題能夠多項式歸約到旅行售貨員問題上,即:
\(HAMILTONIAN\_CYCLE\propto_{poly}TRAVELING\_SALESMAN\)

G = (V, E) 是Hamiltonian迴路問題的任意一個例項,構造一個帶權重的圖 G' = (V, E') 以及一個邊界 k 滿足這樣的條件:G 有一個Hamiltonian迴路當且僅當 G' 有一個長度不超過 k 的訪問路徑,能夠訪問每個節點僅一次且回到起點。

構造 G' = (V, E') 如下:
\(E'=\lbrace (u,v)|u,v\in V \rbrace\)
併為每條邊分配長度如下:
l(e) = 1 , if \(e\in E\)
l(e) = n , if \(e\notin E\)
其中 n = |V|,並且設定 k = n

那麼顯然,G 中有一個Hamiltonian迴路當且僅當 G' 中有一個長度剛好為 n 的訪問路徑,這個訪問路徑能夠訪問 V 中每個節點僅一次且返回起點。

這裡需要強調的是,對 k 的賦值也是多項式規約的一部分。

顯然,上面的規約步驟能夠在多項式時間內完成,所以Hamiltonian迴路問題能夠多項式歸約到旅行售貨員問題上,因此旅行售貨員問題是NP-完全問題。

相關文章