【算法學習筆記十】NP問題

NP完全問題,這一類問題含有許許多多的問題,它們都有一個共同的特性,即如果它們中一個是多項式可解的,那麼所有其他的問題也是多項式可解的。如判定問題:它的解決方案只有兩個結果:是或不是;最優化問題:關心某一數量的最小化或最大化。

如果我們有一個求解判定問題的有效算法,那麼很容易的把它變成求解與它相對應的最優化問題的算法。

我們通常可以將一個給定的優化問題轉化爲一個相關的決策問題,方法是對要優化的值施加一個界限。

如果一個優化問題很簡單,那麼它的相關決策問題也很簡單。

如果我們能證明一個決策問題是困難的,我們也能證明它的相關優化問題是困難的。

在研究np完全問題、計算複雜性甚至一般的可計算性問題時,更容易將注意力限制在決策問題上。

P類

定義:設A是求解問題\Pi的一個算法,如果在展示問題\Pi的一個實例時,在整個執行過程中每一步都只有一種選擇,則稱A是確定性算法。因此如果對於同樣的輸入,實例一遍又一遍地執行,它的輸出從不改變。

尋找最大最小數、求第n個Fibonacci數、最小代價生成樹都是P類問題。快排不是P類問題,因爲快排是算法,不是問題。排序問題,SORTING、SET DISJOINTNESS、SHORTEST PATH、2-COLORING、2-SAT問題都是P類問題。

定義:判定問題的P類由這樣的判定問題組成,它們的yes/no解可以用確定性算法在運行多項式步數內,例如在O(n^k)步內得到,其中k是某個非負整數,n是輸入大小。

非確定性算法

在輸入x上,不確定性算法分爲兩個階段:

a)猜測階段:生成任意字符串y。它可能對應於輸入實例的解決方案,也可能不對應。它甚至可能不是所需解決方案的正確格式。它可能不同於一次運行到另一次的不確定性算法。只需要在多項式數量的步驟中生成此字符串。

b)驗證階段:確定性算法驗證兩件事。首先,它檢查生成的解決方案字符串y的格式是否正確。如果不是,那麼算法會因爲答案是no而停止運行。如果y是正確的格式,算法繼續檢查它是否是問題的實例x的解,如果它確實是實例x的解,它會停止並回答yes;否則它會停下來,回答“不”。這一階段還需要在多項式數量的步驟中完成。

NP類

NP類決策問題由多項式時間內存在不確定性算法的決策問題構成。

P是一類我們可以用多項式時間運行的確定性算法來決定或解決的決策問題。

NP是一類決策問題,我們可以使用多項式時間運行的確定性算法來檢查或驗證它們的解決方案。

P中的任何問題都屬於NP。

歸約

定義:令\Pi\Pi '爲兩個決策問題。 我們說,如果存在確定算法A的行爲如下,則\Pi在多項式時間內歸約爲\Pi ',表示爲“\Pi_{poly}\Pi '”。 當A出現問題\Pi的實例Ⅰ,它會將其轉換爲問題\Pi '的實例Ⅰ',使得對Ⅰ的答案爲是,當且僅當對Ⅰ’的答案爲是。 而且,這種變換必須在多項式時間內完成。

判斷Hamilton迴路_{poly}TSP(TSP旅行商問題)

設G是HC的一個實例,構造加權圖G'和k,使得G有HC\LeftrightarrowG'有一條長度不超過k的HC。

設G=(V,E),完全圖G'=(V,E'),E'={(u,v)u,v\inV},w(e)=\left\{\begin{matrix} 1 & e\in E\\ 0 & e\notin E \end{matrix}\right.,k=|V|。

NP-hard 和NP-complete

定義 : A決策問題\Pi被稱爲NP-hard,如果在NP中的每個問題\Pi ', \Pi '_{poly}\Pi

定義 : A決策問題\Pi被稱爲NP-complete,如果 1 )\Pi在 NP中, 2 ) 對於NP中每一個問題\Pi ', \Pi '_{poly}\Pi

定理:如果NP完全問題是多項式時間可解的,則P=NP。同樣,如果NP中的任何問題都不是多項式時間可解的,那麼NP完全問題也不是多項式時間可解的。

證明:

\Pi \in P,且\Pi \in NPC,給定\forall \Pi '\in NP\Pi '_{poly}\Pi

\because \Pi '\in P\ \therefore NP\subseteq P \n \because P\subseteq NP\ \therefore P=NP

可滿足性問題(The Satisfiability problem)

第一個被證明爲NP完全問題的問題。

給出一個布爾公式f,如果它是子句的合取,我們說它是合取範式(CNF)。子句是字面量的分離,字面量是布爾變量或其否定。

如果一個公式的變量有一個使其爲真值的賦值,那麼這個公式就是可滿足的。

f=x\cdot \overline{x}就是不可滿足的。

定理 (傳遞性): \Pi ,\Pi ',\Pi "是三個判定性問題 , 使得 \Pi_{poly}\Pi' \Pi '_{poly}\Pi",那麼 \Pi_{poly}\Pi"

推論 : 如果\Pi\Pi '兩個NP問題, \Pi '_{poly}\Pi 並且\Pi '是NP完全問題,那麼\Pi是NP-complete。

爲了證明\Pi是NP-complete, 我們需要證明問題:

1 ) \Pi \inNP

2 ) 有一個NP-complete問題\Pi ' ,使得 \Pi '_{poly}\Pi

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_{poly}3-SAT)

證明SAT_{poly}Clique(圖G中是否存在規模至少爲k的獨立集)

\forallSAT實例f=c_1c_2...c_m,共m個子句,n個變量x_1x_2...x_n

構造圖G=(V,E),V={所有變量出現過一次就作爲一個頂點},E={(x_i,x_j)|x_i,x_j在不同的子句中,x_i\neq x_j}

f=(x+\overline{y}+z)(\overline{x}+y)(\overline{x}+\overline{y}+z)

圖G(規模爲3的集團)

 一個規模爲m的團集對應於一個m個不同子句中對m個文字的真值指派。

f可滿足\Leftrightarrowm個子句中每個子句都有一個文字爲真\LeftrightarrowG中有m個頂點構成完全子圖。

 

證明Clique_{poly}Vertex Cover(頂點覆蓋問題)挑取最少的頂點使得每一條邊至少有一個頂點在在這個點集合中。

G=(V,E) 規模爲k的獨立集_{poly}\overline{G}(補圖,規模爲n-k)

若C=(U,F)是G的團集,\overline{G}沒邊與U中的頂點相連,V-U能夠覆蓋\overline{G}中所有的邊。

那麼V-U是\overline{G}的VC。

反之,若D是\overline{G}的VC,D覆蓋了\overline{G}的所有邊,則爲\overline{G}無邊連V-D中點,那麼V-D爲G的團集。

 

證明SAT_{poly}Vertex Cover

\forall f=C_1C_2...C_mn個變量

構造VC實例:

1)每個變量x_i,構造頂點x_i,\overline{x_i}右邊相連;

2)每個子句C_jn_j個文字,G中有一個規模爲n_j的團集G_j;

3)G_j中每個w與1)中對應點相連;

4)k=n+\sum_{j=1}^{m}(n_j-1)

 

co-NP

co-NP類問題由NP中互補的那些問題組成。

定義:如果1)\Pi在co-NP中,並且2)對co-NP中的每個問題\Pi’, \Pi '_{poly}\Pi,則問題\Pi對於co-NP類是完整的;

定理:問題\Pi是NP完全的,當且僅當它的互補是完整的對於co-NP類。

定理:問題TAUTOLOGY是完全的對於co-NP類

TAUTOLOGY在P中當且僅當,NP = NP

TAUTOLOGY在NP中,當且僅當co-NP = NP

NPI類

定理:如果\Pi問題及其補集是NP-complete的,則co-NP = NP

NPI(NP-Intermediate):複雜度級別爲NP但不屬於P類或NP-complete的問題

定理(Ladner):如果P≠NP,則NP中存在一個集合A,使得A不在P中,而A不是NP完全的。

四類問題的關係

 

 

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