這里的想說的NPC不是Non-Player-Controled,非玩家控制角色,而是Non-determinisitc Polynomial complete problem,它屬於一類很特殊的問題,迄今為止,沒有人能夠找出求解NPC問題的多項式時間的算法,同時也沒有人能夠證明對於這類問題不存在多項式時間算法;
最短(Bellman -Ford)與最長簡單路徑,歐拉游程(Fleury)和哈密頓回路,2-CNF可滿足性和3-CNF可滿足性,這些問題看起來差別很小,但是成對的問題中前者存在多項式時間的算法,而后者屬於NPC問題,不存在多項式時間的算法;其實算法中關於這個問題的研究感覺也僅僅存在理論意義,應該平時很少會接觸到這些東西,異或是真的在實際應用中一個算法的模擬對應的是一個NPC的問題,你證明了這個算法不存在多項式時間解決的算法,此時你只能夠改變解決方案或者利用近似的算法進行解決,唯一能夠想象的應用場景就是這樣,不過這種場景也是少之又少吧,所以還是作為一個學術的問題或者算法中一個經典的問題作為了解,不過話說如果真的有人能夠找到其中一個NPC問題的多項式時間算法或者證明了這種算法的不存在性,其對計算機科學的貢獻就非常的巨大了,這一類問題均是想通的,解決其中一個所有的都可以解決了,這正是這一類問題的奇妙所在,后面證明NPC問題的方法也體現了這一點,如過僅僅想了解一些概念接下來的稍微介紹一下概念,后面是一些NPC問題的證明可以忽略~
P類問題:多項式時間內可解的問題;
NP類問題:多項式時間內“可驗證”的問題;這里的可驗證針對某一個問題給出其中一個解決方案,能夠在問題輸入規模的多項式時間內驗證此個解決方案是正確的;
從上面的概念可以看出,P中的任何問題也都屬於NP;但是關於P和NP的范圍,仍是一個不可解的問題,P屬於NP的子集,但是是否為真子集?
NPC類問題,首先這個問題必須屬於NP類,但是這個問題的解決難度大於或者等於所有NP中問題的“難度”;難度的定義可以簡單理解為一個轉換的過程,如果一個問題的所有解決方案可以通過多項式時間轉換至另一個問題的解決方案,並且可以通過目的問題的解決問題判定是否屬於原問題的解決方案,則成目的問題的難度大於原問題的難度,因為這個過程是單方向的,原問題的所有解決方案可以映射至目標問題集中,但是目標問題集中的部分問題無對應的映射,圖示則如下:
理解了這個難度問題就可以理解NPC問題了,NPC問題的“難度”是相當的,並且難度大於所有的NP類問題,所以如果解決了一個NPC問題,也就是說設計了一個NPC問題的多項式時間算法,則所有的NP類問題可以轉換為NPC問題,則說明所有NP類和NPC類問題都存在一個多項式時間的算法,是不是很誘人,這還是一個非常大的問題的;
一些常見的NPC問題舉例,並且證明結構:
從上至下的問題分別是:
布爾組合電路的可滿足性:此問題是一切NPC類問題的鼻祖,證明方法在算法導論中也只是領略了一點,還是一知半解,因為涉及到硬件知識了,就是靠這個問題才知道NPC這個集合非空,然后接下來各種NPC問題被證明;
布爾公式可滿足性:布爾變量+布爾連接詞+括號組成的公式;
3-CNF可滿足性:3-CNF也是布爾公式,形式比較特殊,由子句組成,子句之間用“與”連接,子句由三個變量(or變量的非)的“或”組成;
團問題:無向圖中的團是一個頂點子集,其中每一對頂點之間由E中的一條邊相連;
頂點覆蓋問題:覆蓋無向圖中所有邊E的頂點組成的集合;
哈密頓回路:有向圖的簡單回路,包含V中每個頂點;
旅行商問題:
子集和問題:
如果只是想要了解看到這里就可以了,下面簡單的描述NPC類各種問題的證明方法:
1、證明L屬於NP類問題;
2、選取一個已知的NP完全語言L‘
3、描述一種算法來計算一個函數f,它把L’中的每個解決方案x映射到L中的一個解決方案f(x)
4、對於所有的x,函數f滿足x屬於L‘當且僅當f(x)屬於L
5、證明計算函數算法具有多項式運行時間
上面的證明簡單的說就是找到一個NP問題,然后該問題的難度如果大於或等於一個已經的NPC問題,則該問題是NPC問題!
剛開始的證明基礎是布爾組合電路的可滿足性,這個問題設計電路知識,簡單的來說,所有的問題編程運行的時候都要在電腦上運行,電腦可以看作一個布爾電路,所以所有NP可以轉換為該問題,然后該問題的一個解決方案,就是輸入的賦值能夠在多項式時間內檢驗其正確性,所以第一個NPC問題就誕生了,以后問題的證明就可以利用這個已知的NPC問題和上面的證明方法了~
接下來證明方法重要的就是多項式時間的轉換的方法!首先,證明屬於NP類問題只要找到一個解決方案能夠在多項式時間內驗證,則屬於NP;然后利用多項式時間轉換的方法和一個已知的NPC即可證明。
不知道所提的量子計算機是不是和布爾電路的可滿足性問題的NPC相關,我只是假設可能量子計算機的概念就是他本身突破了這個布爾電路滿足性的NPC問題,所以他能夠增加很多速度,這里只是作為一個無知的人隨便猜想一下~了解這方向的人可以告訴我一下;
公式可滿足性:利用布爾組合電路的可滿足性,轉換方法:
這個轉換比較顯而易見,如上圖所示;針對每個門電路,利用一個等價的公式,然后所有利用與連接起來,最后連接布爾電路的輸出,這樣的轉換就正確率。如果布爾電路滿足,則通過這個多項式的轉換至右邊的公式時同樣能夠滿足,所以這種轉換是正確的;
3-CNF可滿足性:
首先將一個布爾公式轉換成一個二叉樹,如上面所示,這是轉換的第一個步驟;
然后針對二叉樹利用和第一個一樣的原理進行改寫,改寫成如上圖所示的公式;
針對改寫后的每項內容,其最多包含3個基本元素,這樣利用真值表可以將上面的三個基本元素轉換成下面的形式;DNF的形式(析取范式);取反之后可以得到合取范式的形式;
有的項目包含1個元素或者2個元素的則利用上面兩條規則轉換至3個元素,最后轉換為3-CNF的形式,整個轉換過程花費多項式時間;所以證明成立~
團問題:
利用3-CNF證明,首先是NP類問題,接着3-CNF進行轉換,每個子句的三個元素作為節點,然后連接,兩種情況不存在連接:
1、一個元素和它的非形式不進行連接;
2、子句內的元素不進行連接;
這樣就轉換為團問題的圖了,團問題就也為NPC問題了。
頂點覆蓋問題:
這里利用團問題進行證明,首先屬於NP問題,然后圖的團問題轉換原圖的頂點覆蓋問題~
假設G包含一個團V'是V的子集,且V'=k,我們斷言,V-V'是G補圖中的一個頂點覆蓋,設u,v是E補圖中的任意邊,則u,v不屬於E,這說明u或v至少有一個不屬於V',因為V’中的每一對頂點都有一條E中的邊相連接。等價的,u或者v至少有一個屬於V-V',這意味着邊u,v被V-V'所覆蓋。由於u,v是從E的補圖中任意選取的邊,所以E的補圖中的所有邊都被V-V'中的一個頂點所覆蓋。
反之,假設G的補圖具有一個頂點覆蓋V'屬於V,其中V‘=V-k,那么,對於所有u,v屬於V,如果u,v屬於E的補圖,那么u屬於V’或者v屬於V’或者都屬於V’ ,與此相對,對所有u,v屬於V,如果u不屬於V'且v不屬於V',則有u,v屬於E,換句話說,V-V'是一個團,其規模為V-V'=k,證明結束。
哈密頓回路問題,
旅行商問題,這個問題的證明比較簡單,首先該問題本屬於一個最優化問題,但是最優化問題都可以通過轉換至判定問題。
比如TSP={<G,c,k>:G=(V,E)是一個完全圖,c是V*V→Z上的一個函數,k屬於Z且G包含一個費用至多為k的旅行商的旅行回路}
這個問題在給出一個實例之后必定能夠在多項式的時間對其驗證,那么它就屬於NP問題。然后通過哈密頓回路證明其為NPC問題。
設G圖為一個哈密頓環,構造TSP問題如下,建立完全圖G‘,其中定義費用函數
c(i,j)=0 如果i,j屬於哈密頓回路中的邊
1 如果i,j不屬於哈密頓回路中的邊
現在說明圖G中具有一個哈密頓回路,當且僅當圖G'中有一個費用至多為0的回路。假定圖G中有一個哈密頓回路h,h中的每條邊都屬於E,因此在G‘中的費用為0,因此,h在G’中是費用為0的回路。反之,假定圖G‘中有一個費用為h’至多為0的回路。由於E‘中邊的費用只能是0和1,所以回路h’的費用就是,且回路上每條邊的費用必為0。因此,h‘僅包含E中的邊。這樣,我們就得出結論,h’是圖G中的一個哈密頓回路。
子集和問題;
利用3-CNF進行歸約證明
根據一個給定的3-CNF構造如下的一個數字期望和和子集合如下:
其中t的位數是n+k位,其中n是子元素的個數及x下標的個數,k是子句的個數,這里n=3,k=2,所以構造上表。
s1,s1',s2,s2'屬於松弛標量,就是在相應的Ci處分別設置1,2,后面證明起松弛的作用,保證后k位滿足4;
vi,vi‘是唯一的~,相應位置xi處均標1,主要差別是Ci處標記,如果子句包含xi,則vi處標記1,包含非xi,則vi’處標記1~,這里比較亂,看下表比較清晰了。
接下來就是根據表進行證明3-CNF的滿足性等價於這個集合去子集合滿足目標t。
如果xi為1,則取vi集合,否則取vi‘集合,這樣就滿足了t的前n位,同時3-CNF滿足,表示子句至少有一個為真,則取的滿足前n位的集合子句中至少有一個為1,則其中一個子句必定至少為1,至多為3,然后加上后面的松弛變量si,si’就可以構造出滿足t的子集合;
反之,同樣的原理,子集必定包含vi或者vi‘其中一個,滿足vi,則xi=1,否則xi=0,這樣賦值必定能夠滿足3-CNF,
所以證明結束,子集和問題是一個NPC問題;
以上內容參考《算法導論》~行文倉促,有什么問題歡迎指正,謝謝閱讀~