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,若均无,则为0。di=1-ci中的┐的数量。
x表示xi的真值表。若有x,s.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).
- Karp的21个NPC问题及其规约
- NPC规约问题 - 8.20
- 【NPC】14、子集和问题规约到划分问题
- 【NPC】16、汉密尔顿回路问题规约到旅行商问题
- 【NPC】18、团问题规约到子图同构问题
- 【NPC】20、划分问题规约到背包问题
- 【NPC】5、顶点覆盖规约到独立集、团问题
- 【NPC】13、三维匹配规约到子集和问题
- 【NPC】19、汉密尔顿路径规约到有界度生成树问题
- 一些NPC问题的证明
- 【NPC】2、SAT规约到3SAT
- 【NPC】8、3SAT规约到MAX2SAT
- 【NPC】22、CIRCUIT-SAT规约到SAT
- 【NPC】2、SAT规约到3SAT
- 【NPC】21、证明电路可满足性问题是NPC问题
- NPC问题
- NP,NPC,P问题的概念
- 【NPC】3、3SAT规约到顶点覆盖
- Struts2+Hibernate+Spring整合
- 无dll注入游戏拦截函数截取封包
- HashSet和TreeSet的相关总结和整理
- 项目启动时报错:Unsupported major.minor version 51.0
- Oracle获取系统时间及格式化
- Karp的21个NPC问题及其规约
- LA 3027 Corporative Network
- 关于Linq使用过程中遇见的一些小问题的总结
- java堆栈获取后缀表达式
- memcached完全剖析–1. memcached的基础
- 2 Xcode5(2)
- ios 常用字符串的操作
- 计算C++程序运行时间总结
- with cube与with rollup