Soptq

Soptq

Probably a full-stack, mainly focusing on Distributed System / Consensus / Privacy-preserving Tech etc. Decentralization is a trend, privacy must be protected.
twitter
github
bilibili

頂點覆蓋問題 NP-Complete 證明

頂點覆蓋問題(Vertex Cover)的描述如下:給定 <G,k><G,k>,其中 GG 是一個無向圖,問圖中是否存在點集 VVV<=k\lvert V \rvert <= k,使得 VV 中的每一個頂點覆蓋 GG 中所有的邊。即 GG 中每一條邊的起點或終點都為 VV 中的一個點。以下圖為例,<A,B><A,B> 就是一個符合條件的點集,因為圖中的 4 條邊,每一條邊都連接了 <A,B><A,B> 中至少一個點。

為了證明其 NP 完全,我們首先還是證明其是 NP 問題。給定一個 GG 和一個 VV,我們只需要遍歷 GG 中的每一條邊,檢查其是否與 VV 中一個點相連,即可判定 VV 的正確性。顯然這個過程是可以在多項式時間內完成了,所以頂點覆蓋問題是一個 NP 問題。

接下來,為了證明其是 NP 難問題,我們將 3-SAT 歸約到頂點覆蓋問題。3-SAT 的形式如下:

{C=C1C2CnCi=xaixbixci\begin{cases} C = C_1 \cap C_2 \cap \cdots \cap C_n \\ C_i = x_a^i \cup x_b^i \cup x_c^i \end{cases}

那麼給定一個 3-SAT 表達式,我們作一下操作:

  1. 將每一個簇中的三個變量相互連接。
  2. 將不同簇中不一致的相同變量相連。 不一致的意思是,存在兩個不同簇的相同變量 xaix_a^ixajx_a^j,若 xaix_a^i 為真,則 xajx_a^j 為假;若 xaix_a^i 為假,則 xajx_a^j 為真。

這樣我們就把一個 3-SAT 布爾表達式轉換成了圖,且 k=2nk = 2nnn 是布爾表達式的簇數。舉一個例子,例如一個 3-SAT 布爾表達式為 :

C=(x+y+z)(x+y+z)(x+y+z)(x+y+z)C=(x+y+z) \cdot (\overline{x}+\overline{y}+\overline{z}) \cdot (x+\overline{y}+z) \cdot (\overline{x}+y+\overline{z})

則其按照上述規則,對 C1C_1 作出的圖為:

3-SAT 實例

現在,我們還是來證明兩個問題:

(1)若已知一個 3-SAT 問題有解,則其轉換後的圖 GG 在頂點覆蓋問題上也有解。因為我們有一個 3-SAT 有解,即 C=1C = 1。那麼對於這個 3-SAT 中每一簇都至少有一個變量為真。我們取除這個變量外的另外兩個變量為頂點覆蓋問題中 VV 的成員,最後一共可以得到 2n2n 個成員。由於對於每一簇而言,轉換後在圖中構成了一個三角形,所以從三角形的 3 個頂點中選出兩個頂點必然會包含該三角形所有的邊。另一方面,對於每一個變量,其都有與其矛盾的不在一個簇的相同變量相連了。所以只要 3-SAT 問題有解,則對於每一個變量,不管其取值如何,都必然與與其相矛盾的相同變量連接(例如不管 xx 取真還是取假,都會與 x\overline{x} 相連)。所以 GGk=2nk = 2n 一定滿足,只要對應的 3-SAT 問題滿足。

(2)若已知一個頂點覆蓋問題 <G,k><G, k>,其轉換後的 3-SAT 也有解。 我們可以將 <G,k><G,k> 通過上述規則逆向轉換為布爾表達式,且將 GG 中不屬於 VV 的頂點所對應的變量取真,則 3-SAT 問題為真。

綜上所述,我們將 3-SAT 問題歸約到了頂點覆蓋問題。所以頂點覆蓋問題是 NP 完全的。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。