原文鏈接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ì)問題分類的。如果有
我們也可以建立等價(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è)大小大于等于6的獨(dú)立集,但是不存在大小大于等于7的獨(dú)立集。
下面定義一個(gè)頂點(diǎn)覆蓋集,給定一個(gè)圖G=(V, E)和一個(gè)整數(shù)k,存在一個(gè)頂點(diǎn)的子集
例如:
? ? ? ? ? ? ? ? ? ?
對(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í)例
創(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è)大小為
證明:
→
令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公式
Certificate:對(duì)于n個(gè)布爾變量的真值的賦值
Certifier:檢查
例如:
實(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,有
完全多項(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>
下面描述一個(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的問題。
? ??