算法設計與分析筆記——頂點覆蓋問題VC的NP完全性證明

之前在算法設計與分析筆記——NP完全性中總結了證明NPC的思路,本文總結由三元可滿足性(3SAT)到頂點覆蓋(VC)的NP完全性證明。

定義

3SAT:合取範式中每個簡單析取式恰好有3個文字,則稱之爲3元合取範式。給一個3元合區範式F,問F是可滿足的嗎?

頂點覆蓋:任給一個無向圖G=<V, E>,再給一個非負整數K<=|V|,問G中有頂點數不超過K的頂點覆蓋嗎?

思路

1、顯然VC∈NP,因爲可以在O(n ^ 2)(n是頂點數)的多項式時間內檢查所有的邊,看是否包含了所有頂點。

2、把3SAT當成已知的NPC問題,接下來嘗試把3SAT規約到VC,若VC比3SAT還難,那必然也是NPC。

證明

取3SAT的一個實例F,向着VC問題變換。

使用構件設計法,構造兩組連接:

第一組,把每個文字與它的非連起來,稱爲變元構件,這組邊集記爲E1:
step 1

第二組,把每個括號中的三個文字如(xi, xj, xk)連起來,稱爲簡單析取構件,這組邊集記爲E2:
step 2

最後把這兩組中相同的文字連起來,這組邊集記爲E3。

例如由F = (x1 V x1 V x2) ∩ (!x1 V !x2 V !x2) ∩ (!x1 V x2 V x2) 構造出下面的圖G:step3

先說結論:設語句有n個文字,m個語句(括號),F是可滿足的當且僅當圖中有頂點數不超過K = n + 2m 的頂點覆蓋。

F中哪個頂點值爲1,就表示選取哪個頂點,這樣就建立了G到F的聯繫。

先證由3-SAT爲真對應K = n + 2m的頂點覆蓋:

  1. xi和!xi中,必有一個爲1,上面的變元構件組成的邊集E1總能被覆蓋掉,此時選了n個頂點了。
    第一層被覆蓋

  2. 爲了覆蓋下面三角形的三條邊(邊集E2),最少得選兩個頂點。上一步中,上面選到的點連到三角形中的某個頂點,該頂點就不再考慮了,選剩下的兩個點,這樣能保證邊集E3也能同時完成覆蓋。這樣又選了2m個點,一共是n + 2m個完成了覆蓋。
    在這裏插入圖片描述
    比如F的一個滿足賦值:x1 = 0, x2 = 1,對應的覆蓋如下圖所示:
    F到G的對應

再證由存在K = n + 2m的頂點覆蓋集Vc對應3-SAT爲真的取值:

  1. 上面每對xi和!xi中必有一個屬於Vc,下面三角形中必有兩個頂點屬於Vc;
  2. 三角形中有一個未被取到的頂點,爲了覆蓋掉它與上面頂點的連線,上面與之相連的頂點必被選中,也就表示這個點的值必爲1。三角形中有一個爲1則代表這個語句爲真,所有語句都爲真則代表F爲真。

二者等價關係得證,即F是可滿足的當且僅當圖中有頂點數不超過K = n + 2m 的頂點覆蓋。

最後,由3SAT到圖G共需要構造 2n + 3m 個頂點,n + 6m條邊,很容易在多項式時間內搞定。(別忘記證明規約能在多項式時間完成)

所以,3SAT <=p VC,VC∈NPC。

參考資料

A Sample Proof of NP-Completeness

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章