NP完全問題,這一類問題含有許許多多的問題,它們都有一個共同的特性,即如果它們中一個是多項式可解的,那麼所有其他的問題也是多項式可解的。如判定問題:它的解決方案只有兩個結果:是或不是;最優化問題:關心某一數量的最小化或最大化。
如果我們有一個求解判定問題的有效算法,那麼很容易的把它變成求解與它相對應的最優化問題的算法。
我們通常可以將一個給定的優化問題轉化爲一個相關的決策問題,方法是對要優化的值施加一個界限。
如果一個優化問題很簡單,那麼它的相關決策問題也很簡單。
如果我們能證明一個決策問題是困難的,我們也能證明它的相關優化問題是困難的。
在研究np完全問題、計算複雜性甚至一般的可計算性問題時,更容易將注意力限制在決策問題上。
P類
定義:設A是求解問題的一個算法,如果在展示問題的一個實例時,在整個執行過程中每一步都只有一種選擇,則稱A是確定性算法。因此如果對於同樣的輸入,實例一遍又一遍地執行,它的輸出從不改變。
尋找最大最小數、求第n個Fibonacci數、最小代價生成樹都是P類問題。快排不是P類問題,因爲快排是算法,不是問題。排序問題,SORTING、SET DISJOINTNESS、SHORTEST PATH、2-COLORING、2-SAT問題都是P類問題。
定義:判定問題的P類由這樣的判定問題組成,它們的yes/no解可以用確定性算法在運行多項式步數內,例如在步內得到,其中k是某個非負整數,n是輸入大小。
非確定性算法
在輸入x上,不確定性算法分爲兩個階段:
a)猜測階段:生成任意字符串y。它可能對應於輸入實例的解決方案,也可能不對應。它甚至可能不是所需解決方案的正確格式。它可能不同於一次運行到另一次的不確定性算法。只需要在多項式數量的步驟中生成此字符串。
b)驗證階段:確定性算法驗證兩件事。首先,它檢查生成的解決方案字符串y的格式是否正確。如果不是,那麼算法會因爲答案是no而停止運行。如果y是正確的格式,算法繼續檢查它是否是問題的實例x的解,如果它確實是實例x的解,它會停止並回答yes;否則它會停下來,回答“不”。這一階段還需要在多項式數量的步驟中完成。
NP類
NP類決策問題由多項式時間內存在不確定性算法的決策問題構成。
P是一類我們可以用多項式時間運行的確定性算法來決定或解決的決策問題。
NP是一類決策問題,我們可以使用多項式時間運行的確定性算法來檢查或驗證它們的解決方案。
P中的任何問題都屬於NP。
歸約
定義:令和爲兩個決策問題。 我們說,如果存在確定算法A的行爲如下,則在多項式時間內歸約爲,表示爲“∝”。 當A出現問題的實例Ⅰ,它會將其轉換爲問題的實例Ⅰ',使得對Ⅰ的答案爲是,當且僅當對Ⅰ’的答案爲是。 而且,這種變換必須在多項式時間內完成。
判斷Hamilton迴路∝(TSP旅行商問題)
設G是HC的一個實例,構造加權圖G'和k,使得G有HCG'有一條長度不超過k的HC。
設G=(V,E),完全圖G'=(V,E'),E'={(u,v)u,vV},,k=|V|。
NP-hard 和NP-complete
定義 : A決策問題被稱爲NP-hard,如果在NP中的每個問題, ∝
定義 : A決策問題被稱爲NP-complete,如果 1 )在 NP中, 2 ) 對於NP中每一個問題, ∝
定理:如果NP完全問題是多項式時間可解的,則P=NP。同樣,如果NP中的任何問題都不是多項式時間可解的,那麼NP完全問題也不是多項式時間可解的。
證明:
設,且,給定, ∝
可滿足性問題(The Satisfiability problem)
第一個被證明爲NP完全問題的問題。
給出一個布爾公式f,如果它是子句的合取,我們說它是合取範式(CNF)。子句是字面量的分離,字面量是布爾變量或其否定。
如果一個公式的變量有一個使其爲真值的賦值,那麼這個公式就是可滿足的。
如就是不可滿足的。
定理 (傳遞性): 是三個判定性問題 , 使得 ∝, ∝,那麼 ∝;
推論 : 如果和兩個NP問題, ∝ 並且是NP完全問題,那麼是NP-complete。
爲了證明是NP-complete, 我們需要證明問題:
1 ) NP
2 ) 有一個NP-complete問題 ,使得 ∝。
NP-complete問題舉例:CLIQUE、VERTEX COVER、INDEPENDENT SET、3-SAT、3-COLORING、3-dimensional matching、HAMILTONIAN PATH、PARTITION、KNAPSACK、BIN PACKING、SET COVER、MULTIPROCESSOR SCHEDULING、LONGEST PATH。(∝)
證明SAT∝(圖G中是否存在規模至少爲k的獨立集)
SAT實例,共m個子句,n個變量
構造圖G=(V,E),V={所有變量出現過一次就作爲一個頂點},E={在不同的子句中,}
例
一個規模爲m的團集對應於一個m個不同子句中對m個文字的真值指派。
f可滿足m個子句中每個子句都有一個文字爲真G中有m個頂點構成完全子圖。
證明Clique∝(頂點覆蓋問題)挑取最少的頂點使得每一條邊至少有一個頂點在在這個點集合中。
G=(V,E) 規模爲k的獨立集∝(補圖,規模爲n-k)
若C=(U,F)是G的團集,沒邊與U中的頂點相連,V-U能夠覆蓋中所有的邊。
那麼V-U是的VC。
反之,若D是的VC,D覆蓋了的所有邊,則爲無邊連V-D中點,那麼V-D爲G的團集。
證明SAT∝
n個變量
構造VC實例:
1)每個變量,構造頂點右邊相連;
2)每個子句有個文字,G中有一個規模爲的團集;
3)中每個w與1)中對應點相連;
4)
co-NP
co-NP類問題由NP中互補的那些問題組成。
定義:如果1)在co-NP中,並且2)對co-NP中的每個問題’, ∝,則問題對於co-NP類是完整的;
定理:問題是NP完全的,當且僅當它的互補是完整的對於co-NP類。
定理:問題TAUTOLOGY是完全的對於co-NP類
TAUTOLOGY在P中當且僅當,NP = NP
TAUTOLOGY在NP中,當且僅當co-NP = NP
NPI類
定理:如果問題及其補集是NP-complete的,則co-NP = NP
NPI(NP-Intermediate):複雜度級別爲NP但不屬於P類或NP-complete的問題
定理(Ladner):如果P≠NP,則NP中存在一個集合A,使得A不在P中,而A不是NP完全的。
四類問題的關係