第六章 归约与复杂度的NP问题
6.1 引入
定义:
P.Decision problems for which there is a poly-time algorithm.
NPC 如果一个问题Q,它满足以下两条性质:
(1). Q是NP问题
(2). 任一NP问题都可在多项式时间内归约到问题Q
对于这一类问题,他们满足两个性质,一个就是在polynomial时间内可以验证一个candidate answer是不是真正的解,另一个性质就是我们可以把任何一个NP问题在polynomial的时间内把他的input转化,使之成为一个NP-complete问题(即规约)。NP-Complete Problem问题可以互相转换 (在多项式时间内),只要其中一个问题可以在多项式时间内解决,那么其他问题也都将可以在多项式时间内解决。
上面我们介绍了NPC问题需要满足两条性质,当一个问题仅满足性质(2),而不满足性质(1)时,我们说该问题时NPH问题(NP-hard,NP-难问题)。
如果我们给NPC问题找到了一个多项式时间复杂度的算法,那么也就意味着我们给所有的NP问题找到了多项式时间复杂度的算法,从而NP=P,因为P=NP,所以“P对NP问题”就可以被解决。比如背包问题是NPC问题,如果我们给背包问题找到了一个多项式时间复杂度的算法,那么就证明了P=NP,但给NPC问题找一个多项式时间复杂度的算法太难了,所以现在人们普遍相信P≠NP。
详细:实例化P NP NPC
首先对算法的设计与判别进行分类:design pattern 和 design anti-patterns


归约
思想: 我们现在遇到了个问题,可以把它转化到一个某个已解决的问题上,而不是一定要直接解决这个问题
概念描述: 设计一个函数f(x),把问题A的输入转换成问题B的一个输入,这样就能用问题B的解法来求解。(输出真或假)
A可以被归约到B。
难点:转换函数f(x)的设计必须要保证问题B的输出结果和相应的问题A上的答案保持一致。
归约的妙用举例:
可视化归约
Karp 归约、Levin 归约、Cook 归约这几个概念有何联系与区别
先考虑两类常见的问题:搜索型问题和判定型问题。搜索型问题对应于一个关系R,判定型问题对应于一个集合S。
Cook归约对这两类问题都有效;
Karp归约只能应用于判定型问题,归约的对象是集合与集合;
Levin归约只能应用于搜索型问题,归约的对象是关系与关系。事实上,Levin归约是为了特地处理搜索型问题,根据Karp归约来定义的。
注:
(1)Many-one reduction是归约的不同对象x可以映射到同一个f(x)上。 One-one reduction 是归约不同对象x,映射到不同的f(x)上。
(2)Karp归约与Many-one reduction 唯一的不同是它还要求函数 [公式] 是能在多项式时间内被计算出来的
Stephen Cook是NPC理论的奠基人,而Richard Karp则证明了组合优化中的大多数经典问题(背包问题、覆盖问题、匹配问题、分区问题、路径问题、调度问题等)都是NPC问题。
If Cook reduction = Karp reduction then co-NP = NP.
(1)理解什么是多项式归约(polynomial-time reduction)
多项式时间归约描述:在计算复杂性理论中,多项式时间归约是指假设已有解决一个问题的子程序,利用它在多项式时间内(不考虑子程序运行所用时间)解决另一个问题的归约方法。
多项式时间归约:如果问题X和问题Y满足以下两条性质,那么问题X可以在多项式时间归约到问题Y。
- 问题X可以通过多项式时间的基本运算步骤转换为问题Y;
- 问题X多项式次调用求解问题Y的算法,且问题Y可以在多项式时间内被求解。
可以记为:X ≤p Y
需要注意的是,问题X转换为问题Y之后,问题Y的运行时间是建立在问题Y的输入上。
对于这个定义,可以简单理解为:求解问题Y算法需要多项式时间,问题X转换为问题Y需要多项式个基本运算加上多项式次调用求解问题Y的算法。因此总共需要的时间是:多项式 + 多项式 * 多项式。
根据以上定义,可以得到三个定理:
- 假设X ≤p Y,如果Y能够在多项式时间内求解,那么X也能在多项式时间内求解。
- 假设X ≤p Y,如果X不能在多项式时间内求解,那么Y也不能在多项式时间内求解。
- 如果X ≤p Y且Y ≤p X,那么X和Y是等价的。
(2)知道怎样从一个问题多项式归约到另一个问题,需要熟悉的归约包括:从点覆盖问题到独立集问题,从3-SAT问题到独立集问题等基本归约。
多项式时间归约的一般方法:
- 简单的恒等归约:比如最大独立集和最小点覆盖。
显然{2, 3, 7}恰好跟最大独立集 {1, 4, 5, 6}互补。这是因为在independent set中,任意2个结点<u,v>都不会有一条边相连,所以与u,v相连的结点一定在集合外面,所以independent set的补集一定是vertex cover的。
- 从特殊情况到一般情况:比如点覆盖 ≤p 集合覆盖。
集合覆盖问题:
问题定义:
实例:现在有一个集合A,其中包含了m个元素(注意,集合是无序的,并且包含的元素也是不相同的),现在n个集合,分别为B1、B2、…、Bn。并且这n个集合的并集恰好等于A集合,即:B1UB2UB3U…UBn=A。
问题:是否存在B集合的最小子集,且他们的并集也等于A集合?
例子:集合A={1,2,3,4,5},集合B={{1,2,3},{2,4},{3,4},{4,5}}。可以看出,B集合的并集恰好等于A集合,那么问题的解是:SETCOVER={{1,2,3},{4,5}}。
顶点覆盖问题:是否存在V的子集V’,使得|V’|<=|V|,并且G中的每条边e,至少有一个顶点在V’中?
- 利用零件编码gadgets:比如3-SAT ≤p 独立集。(问题(5))
(3)要求掌握同一个问题的最优问题如何多项式时间归约到该问题的判断问题(自身归约);
自归约:将求解问题归约成判断问题,如果判断问题能够解决,那么就可以利用判断问题来解决求解问题。
比如最小点覆盖问题,假如我们能判断一个图中是否存在点数为k的最小点覆盖。于是可以遍历图中的每个顶点,如果删去这个顶点以及和这个顶点相连接的边,图中只存在点数为k-1的点覆盖,那么就可以判定该顶点是最小点覆盖中的顶点,不断重复这个操作,就可以找到最小点覆盖。
(4)熟悉NP和NPC的概念
以目前的技术是很难给出有效的多项式解法,这些问题就是NP完全问题,比如0-1背包问题。
常见求解NPC问题的思路:设计启发式的算法、近似解、使用指数级复杂度算法。
证明NP问题。这个容易,即给你一个结果,你能在polynomial的时间内验证该结果的正确性。
证明NP-hard问题。我们要证明一个问题是NP-hard的时候,我们通常要做的是找到一个已被证明了的NPC问题,并把这个NPC问题归约到该问题上去(即NPC<=NP-hard)。
证明NP-Complete问题。分以下两步:
第一步,证明这个问题属于NP;
第二步,证明这个问题是NP-hard的。
所有的NP问题都可以规约到SAT(即NP<=SAT),也就是说SAT至少与NP问题一样难,或者如果解决了3SAT问题,所有的NP问题就解决了。
(5)记住证明一个问题属于NPC的基本步骤
证明NP-Complete问题。分以下两步:
第一步,证明这个问题Y属于NP;
第二步,选择一个问题NP-C,X问题
第三步,证明X问题可以多项式归约到Y。
(另:step2改为,直接证Y问题是NP-H,也是可以,但是要困难点)
规约关系具有传递性,所以有3SAT<=Vertex Cover,NP<=NP-Complete。 事实上,由于NP-Complete⊂ NP 且 NP<=NP-Complete,可以推导出 所有的NP-Complete 可以相互规约,也就是所有的NP-Complete都是等价的。

关于SAT

Reducing SAT to Shortest Clique Problem
Reducing SAT to Shortest Tour Problem
NP-Complete间的规约例子
1. 3SAT<=Independent Set
简单的说,构造好这样的图后,我们想要给每个三角形赋值, 每条边是 冲突的,例如我们选择第一个三角形的y为真值后,与y相连的各个顶点将不能被选择。
加入了3m个点,3m+k条边所以是多项式的时间内完成的规约。
8. Vertex Cover <=Independent Set
9. Independent Set <= Clique problem
(6)能证明一个问题是NP-hard
证明NP-hard问题。我们要证明一个问题是NP-hard的时候,我们通常要做的是找到一个已被证明了的NPC问题,并把这个NPC问题归约到该问题上去(即NPC<=NP-hard)。
简单说就是:
1)对问题A给定限制条件得到一个特例B问题
2)证明问题B是NPC问题。




第七章 近似算法
(1)理解什么是近似算法;
意义:所有已知的解决baiNP-难问题算法都有指数型运行时du间。但zhi是,如果我们要找一个“好”解dao而非最优解,有时候多项式算法是存在的。
迄今为止,所有的NP完全问题都还没有多项式时间算法。
对于这类问题,通常可采取以下几种解题策略。
(1)只对问题的特殊实例求解
(2)用动态规划法或分支限界法求解
(3)用概率算法求解
(4)只求近似解
(5)用启发式方法求解
近似算法关注的三个方面:
(1)解的优越性,即是否能达到最优解
(2)算法的效率,即复杂度(能否在多项式时间内完成)
(3)算法适用的范围,即是否适用于所有情况,还是只适合特殊情形
一般的算法在这三个方面往往不能同时表现得很好,但是我们可以退而求其次,选择其中得两个方面去尽可能地满足,当我们选择满足后两者,即对解的优越性放宽要求时,设计出的算法被称为近似算法。
(2)熟悉load balancing 问题的近似算法;

(3)理解点覆盖问题的定价算法(Pricing method),证明该方法能得到一个2倍近似解;
(4)理解点覆盖问题的整数规划模型如何建立,理解松弛求解方法;
(5)要求会对一个图问题建立整数规划模型(以点覆盖问题为例)
算法设计与分析(电子科技大学)(上)算法基础和贪心算法
算法设计与分析(电子科技大学)(中)分治算法、动态规划以及最大流问题和最小分割问题

本文深入探讨了归约与复杂度的NP问题,包括P、NPC和NPH问题的定义,重点讲解了多项式归约、Karp、Levin和Cook归约的区别。此外,介绍了近似算法的概念,如负载均衡问题和点覆盖问题的近似解决方案,以及如何通过定价算法得到2倍近似解。













9. Independent Set <= Clique problem
(下)归约与复杂度的NP问题以及近似算法&spm=1001.2101.3001.5002&articleId=109959064&d=1&t=3&u=9436697607e54d8db0c45d853d30e52e)
2万+

被折叠的 条评论
为什么被折叠?



