Karp的21个NPC问题及其规约

来源:互联网 发布:matlab bp算法 编辑:程序博客网 时间:2024/06/17 00:57

这里主要探讨了1972年Karp发表论文是提出的21个NP完全问题及其之间的规约关系。

备注:主要参考的内容是1972年Karp的那篇论文。下面提到的教材值的是清华大学出版社出版,屈婉玲、刘田、张立昂、王捍贫四位老师编著的《算法设计与分析》。

打问号的地方是我没有理解的地方。各种疏漏在所难免,如果有什么想法或者疑问,欢迎讨论。

以及有些全角字符变乱码了...@@


1、  SAT问题(SATISFIABILITY)

         (判断合取范式(有限个简单析取式的合取)是否可满足)

         判断析取范式(有限个简单合取式的析取)是否为永真式。

 

2、  0-1整数规划(0-1 INTEGERPROGRAMMING)

         对整形矩阵C和整形向量d,判断是否存在0-1向量x,s.t. Cx=d.

         (使用=的形式处理≥的形式的方法是引入松弛变量,不是特别显然,只是比较显然。)

 

1à2         记SAT问题中有n个简单析取式C1~Cn,p个变元x1~xp。

         取C为一个n行p列的矩阵,d和x均p元列向量。若Ci中有xj,则cij=1;有┐xj,则为-1,若均无,则为0di=1-ci中的的数量。

       x表示xi的真值表。若有xs.t.Cx≥d,则对应SAT可满足。

 

3 最大团(CLIQUE)

       判断图G中是否存在规模为K的团。

 

1à3记SAT问题中有n个简单析取式C1~Cn,p个变元x1~xp。

         V={<s,i> | s是Ci的文字}

         E={{<s,i>,<d,j>} |ij不等,且sd不矛盾(不互为非)}

 

4、  (SET PACKING)

         判断集合族中是否存在l个两两不交的集合。

 

3à4集合数n=|V|,l=K

         构建集合Si是从第i个点出发的到其它所有点的边中不在E中的那些。

         于是,Si∩Sj=∅当且仅当ij∈ E。

 

5、  最小点覆盖(NODE COVER)

         判断是否存在G中规模≤l的点集覆盖G中所有弧(E)

 

3à5         未被点覆盖选中的点间在图中无边,在补图中成团。

         即补图中存在规模为|V|-K的点覆盖则原图中存在规模为K的团。

 

6、  集合覆盖         (SET COVERING)

         判断有限集P的有限子集族是否存在规模不超过l的的覆盖。

 

5à6全集是G中的边,集族中Si=第i个点相邻的边的集合。

 

7、  反馈节点集(FEEDBACK NOTE SET)

         对有向图H和正整数k,问是否存在规模不超过k的V的子集C,s.t.对H中的任一圈,都有C中的点。

 

5à7         将无向图中的每个边都用一组互反向有向边代替。l=k。这样由于点覆盖所有边,且考察队每个2元环,所以是等价的。

 

8、  反馈弧集(FEEDBACK ARC SET)

         对有向图H和正整数k,问是否存在规模不超过k的E的子集C,s.t.对H中的任一圈,都有C中的弧。

 

5à8将无向图中每个点拆成两个点(vi,0)和(vi,1),记前者为入点,后者为出点。对每个点分裂的节点,有从入点引向出点的线。对于无向图中的每条线,分裂成两条线,均为从出点引向入点。这样,每条边变成一个环。等价性是比较显然的。

 

9、  有向哈密尔顿回路(DIRECTED HAMILTON CIRCUIT)

         判断有向图H有没有无重复遍历所有点的有向回路。

 

(我还是觉得教材上用3SAT规约有向HC更简单…)

5à9         【?】

 

10、无向哈密尔顿回路(UNDIRECTEDHAMILTON CIRCUIT)

         判断无向图G有没有无重复遍历所有点的回路。

 

9à10如同书上的做法,将每个点拆分成出点、入点和中间点。

 

11、3SAT (SATISFIABILITYWITH AT MOST 3 LITERALS PER CLAUSE)

         析取式:D1~Dr 文字集:u1~um及其非。

 

1à11 如同书上的做法,将表达式替换。

 

12、图着色数(CHROMATICNUMBER)

         对图G,判断是否存在k染色,使相邻节点颜色相异。

 

11à12不失一般性的,假设3SAT变元数不小于4.

         V={ui,`ui, vi,Dj}(i:1~m, j:1~r)E=vi间两两连线,每个文字和自己的非连线,vi和不同角标的文字及非连线,文字和自己所属的Dj连线。颜色数为r+1.

         【我目前还不清楚为什么,不过这个图已经复杂到让我不想知道了】

 

13、分团覆盖(LIQUE NUMBER)

         判断图G是否可分称不多于k个团。

 

12à13染色之后每种颜色所成的集合在补图中成团。

 

14、恰好覆盖(EXACT COVER)

         判断是否存在子集族的一个子集是全集的分割。

 

(还是觉得书上用SAT证明恰好覆盖的方法更简单)

12à14【?】

 

15、(HITTING SET)

         对U的子集族S,是否存在U的子集W,使得W与S中的每个集合的交集规模均为1.

 

14à15 HITTINGSET的全集为EXACT COVER的集族。HITTING SET的集族si为EXACT COVER的集族中包含si的集合所构成的集合。于是子集W在EXACT COVER中满足对含有每个元素的集合都有且仅有1个。

16、斯坦纳树(STEINER TREE)

         对图G,V的子集R。w为G中的边的权重。求一个G的子树,包含R中所有点,且总权重不超过k。

 

14à16

         恰好覆盖子集族{Sj},全集U={ui}

         转换之后,V={n0}∪{sj}∪{ui} R={n0}∪{ui} 连线方面,对n0和搜索子集Sj连线,Sj和其中的每个元素uji连线,no到Sj的权重是|Sj|其余地方权重都是0.

 

17、(3-DIMENSIONALMATCHING)

         判断T×T×T的子集U是否存在规模为|T|的子集W,其中元素在三个维度上的投影均不相同。

 

14à17

         不失一般性的,我们假设恰好覆盖的子集族中每个子集的元素数至少为2.(这个可以通过增加全集元素来使其达到。或者说类似于分裂元素。)

         【?】

 

18、0-1背包(KNAPSACK)

         判断对r+1元整数组a1~ar,b,是否存在0-1量xi,s.t.∑ajxj=b。

 

14à18

         r为子集族中子集个数.eji=if(ui∈sj) aj=∑eji*d^(i-1) b=1+d+d^2+…+d^(t-1) t为全集元素数。

(相当于用了一个t为d进制数来表示子集和的全空间。)

 

19、工作规划(JOB SEQUENCING)

         有p个工作,每个工作有它要做的时间、ddl、和迟到惩罚三个参数,判断是否存在顺序使得总惩罚不超过K。

 

18à19

         0-1背包就是极特殊的工作规划。代价和时间相同。ddl都是b。

(不过要记得加松弛变量)

 

20、(PARTITION)

         判断s个正整数组成的集合是否可以分成和相等的两部分。

 

18à20

         s=r+2,这s个数中包含原来背包问题的r个重量,剩下两个量用于配平。需要足够大,比如一边配b+1,另一边配∑+1-b。

 

21、最大割(MAX CUT)

         给定图G,权重函数w:EàZ.判断是否有不小于W的割。

 

20à21

         |V|=s,w(i,j)=ci*cjW=ceil((∑ci)^2/4).



1 0
原创粉丝点击