1. 程式人生 > >演算法導論之P、NP、NPC問題

演算法導論之P、NP、NPC問題

P、NP、NPC

概念

> P問題:能夠在多項式時間內解決的決策問題。

—舉例: 圖搜尋問題、最短路徑問題、最小生成樹問題······

> NP問題:不能在多項式時間內解決或不確定能不能在多項式時間內解決,但能在多項式時間驗證的問題。

—驗證:給定一個問題的例項、證書(類似於證據),需要驗證這個證書是這個問題的正確答案。

— 舉例:漢密爾頓路徑,例項為G=(V,E),證書為頂點序列 {v0,v1,v2,v3,….,vk},我們的目的是要驗證這個證書就是這個問題的答案,驗證方法為:先遍歷一遍這個點序列,看看是不是每個點只出現一次,然後對於(vi,vi+1)是否為G的邊,這樣就能夠驗證這個點序列是不是漢密爾頓路徑,很顯然這個驗證過程是多項式時間的,所以漢密爾頓路徑是NP問題。

> NPC問題:目前不能用多項式時間解決的問題,但是我們還不能證明這個問題不能用多項式時間解決,我們這次的目標是研究這個問題。

—滿足的兩個條件:是一個NP問題 + 所有的NP問題可以在多項式時間內規約到它

—舉例:3SAT、頂點覆蓋、團、三維匹配、漢密爾頓迴路、劃分問題·······

> NP難問題:所有的NP問題可以在多項式時間歸約到它,但它不一定是一個NP問題

> 歸約(約化)的標準概念: 如果能找到這樣一個變化法則,對程式A的任意一個輸入,都能按這個法則變換成程式B的輸入,使這兩個程式的輸出相同,那麼我們說,問題A可歸約為問題B

— 問題A可以約化到問題B的含義是,可以用解決B的解法來解決A,或者說A可以“變成”B。

—A可歸約為B的直觀含義:B的時間複雜度>=A的時間複雜度。也即,A比B簡單。

關係

P、NP、NPC、NP Hard問題的關係如下:
P、NP、NPC、NP困難問題關係

證明NPC問題

證明問題B是NPC問題的過程如下:

  1. 證明B是NP問題
  2. 知道一個已知的NPC問題A
  3. 證明A歸約到B。

常見歸約問題

基本知識

1、獨立集 —— 在圖G = (VE)中,如果頂點集合S⊆V中的任意兩點之間都沒有邊,則稱S是獨立的。
—難點: 尋找最大獨立集。
—目標: 裝入儘可能多的頂點,要求邊涉及到的邊服從一些限制條件。

2、頂點覆蓋 —— 給定圖G = (VE),頂點集合S⊆V,如果圖中的每一條邊至少有一個端點在S中,則稱S是一個頂點覆蓋。
—難點: 尋找最小頂點覆蓋。
—目標: 用盡可能少的頂點覆蓋圖中的所有邊。

3、集合覆蓋 —— 試圖用一組較小的集合覆蓋一個任意的物件集合。

常見問題

1、獨立集問題——給定圖G和數k,問是否包含大小至少為k的獨立集?

2、頂點覆蓋問題——給定圖G和數k,問G是否包含大小至多為k的頂點覆蓋?

3、集合覆蓋問題——給定n個元素的集合U,U的子集S1,···,Sm以及數k,問在這些子集中有一組子集,它們的並等於整個U且至多包含k個子集嗎?

4、集合包裝問題——給定n個元素的集合U,U的子集S1,····,Sm以及數k,問在這些子集中至少有k個兩兩不相交嗎?

5、SAT(可滿足性問題)——給定bool變數集X={x1,···,xn}上的一組子句C1,···,Ck,問存在滿足的真值賦值嗎?
注意:每個子句均為析取子句(邏輯或∨),最終結果為各個子句的合取(邏輯與∧)。

6、3-SAT(三元可滿足性問題)——給定bool變數集X={x1,···,xn}上的一組子句C1,···,Ck,每個子句的長為3,問存在滿足的真值賦值嗎?
注意:同上。

常用引理

設G=(V, E)是一個圖,S⊆V,那麼S是一個獨立集當且僅當它的補V-S是一個頂點覆蓋。
證明:首先,設S是一個獨立集。考慮任一邊e=(u,v),因為S是獨立集,u和v不可能同時在S中,所以u和v至少有一個在V-S中,即得任一邊至少有一個端點在V-S中,所以V-S是一個頂點覆蓋。
反過來,設V-S是一個頂點覆蓋,考慮S中的任意兩個頂點u、v,若它們間有一條邊e,那麼e的兩個端點均不在V-S中,這與假設V-S是一個頂點覆蓋矛盾。所以S中的任意兩點均無連線,所以S是一個獨立集。

常見歸約問題

歸約的一般思想(要點):證明Y到X的歸約,要用問題X中的分量構造“零件”來描寫在問題Y中正在做的事

1、 獨立集歸約到頂點覆蓋
證明:若有一個解頂點覆蓋的黑盒子,那麼通過問黑盒子G是否有大小至多為n-k的頂點覆蓋,就能確定G是否有大小至少為k的獨立集。

2、頂點覆蓋歸約到獨立集
證明:若有一個可以解獨立集的黑盒子,那麼通過問黑盒子G是否有大小至少為n-k的獨立集,就能確定G是否有大小至多為k的頂點覆蓋。

3、頂點覆蓋歸約到集合覆蓋
證明:若有一個可以解集合覆蓋的黑盒子,考慮頂點覆蓋的任一例項,給定圖G=(V, E)和數k。
構造集合覆蓋的一個例項,其基集U等於邊E,對圖G的每一個頂點i∈V,設Si⊆U為G中所有和點i相關聯的邊,把Si加入集合覆蓋的例項中。
U能被集合S1,S2,···,Sn中的至多k個覆蓋當且僅當G有大小至多為k的頂點覆蓋。於是,給定頂點覆蓋的例項,如上述的那樣構造集合覆蓋的例項,並把它輸入黑盒子。回答yes當且僅當黑盒子回答yes。

4、獨立集歸約到集合包裝
證明:若有一個解集合包裝的黑盒子,考慮獨立集的任一例項,給定圖G=(V,E)和數k。
構造集合包裝的一個例項,其基集U等於邊E,對圖G的每一個頂點i∈V,設Si⊆U為G中所有不和點i相關聯的邊,把Si加入集合包裝的例項中。
U的子集S1,S2,···,Sn(實際是n個邊集合)中至少k個兩兩不相交(即不存在相同邊)當且僅當G有大小至少為k的獨立集(此時k個頂點必不存在相連邊),於是,給定獨立集的例項,如上述的那樣構造集合包裝的例項,並把它輸入黑盒子。回答yes當且僅當黑盒子回答yes。

5、3-SAT歸約到獨立集
證明:設有一個解獨立集的黑盒子,要解3-SAT的例項,例項由變數集X={x1,····,xn}和子句C1,····,Ck組成。
考慮3-SAT的方法是:必須從每一個子句中選擇一個項,然後找一組真值賦值使得所有找出來的項都為1,從而滿足所有的子句。因此,如果如果沒有兩個被選中的項衝突,那麼就成功了。
具體歸約:用獨立集描述3-SAT例項。首先,構造圖G=(V,E),它由分成k個三角形的3k個頂點組成,如下圖所示。對每一個子句i,構造3個頂點vi1,vi2,vi3。依據3-SAT例項子句在圖中增加邊描述衝突:在每一對標號對應衝突的項的頂點間新增一條邊。
這裡寫圖片描述
要證明原來的3-SAT是可滿足的當且僅當構造出來的圖G(依據3-SAT的例項子句構造)有大小至少為k的獨立集。
>首先,若3-SAT是可滿足的,那麼構造出來的圖G中的每個三角形至少包含一個標號的值為1的頂點。設S是每一個三角形中的一個這樣的頂點組成的集合。設S不是一個獨立集,則至少存在兩個頂點u、v∈S間有一條邊,則u、v一定是衝突(一個是1,另一個必是0)的,而S中的每個點值都為1,所以矛盾,所以假設不成立,即S是一個獨立集。
>反過來,設圖G有一個大小至少為k的獨立集S。那麼,當S的大小恰好為k,那麼一定是由每個三角形的一個頂點組成,且S中的衝突頂點最多隻能成單出現。所以顯然可以設S中所有頂點對應的值全為1,且這些頂點每個對應於一個子句中選擇的代表,所以此時對應的3-SAT例項存在真值賦值。

相關推薦

演算法導論PNPNPC問題

P、NP、NPC 概念 > P問題:能夠在多項式時間內解決的決策問題。 —舉例: 圖搜尋問題、最短路徑問題、最小生成樹問題······ > NP問題:不能在多項式時間內解決或不確定能不能在多項式時間內解決,但

PNPNPC問題詳解

轉載地址 https://blog.csdn.net/bcb5202/article/details/51202589 P、NP、NPC 概念 > P問題:能夠在多項式時間內解決的決策問題。 —舉例: 圖搜尋問題、最短路徑問題、最小生成樹問

PNPNPCNP-hard問題的定義

P問題:指的是能在多項式時間內解決的問題。 NP問題:指的是能在多項式時間內驗證的問題。在此,我們可以看出所有的P問題都屬於NP問題,但是P是否等於NP呢,至今還未得到驗證,即既證明不了P=NP,也證明不了P

PNPNPC問題最通俗的講解

轉:Matrix67原創 什麼是P問題、NP問題和NPC問題     這或許是眾多OIer最大的誤區之一。     你會經常看到網上出現“這怎麼做,這不是NP問題嗎”、“這個只有搜了,這已經被證明是NP問題了”之

PNPNPCNP-Hard相關概念的圖形和解釋

NP問題就是指其解的正確性可以在多項式時間內被檢查的一類問題。比如說陣列求和,得到一個解,這個解對不對呢,顯然是可以在多項式時間內驗證的。再比如說SAT,如果得到一個解,也是能在多項式時間內驗證正確性的。所以SAT和求和等等都是NP問題。然後呢,有一部分NP問題的解已經可以在多項式時間內找到,比如陣列求和

PNPNP完全問題

不存在 並不是 包含 定性 系列 返回 指數 給定 最終 如果一個算法的最差時間效率屬於O(p(n)),則該算法可以在多項式的時間內對問題進行求解,其中p(n)是輸入規模n的一個多項式函數。 可以在多項式時間內求解的問題是易解的。不能在多項式時間內求解的問題是難解的。 判定

最長遞增子序列問題(演算法導論作業15.4-515.4-6)

問題描述 對於長度為n的序列S[1...n],找出長度最大的子序列,其子序列的每個元素均遞增。 15.4-5、時間複雜度O(n^2) 剛看到這題時,想到了個投機取巧的方法。因為書中此節介紹了LCS(最長公共子序列)演算法,於是可以直接將這個序列排序O(nlogn),然後

演算法導論-迴圈不變式插入排序歸併排序

迴圈不變式演算法導論第二章中的原文是:We state these properties of A[1 ‥ j -1] formally as a loop invariant。其中舉的例子是插入排序,每次迴圈從陣列A中取出第j個元素插入有序區A[1 .. j-1],然後遞

演算法導論 B樹 B-樹 - 建立 插入 C語言

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

演算法導論 紅黑樹 - 插入 C語言

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

演算法導論 平衡二叉樹 - 建立 插入 查詢 銷燬 - 遞迴 C語言

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

演算法導論 平衡二叉樹 - 刪除 - 遞迴 C語言

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

演算法導論 B樹 - 刪除 C語言

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

演算法導論 B樹 B-樹

                作者:鄒祁峰郵箱:[email protected]日期:2014.03.13 18:00轉載請註明來自"祁峰"的CSDN部落格1 引言  In computer science, a B-tree is a tree data structure that keep

演算法導論 B樹(B-樹)

作者:鄒祁峰 郵箱:[email protected] 日期:2014.03.13 18:00 轉載請註明來自"祁峰"的CSDN部落格 1 引言   In computer science, a B-tree is a tree data structure

演算法導論 紅黑樹

作者:鄒祁峰 郵箱:[email protected] 日期:2013.12.27 16:45 轉載請註明來自"祁峰"的CSDN部落格 1 引言   博文《演算法導論 之 平衡二叉樹 - 列印》中使用遞迴演算法實現了平衡二叉樹的列印功能,仿照此博文中的程式碼可

演算法導論 貪心演算法- 矩陣鏈相乘

作者:鄒祁峰 郵箱:[email protected] 日期:2014.05.08 轉載請註明來自"祁峰"的CSDN部落格 1 引言     在大學期間,我們學過高等數學中的線性規劃,其

演算法導論 動態規劃

作者:鄒祁峰 郵箱:[email protected] 日期:2014.03.07 18:00 轉載請註明來自"祁峰"的CSDN部落格 1 問題描述     現有兩條裝配線,Sij表示第i條上完成第j道工序的裝配站。汽車完成組裝需要依次完成1~n工序。請找出完

演算法導論 平衡二叉樹

/****************************************************************************** **函式名稱: avl_lr_balance **功 能: LR型平衡化處理 - 先左旋轉 再向右旋轉(內部介面) **輸入引數: *

演算法導論 B-樹(B樹)

1 引言 In computer science, a B-tree is a tree data structure that keeps data sorted and allows searches, sequential access, insertions, a