P,NP,NPH,NPC問題

算法系列博客之NPC問題

我們已經學習了很多高效的算法,它們大多都是多項式時間的,有的還能達到線性時間,甚至是對數時間。但是到目前爲止,仍然有一批問題沒有被證明有多項式時間內的算法;所謂沒有被證明,即是說明理論上並不能說明它有或者沒有多項式時間算法,但是至今爲止都沒有找到。
下面就要針對這類問題進行定義研究。

P問題,polynomial指能夠在多項式時間內進行求解的問題;
NP問題,nondeterministic polynomial,非確定性多項式,即任意一個可能解的正確性判定能夠在多項式時間之內完成;
NP難問題,即如果一個NP難問題有多項式時間的求解方案,那麼任意NP問題都能夠有多項式時間的求解方案;
NP完全問題,即既是NP難問題,又是NP問題的一類問題。

這裏寫圖片描述
經過以上的定義,由於NP難問題的多項式時間解決方案能使得所有NP問題得到多項式時間的解決方案,且NP完全問題是NP難得一個更小的子集,所以我們可以拋開理論,近似認爲如果一個問題屬於NP完全問題,那麼這個問題目前爲止可以被認定爲不具備多項式時間解決方案的問題

證明一個問題是NPC問題,第一部分說明其是一個NP問題很簡單,但證明其是NP難問題是非常難的,需要說明一旦它有多項式時間解決方案,所有NP問題就都有,這幾乎是一個不可能的任務。但是自從SAT問題被證明是NP難之後,我們探索其他的NP難問題就變得簡單起來。
即, 只要證明已知的NP難問題能夠在多項式時間之內轉化到另一個問題上,那麼這個問題也就是一個NP難問題。因爲一旦這個問題是有多項式時間解決方案的,那麼前一個NP難問題就能夠在多項式時間轉換到這個問題並在多項式時間求解之後再轉換爲原問題的解,整個過程仍然是在多項式時間之內完成;那麼也就是說前一個NP問題有了多項式時間的解決方案,即根據定義所有NP問題也都有了多項式時間的解決方案

那麼證明一個問題是否是NP難問題就相對容易了,只需要將一個已知NP難問題多項式時間規約到此問題上即可。證明NPC問題,只需要在此基礎上再說明其是NP問題即可。

8.9 In the HITTING SET problem, we are given a family of sets {S1, S2, … , Sn} and a budget b, and we wish to find a set H of size <= b which intersects every Si, if such an H exists. In other words, we want H ∩ Si ≠ Ø. SHOW that HITTING SET is NP-complete.
很顯然,這個問題是一個NP問題,下面證明其是NP難問題。
我們已經知道頂點覆蓋問題是爲一個NP難問題,可以構造這樣一個規約將其規約到這個問題之上。
按照以下方法構造這個問題的模型,集合中可能的所有元素一一對應於圖的頂點,兩個頂點相連就將這兩個頂點任意放進同一個集合,如果某個點不與任何邊相連則將這個頂點單獨放入一個集合,則此問題得出的集合就對應着頂點覆蓋中問題答案中的頂點集合加上那些沒有邊的頂點。
證明,頂點覆蓋問題的答案頂點集合能夠覆蓋掉所有的邊,也即是說頂點集合之外的頂點要麼不與任何邊相連,這種點我們已經加進了結果;要麼是與頂點集合中的某一個點相連,也即是說它們位於HITTING SET問題中的同一個集合,所以頂點集合加上那些沒有邊的頂點的集合一定與所有集合都有交集。
而整個構造過程的步驟與邊和點的個數相同,這即是說能夠在多項式時間將頂點覆蓋問題規約到HITTING SET問題之上,即HITTING SET問題是NP難問題,也是NP完全問題。

8.20 In an undirected graph G=(V, E), we say D ⊆ V is a dominating set if every v∈V is either in D or adjacent to at least one member of D. In the DOMINATING SET problem, the input is a graph and a budget b, and the aim is to find a dominating set in the graph of size at most b, if one exists. Prove that this problem is NP-complete.
同樣,想要檢測一個解是否是這個問題的正確解,只需要對每一個頂點進行驗證即可,這個時間是多項式時間,所以這個問題是一個NP問題。
下面將頂點覆蓋問題歸約到DOMINATING SET問題,直接在此圖中得出DOMINATING SET問題的答案D,然後再刪除掉那些不與任何邊相連的頂點,得出的即是頂點覆蓋問題的答案。
證明,由於頂點覆蓋能夠覆蓋掉所有的邊,因此如果一個頂點不屬於頂點覆蓋問題的答案集合,那麼這個點要麼是與頂點覆蓋集合中某點想連接,要麼沒有任何邊與之連接。而如果一個點沒有任何邊與之連接,根據題目定義,它一定是答案D中的元素,因此答案D刪除掉那些不與任何邊相連的頂點,得出的一定是頂點覆蓋集合;相反,頂點覆蓋集合加上那麼不與任何邊相連的頂點一定是答案D。
而規約的過程即是刪除掉那些不與任何邊相連的頂點,這個過程顯然是多項式時間的,所以DOMINATING SET問題是一個NP難問題。綜合所有,它是一個NP完全問題。

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