复杂度理论

说明

主要来源于算法导论

近似算法

解决np完全问题有3种办法
1.问题规模比较下,用指数暴力
2.对于某些特殊情况设计多项式时间算法
3.近似、随机:在多项式时间内逼近最优解


近似比的定义,如果对规模n的任何输入,由该近似算法产生的阶的代价C',与最优解的代价C,只差一个因子p(x):

\[\max(\frac{C'}{C},\frac{C}{C'}) \leq p(x) \]

近似比 = 1的时候就是精确算法
通常,可以设计固定近似比,或者近似比随着n变化(集合覆盖)的算法,还有一些np完全问题,可以设计随着运行时间增多不断缩小近似比的算法
近似算法输入规模n和常数\(\varepsilon\),使得对于任何固定的\(\varepsilon\),该方案是一个\(1 + \varepsilon\)近似算法
如果对于任何固定的\(\varepsilon > 0\),该方案都以其输入实例的规模n的多项式时间运行,则称次时间为多项式时间近似方案
我们希望运行时间既是\(\frac{1}{\varepsilon}\)的多项式,又是n的多项式
对于这样的一种方案,\(\varepsilon\)的任意常数倍减小可以由运行时间的常数倍增大弥补

p类问题

就是能在多项式时间内解决的问题

np类问题

就是能在多项式时间内验证解的问题
p类问题也是np类问题,但目前不知道p是不是np的真子集

如哈密顿回路或者3-cnf问题,求解很难,但是很容易在多项式时间内验证解的合法性

npc问题

所有np问题都能规约到该问题的问题,并且是一个np问题

hp-hard问题

所有np问题都能规约到该问题的问题,并且不是一个np问题

p != np?

只要能证明任意一个npc问题有多项式解法,就能证明p = np
只要能证明任意一个np类问题没有多项式解法,就能证明p != np

Karp的21个NPC问题

链接
1、 SAT问题(SATISFIABILITY)

每个句子最多三个变量,就是3-sat问题
每个句子最多两个变量,就是2-sat问题

2、 0-1整数规划(0-1 INTEGERPROGRAMMING)
凡是有界变量的整数规划都可以转化为 0-1 规划来处理

3、 最大团(CLIQUE)
判断图G中是否存在规模为K的团。
图的最大团 = 反图的最大独立集

4、 (SET PACKING)

给定一个有限集合S和一些S的子集,求问是否可以找出其中的k个子集,时的他们两两不相交

5、 最小点覆盖(NODE COVER)

判断图中是否存在x个点,可以覆盖G中的所有边(每个点覆盖相邻的边)

6、 集合覆盖 (SET COVERING)

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

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

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

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

8、反馈弧集(FEEDBACK ARC SET)

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

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

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

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

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

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

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

12、图着色数(CHROMATICNUMBER)

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

13、分团覆盖(LIQUE NUMBER)

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

14、恰好覆盖(EXACT COVER)

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

15、(HITTING SET)

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

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

16、斯坦纳树(STEINER TREE)

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

恰好覆盖子集族{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,其中元素在三个维度上的投影均不相同。

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

18、0-1背包(KNAPSACK)

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

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

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

19、工作规划(JOB SEQUENCING)

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

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

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

20、子集划分成和相同的两半

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

21、最大割
判断图中是否有不小于w的割

posted @ 2021-10-21 12:41  XDU18清欢  阅读(347)  评论(0)    收藏  举报