NP問題及其計(jì)算復(fù)雜性

原文鏈接http://blog.csdn.net/Ying_Xu/article/details/51487977

————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————


本周的內(nèi)容是NP問題,NP的全稱是Non-deterministic Polynomial,即多項(xiàng)式復(fù)雜程度的非確定性問題。百度上對(duì)NP的解釋是,P/NP問題是在理論信息學(xué)中計(jì)算復(fù)雜度理論里至今沒有解決的問題。通俗的說,是將不可知的問題轉(zhuǎn)化為已知的問題,進(jìn)而計(jì)算器復(fù)雜度。

首先介紹多項(xiàng)式時(shí)間的規(guī)約,即Polynomial-Time Reductions,通過解決另一個(gè)不同問題的假設(shè)的子程序,使用不包含子程序在內(nèi)的多項(xiàng)式時(shí)間來解決一個(gè)問題的方法。主觀上,一個(gè)多項(xiàng)式時(shí)間規(guī)約證明了第一個(gè)問題不比第二個(gè)問題難,因?yàn)橹灰獙?duì)于第二個(gè)問題有有效的解決辦法,那么對(duì)于第一個(gè)問題就一定也存在解決方法。

根據(jù)計(jì)算的復(fù)雜度,我們可以將問題分為兩類,一種是可以在多項(xiàng)式時(shí)間內(nèi)解決的,另一種是不能在多項(xiàng)式時(shí)間內(nèi)被解決的。下面的表格給出了一些算法。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

一些問題被證明需要指數(shù)時(shí)間:

1.給定一臺(tái)圖靈機(jī),它能否在最多k步的時(shí)候停止?

2.給定一個(gè)nxn的棋盤,黑棋能夠保證贏嗎?

一個(gè)不樂觀的消息是幾十年來大量的基礎(chǔ)問題都忽略了分類。這一節(jié)的內(nèi)容是表明這些基本問題是計(jì)算等價(jià)的,似乎是一個(gè)非常難問題的不同表現(xiàn)。

假設(shè)我們可以在多項(xiàng)式時(shí)間內(nèi)解決X問題,那么我們?cè)诙囗?xiàng)式時(shí)間內(nèi)能解決其他什么問題嗎?這里引入Reduction的定義。

Reduction:?jiǎn)栴}X可以多項(xiàng)式規(guī)約為問題Y,如果問題X的任意實(shí)例可以使用下面的條件被解決:

A) 多項(xiàng)式數(shù)量的標(biāo)準(zhǔn)計(jì)算步驟加上,

B) 可以解決問題Y的oracle多項(xiàng)式數(shù)目次的調(diào)用,這里,oracle是特殊硬件提供的可以在單步中解決Y的實(shí)例的計(jì)算模型。

表示為

這里,X是已知的可以在多項(xiàng)式時(shí)間內(nèi)解決的問題,Y是不可知復(fù)雜度的問題。中間的符號(hào)表示,有方法將X轉(zhuǎn)換為Y,有點(diǎn)類似于小于等于符號(hào)的含義是表明X的復(fù)雜度小于等于Y的復(fù)雜度,一般情況下,符號(hào)中p的上面會(huì)有一個(gè)m,表示可以是many to one reduction,也就是可以是多對(duì)一的映射。如果X有polynomial-time解,那么該解是下界;如果Y有polynomial-time解,那么該解是上界。

因此多項(xiàng)式時(shí)間的規(guī)約的目的是根據(jù)問題的相對(duì)困難度來對(duì)問題分類的。如果有

,y可以在多項(xiàng)式時(shí)間內(nèi)被解決,那么X一定也能在多項(xiàng)式時(shí)間內(nèi)被解決;如果
,X不能夠在多項(xiàng)式時(shí)間內(nèi)被解決,那么y也不能在多項(xiàng)式時(shí)間內(nèi)被解決。

我們也可以建立等價(jià)性,這里的等價(jià)是指的reduction的成本。如果

,那么我們可以表示為

下面有三個(gè)基本的規(guī)約策略,通過簡(jiǎn)單等價(jià)規(guī)約、從特殊案例到一般案例的規(guī)約和通過子程序的編碼來規(guī)約。

一、簡(jiǎn)單等價(jià)規(guī)約

首先定義獨(dú)立集(IndependentSet, 我們?cè)贛atroid中已經(jīng)學(xué)習(xí)過),給定一個(gè)圖G=(V, E)和一個(gè)整數(shù)k,存在一個(gè)頂點(diǎn)的子集

,對(duì)于每一條邊至多其中一個(gè)端點(diǎn)在S中。

如下圖:

? ? ? ? ? ? ? ? ? ?


對(duì)于上圖,存在一個(gè)大小大于等于6的獨(dú)立集,但是不存在大小大于等于7的獨(dú)立集。

下面定義一個(gè)頂點(diǎn)覆蓋集,給定一個(gè)圖G=(V, E)和一個(gè)整數(shù)k,存在一個(gè)頂點(diǎn)的子集

,對(duì)于每一條邊至少其中一個(gè)端點(diǎn)在S中。

例如:

? ? ? ? ? ? ? ? ? ?


對(duì)于上圖,存在一個(gè)大小小于等于4的頂點(diǎn)覆蓋集,但是不存在一個(gè)大小小于等于3的頂點(diǎn)覆蓋集。

對(duì)于頂點(diǎn)覆蓋集合和獨(dú)立集,有


其實(shí)從上面兩個(gè)圖,我們就可以看出,兩個(gè)集合互補(bǔ)。S是一個(gè)獨(dú)立集當(dāng)且僅當(dāng)V-S是一個(gè)頂點(diǎn)覆蓋集。

? ? ? ? ? ? ? ? ? ?


從上面等價(jià)條件來,我們可以從

來證明。

令S為任意的獨(dú)立集,考慮一條任意的邊(u, v), 因?yàn)镾為獨(dú)立集


因此,V-S包含(u, v).

:

令V-S為任意的頂點(diǎn)覆蓋集,考慮兩個(gè)頂點(diǎn)u∈S和v∈S,因?yàn)閂-S是一個(gè)頂點(diǎn)覆蓋集,觀察到(u, v)?S,因此,不存在S中的兩個(gè)頂點(diǎn)連接同一條邊。因此,S是一個(gè)獨(dú)立集。

二、從特殊案例到一般案例的規(guī)約

定義集合覆蓋:

集合覆蓋(Set Cover):給定一個(gè)元素的集合U,一個(gè)U的子集的集合S1,S2,…Sm,和一個(gè)整數(shù)k,存在一個(gè)集合含有小于等于k個(gè)這樣的集合的并等于U。

例:

? ? ? ??


上面的例子中,S2和S6即為滿足的集合。

頂點(diǎn)覆蓋集合(Vertex cover)可以規(guī)約為集合覆蓋(Set Cover),即


證明:

給定一個(gè)頂點(diǎn)覆蓋集合的實(shí)例G=(V,E),k,我們建立了一個(gè)集合覆蓋實(shí)例,其大小等于頂點(diǎn)覆蓋實(shí)例的大小。

創(chuàng)建過程:

創(chuàng)建集合覆蓋實(shí)例:


集合覆蓋的大小小于等于k當(dāng)且僅當(dāng)頂點(diǎn)覆蓋的大小小于等于k。

? ? ? ?

三、通過子程序的編碼來規(guī)約。

首先定義

literal:一個(gè)布爾變量或者它的否定:

clause子句:literal的析取:

合取范式(Conjunction Normal Form, CNF):子句clause的聯(lián)合的一個(gè)命題公式


SAT:給出一個(gè)CNF公式

它是否滿足真命題的賦值

3-SAT:每一個(gè)子句包含恰好3個(gè)literals的SAT

? ? ??


上面的例子是一個(gè)SAT,但不是一個(gè)3-SAT。第3個(gè)clause再加一個(gè)literal就為3-SAT。

3-SAT可以規(guī)約到獨(dú)立集,即

證明:

給定一個(gè)3-SAT的實(shí)例

我們建立一個(gè)獨(dú)立集的實(shí)例(G,K),有一個(gè)大小為k的獨(dú)立集當(dāng)且僅當(dāng)
是可以滿足的。

創(chuàng)建過程:

G對(duì)于每一個(gè)子句包含3個(gè)頂點(diǎn),對(duì)每一個(gè)literal有1個(gè)頂點(diǎn);一個(gè)三角形中一個(gè)子句中連接3個(gè)literals;每一個(gè)literal連接到自身的否定。

? ? ? ? ? ??

?

3可滿足性可以規(guī)約到獨(dú)立集。

G包含一個(gè)大小為

的獨(dú)立集,當(dāng)且僅當(dāng)
是可滿足的。

證明:

令S為大小為k的獨(dú)立集,那么S在每一個(gè)三角形中包含恰好一個(gè)頂點(diǎn),將這些literal全部設(shè)置為true,,其余的變量也保持一致,那么真命題賦值是一致的且所有的子句都滿足

給定一個(gè)滿足的命題, 從每一個(gè)三角形中選擇一個(gè)為真的literal。那么這就是一個(gè)大小為k的獨(dú)立集。

總結(jié)一下以上三種基本的規(guī)約方法:

? ? ? ? ?


傳遞性:

? ? ? ? ? ??


如:

? ? ? ? ?

決策問題:是否存在一個(gè)大小小于等于k的頂點(diǎn)覆蓋?

搜索問題:找到有著最小基數(shù)的頂點(diǎn)覆蓋

自規(guī)約性:搜索問題決策問題,將會(huì)應(yīng)用到這一章節(jié)的所有問題中,并且

證明我們對(duì)于決策問題的聚焦。

例如:

我們想要找到具有最小基數(shù)的頂點(diǎn)覆蓋

方法為:

(二進(jìn)制)搜索找到最小頂點(diǎn)覆蓋的基數(shù)k*

找到一個(gè)頂點(diǎn)v使得G-{v}有一個(gè)大小小于等于k*-1的頂點(diǎn)覆蓋(在任何的最小頂點(diǎn)覆蓋中的任意頂點(diǎn)都有這個(gè)性質(zhì))

將v包含到這個(gè)頂點(diǎn)覆蓋中

遞歸找到一個(gè)最小的頂點(diǎn)覆蓋G-{v}

下面開始探討重點(diǎn)的NP問題

首先是決策問題。

X是字符串的一個(gè)集合,有一個(gè)實(shí)例字符串s,那么設(shè)計(jì)一個(gè)算法A解決問題X:使得A(s)=yes當(dāng)且僅當(dāng)s∈X

如果算法A是對(duì)于每一個(gè)字符串s運(yùn)行在一個(gè)多項(xiàng)式時(shí)間內(nèi)的,那么A(s)將會(huì)在最多第p(|s|)步終止,其中p(·)是某一個(gè)多項(xiàng)式。

定義P:

對(duì)一個(gè)有著多項(xiàng)式運(yùn)行時(shí)間的算法的決策問題

? ? ? ? ? ?


NP問題:

認(rèn)證算法的意圖:

Certifier(證明者)是從管理的角度來看待事情的,并不能自己決定是否有s∈X,然而,他可以檢驗(yàn)一個(gè)提出的證明這個(gè)s∈X。

定義:算法C(s,t)是一個(gè)問題X的證明者,如果對(duì)于每一個(gè)字符串s有s∈X當(dāng)且僅當(dāng)存在一個(gè)字符串t使得C(s,t) = yes.

NP是指存在一個(gè)多項(xiàng)式Certifier的決策問題,這是相對(duì)于P而言的定義。

例子:

給出一個(gè)整數(shù)s,s是一個(gè)合數(shù)(質(zhì)數(shù)的對(duì)立)嗎?

Certificate :s的一個(gè)非質(zhì)因子t,存在這樣的一個(gè)憑證存在當(dāng)且僅當(dāng)s是一個(gè)合數(shù)。

Certifier:

? ? ? ? ? ??


如一個(gè)實(shí)例:

s = 437699

Certificate: t = 541 或者809

結(jié)論是:合數(shù)是一個(gè)NP問題

SAT:給出一個(gè)CNF公式

是否存在一個(gè)滿足條件的命題?

Certificate:對(duì)于n個(gè)布爾變量的真值的賦值

Certifier:檢查

中的每一個(gè)子句,是夠含有至少一個(gè)真的literal

例如:

實(shí)例s


Certificate:


結(jié)論:SAT是一個(gè)NP問題

哈密頓環(huán)(Hamiltonian Cycle)

哈密頓環(huán)是:給定一個(gè)無向圖G=(V, E), 存在一個(gè)簡(jiǎn)單環(huán)C能夠訪問每一個(gè)結(jié)點(diǎn)

Certificate:n個(gè)結(jié)點(diǎn)的排列

Certifier:檢驗(yàn)排列中V中包含的每一個(gè)結(jié)點(diǎn)是否恰好出現(xiàn)一次,并且在排列中每一對(duì)相鄰的結(jié)點(diǎn)之間是否存在一條邊。

結(jié)論:哈密頓環(huán)是一個(gè)NP問題

? ? ? ??

?


那么P是否等于NP呢?

所有的完全多項(xiàng)式非確定性問題,都可以轉(zhuǎn)換為一類叫做滿足性問題的邏輯運(yùn)算問題。既然這類問題的所有可能答案,都可以在多項(xiàng)式時(shí)間內(nèi)計(jì)算,人們于是就猜想,是否這類問題,存在一個(gè)確定性算法,可以在多項(xiàng)式時(shí)間內(nèi),直接算出或是搜尋出正確的答案呢?這就是著名的NP=P?的猜想。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

如果yes:那么有效的算法對(duì)3-Color,TSP, FACTOR, SAT…

如果No:沒有有效的算法對(duì)3-Color,TSP, FACTOR, SAT…

一致的輿論為p≠NP

最后討論的是NP完全問題。

問題X多項(xiàng)式規(guī)約(polynomial reduces, Cook提出的)到問題Y,如果問題X的任意實(shí)例可以使用下面的來解決:

A. 多項(xiàng)式數(shù)目的標(biāo)準(zhǔn)計(jì)算步驟,加上

B. 可以解決問題Y的oracle的多項(xiàng)式數(shù)目的調(diào)用

多項(xiàng)式轉(zhuǎn)換(polynomialtransforms, Karp提出的)是指問題X多項(xiàng)式轉(zhuǎn)換為問題Y如果給定一個(gè)任意的輸入x給X,我們可以生成一個(gè)輸出y使得x是X的一個(gè)yes實(shí)例當(dāng)且僅當(dāng)y是Y的一個(gè)yes實(shí)例。

多項(xiàng)式轉(zhuǎn)換是一個(gè)對(duì)于Y而言只有一個(gè)oracle調(diào)用的多項(xiàng)式規(guī)約,就在對(duì)X的算法的最后。幾乎所有之前的規(guī)約都是這種形式。

那么這兩個(gè)對(duì)于NP而言是相同的嗎?

NP完全問題是最難的問題。它的定義是:NP中的一個(gè)問題Y有這樣的一個(gè)性質(zhì):對(duì)于NP中的任意問題X,有

通俗上定義為,如果任何一個(gè)NP問題都能通過一個(gè)多項(xiàng)式時(shí)間算法轉(zhuǎn)換為某個(gè)NP問題,那么這個(gè)NP問題就稱為NP完全問題(Non-deterministic Polynomial complete problem)。NP完全問題也叫做NPC問題。

完全多項(xiàng)式非確定性問題可以用窮舉法得到答案,一個(gè)個(gè)檢驗(yàn)下去,最終便能得到結(jié)果。但是這樣算法的復(fù)雜程度,是指數(shù)關(guān)系,因此計(jì)算的時(shí)間隨問題的復(fù)雜程度成指數(shù)的增長(zhǎng),很快便變得不可計(jì)算了。

定理:假設(shè)y是一個(gè)NP完全問題,那么y可以在多項(xiàng)式時(shí)間內(nèi)解決當(dāng)且僅當(dāng)P=NP

證明:

←如果P=NP,那么因?yàn)閥是一個(gè)NP問題,因此可以在多項(xiàng)式時(shí)間內(nèi)被解決

→假定y可以在多項(xiàng)式時(shí)間內(nèi)被解決,令X為任意一個(gè)NP問題。因?yàn)?/p>

,我們可以在多項(xiàng)式時(shí)間內(nèi)解決X,可以得出
,又因?yàn)橐阎?div id="4tzlsgl" class="image-package">
,因此有P=NP。

下面描述一個(gè)電路可滿足性問題,在理論計(jì)算機(jī)科學(xué)中,電路可滿足性問題(CIRCUIT-SAT)是決定一個(gè)給定的布爾電路是否有一個(gè)可以使得輸出為true的輸入的賦值的決策性問題。

給出一個(gè)由AND,OR和NOT門的聯(lián)合電路,是否存在一個(gè)方法設(shè)置電路的輸入使得其輸出為1?

? ? ? ? ? ? ? ? ? ?


我們可以驗(yàn)證,CIRCUIT-SAT是一個(gè)NP完全問題。

證明:任何一個(gè)將固定數(shù)目的n位作為輸入并且產(chǎn)生一個(gè)yes/no的輸出的算法都可以被這樣的一個(gè)電路來表示。并且,如果該算法花費(fèi)多項(xiàng)式時(shí)間,那么電路也是多項(xiàng)式大小。(固定為n位是非常重要的,反應(yīng)了算法和電路之間的基本區(qū)別)

考慮一個(gè)NP問題X,它有一個(gè)多項(xiàng)式時(shí)間certifier C(s, t).為了決策s是否在X中,我們需要知道是否存在一個(gè)長(zhǎng)度為p(|s|)的憑證t使得C(s, t)=yes。

我們將C(s, t)看做是一個(gè)|s|+p(|s|)位的算法(輸入為s,憑證為t),將其轉(zhuǎn)化為一個(gè)多項(xiàng)式時(shí)間的電路K。前|s|位是用s硬編碼的,剩下的p(|s|)位是t的位,那么電路K是可滿足的當(dāng)且僅當(dāng)C(s,t)=yes。

例如:

? ? ? ? ? ? ??


上面的電路就創(chuàng)建了一個(gè)電路K,它的輸入這樣被設(shè)置使得K輸出為真當(dāng)且僅當(dāng)圖G有一個(gè)大小為2的獨(dú)立集。

那么如何建立一個(gè)NP完全問題呢?

一旦我們建立了第一個(gè)NP完全問題,那么其他的也就是一個(gè)道理了。

建立問題y的完全NP問題的步驟:

1) 表明Y是一個(gè)NP問題

2) 選擇一個(gè)完全NP問題X

3) 證明

可以證明3-SAT是一個(gè)NP完全問題。

下面這個(gè)圖顯示了NP完全問題以及可以多項(xiàng)式規(guī)約到另一個(gè)問題。

? ? ? ? ? ? ??


NP完全問題的6個(gè)種類和典型例子:

a)??包裝問題:SET-PACKING,INDEPENDENT SET

b)??覆蓋問題:SET-COVER, VERTEX-COVER

c)??約束滿足問題:SAT, 3-SAT

d)??序列問題:HAMILTONIAN-CYCLE, TSP

e)??分區(qū)問題:3D-MATCHING, 3-COLOR

f)??數(shù)值問題:SUBSET-SUM, KNAPSACK

大部分的NP問題要么是P要么就是完全NP問題。

NP的對(duì)稱:我們只需要有對(duì)于yes實(shí)例的簡(jiǎn)單證明即可。

1.? SATvs. TAUTOLOGY

可以證明對(duì)于一個(gè)給定的賦值,一個(gè)CNF公式是可以滿足的,那么如何證明一個(gè)公式不可滿足呢?

2.? HAM-CYCLEvs. NO-HAM-CYCLE

給定一個(gè)哈密頓環(huán)可以證明一個(gè)圖是哈密頓,那么如何證明一個(gè)圖不是哈密頓呢?

??????? co-NP是NP決策問題的補(bǔ)集。

? ? ? ? ??

???

那么,NP=co-NP呢?

一致的輿論是不等于的。

如果有NP≠co-NP,那么P≠NP。但可以得出,

質(zhì)數(shù)問題是一個(gè)NP∩co-NP的問題

(Pratt定理)一個(gè)奇數(shù)是一個(gè)質(zhì)數(shù)當(dāng)且僅當(dāng)存在一個(gè)整數(shù)1<t<s,使得對(duì)于所有s-1的所有素除子p有

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?


??? FACTORIZE:給定一個(gè)整數(shù)x,找出它的素因子

??? FACTOR:給定兩個(gè)整數(shù)x和y,找出x是否有一個(gè)小于y的非質(zhì)因子。

??? 定理:

??? FACTOR是一個(gè)NP∩co-NP的問題。

? ??


版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容