演算法導論之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問題的關係如下:
證明NPC問題
證明問題B是NPC問題的過程如下:
- 證明B是NP問題
- 知道一個已知的NPC問題A
- 證明A歸約到B。
常見歸約問題
基本知識
1、獨立集 —— 在圖G = (V,E)中,如果頂點集合S⊆V中的任意兩點之間都沒有邊,則稱S是獨立的。
—難點: 尋找最大獨立集。
—目標: 裝入儘可能多的頂點,要求邊涉及到的邊服從一些限制條件。
2、頂點覆蓋 —— 給定圖G = (V,E),頂點集合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例項存在真值賦值。
相關推薦
演算法導論之P、NP、NPC問題
P、NP、NPC 概念 > P問題:能夠在多項式時間內解決的決策問題。 —舉例: 圖搜尋問題、最短路徑問題、最小生成樹問題······ > NP問題:不能在多項式時間內解決或不確定能不能在多項式時間內解決,但
P、NP、NPC問題詳解
轉載地址 https://blog.csdn.net/bcb5202/article/details/51202589 P、NP、NPC 概念 > P問題:能夠在多項式時間內解決的決策問題。 —舉例: 圖搜尋問題、最短路徑問題、最小生成樹問
P、NP、NPC與NP-hard問題的定義
P問題:指的是能在多項式時間內解決的問題。 NP問題:指的是能在多項式時間內驗證的問題。在此,我們可以看出所有的P問題都屬於NP問題,但是P是否等於NP呢,至今還未得到驗證,即既證明不了P=NP,也證明不了P
P、NP、NPC問題最通俗的講解
轉:Matrix67原創 什麼是P問題、NP問題和NPC問題 這或許是眾多OIer最大的誤區之一。 你會經常看到網上出現“這怎麼做,這不是NP問題嗎”、“這個只有搜了,這已經被證明是NP問題了”之
P、NP、NPC和NP-Hard相關概念的圖形和解釋
NP問題就是指其解的正確性可以在多項式時間內被檢查的一類問題。比如說陣列求和,得到一個解,這個解對不對呢,顯然是可以在多項式時間內驗證的。再比如說SAT,如果得到一個解,也是能在多項式時間內驗證正確性的。所以SAT和求和等等都是NP問題。然後呢,有一部分NP問題的解已經可以在多項式時間內找到,比如陣列求和
P、NP、NP完全問題
不存在 並不是 包含 定性 系列 返回 指數 給定 最終 如果一個算法的最差時間效率屬於O(p(n)),則該算法可以在多項式的時間內對問題進行求解,其中p(n)是輸入規模n的一個多項式函數。 可以在多項式時間內求解的問題是易解的。不能在多項式時間內求解的問題是難解的。 判定
最長遞增子序列問題(演算法導論作業15.4-5、15.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