NPC问题
他们发现NP中的某些问题的复杂性与整个类的复杂性相关联。这些问题中任何一个如果存在多项式时间的算法,那么所有NP问题都是多项式时间可解的。这些问题被称为NP-完全问题(NPC问题).
p问题,可以在多项式时间内解决的问题,polynomial problem。
np 问题,可以在多项式的时间里验证一个解的问题,non-deterministic polynomial
npc问题,是NP的一个子集,且其中每一个问题均能由NP中的任何问题在多项式时间内转化而成,np complete
判定方法:
一个判定性问题,满足:
(1)∏∈NP
(2)对任意一个∏’∝poly∏ (注:poly为规约符号)
则问题∏称为NP-完全的(NP-complete,NPC);如果问题∏仅满足条件(2)而不满足条件(1),则问题NP称为NP-难的(NP-hard)。
在计算复杂度理论的世界中,
NPC
问题,又称NP完全
问题或NP完备
问题,是NP(非决定性多项式时间)中最难的决定性问题。因此NP完备问题应该是最不可能被化简为P(多项式时间可决定)的决定性问题的集合。许多人推测若 任何NPC问题得到多项式时间的解法,那此解法就可应用在所有NP问题上。更详细的定义容下叙述。一个NPC问题的例子是子集合加总问题,题目为
给予一个有限数量的整数集合,找出任何一个此集合的非空子集且此子集内整数和为零。意即: S是一个包括若干整数的集合,找出任一一个 S′? S且
这个问题的答案非常容易验证,但目前没有任何一个够快的方法可以在合理的时间内(意即多项式时间)找到答案。只能一个个将它的子集取出来一一测试,它的时间复杂度是Ο(2),n是此集合的元素数量。
假设
P
≠NP
的复杂度类的图解。若P
=NP
则三类别相同。一个决定性问题 C若是为NPC,则代表它对NP是完备的,这表示:
它是一个NP问题,且
其他属于NP的问题都可归约(reducible)成它。
可归约
在此意指对每个问题 L,总有一个多项式时间多对一变换,即一个决定性的算法可以将实例 l ∈ L 转化成实例 c ∈ C,并让 c 回答Yes当且仅当此答案对 l 也是Yes。为了证明某个NP问题 A实际上是NPC问题,证明者必须找出一个已知的NPC问题可以变换成 A。本定义得到一个结论,就是若上述的 C有一个多项式时间可解的算法,则我们可以将所有的NP问题降到P之中。
这个定义是史提芬·古克所提出。虽然NPC这个词并没有出现在这篇论文上任何地方。在这个资讯科学会议上,资讯科学家激动地讨论NPC问题是否可以在一个确定型图灵机上以多项式时间求解。John Hopcroft总结与会众人的共识,认为由于没有人能对某一命题提出驳倒对方的证明,此问题不会于现在解决。此命题就是知名的
P和NP相等吗?
。尚未有人能提出证明,说明NPC问题是否能在多项式时间中解决,使得此问题成为著名的数学中未解决的问题。位于美国麻省剑桥市的“克雷数学研究所”(Clay Mathematics Institute,简称CMI)提供了一百万美金奖金给任何可以证明P=NP或P≠NP的人。
一开始很难相信NPC问题是实际存在的,但著名的古克-李芬定理说明了一切(由Leonid Levin与Cook独立证出SAT问题是NPC问题,简化过但依旧艰深的证明在此)。
在1972年,Richard Karp证明有好几个问题也是NPC(请见卡普的二十一个NP-完全问题),因此除了SAT问题外,的确存在着一整类NPC问题。从古克开始,数千个问题借由从其他NPC问题变换而证实也是NPC问题,其中很多问题被搜集在Garey与Johnson于1979年出版的书之中。
满足条件2(无论是否满足条件1)的问题集合被称为NP-hard。一个NP-hard问题至少跟NPC问题一样难。有一类问题已经被证明属于NP-hard但不属于NP,即,这类问题至少与NP-complete一样难,但这类问题又不属于NP(自然也不属于NP-complete)。例如围棋的必胜下法,就是这样一个问题。
另一个有趣的例是图同构(isomorphism)问题,即以图论方法决定两个图是否为同构。两图同构的直觉条件是若其中一图可以经由移动顶点使它与另一个图重合,则为同构。思考下列两问题:
图同构:图G1是否与图G2同构?
子图同构:图G1是否与图G2的
任一子图
同构?子图同构问题是NPC,而图同构问题一般认为不是P也不是NPC问题,虽然它明显是一个NP问题。这是一个典型被认为很难却还不是NPC问题的例子。
想要证明一个问题是NPC,最简单的方法是先证明它属于NP,然后将某个已知是NPC的问题变换成它(多项式时间内变换)。因此在学习变换技巧前,先熟悉各种不同类型的NPC问题是很有用的。下表列出了一些以决定性命题表示的著名NPC问题:
布尔可满足性问题:(Boolean satisfiability problem)(SAT)
N-puzzle问题(华容道问题):(N-puzzle)
背包问题:(Knapsack problem)
汉弥尔顿循环问题:(Hamiltonian cycle problem)
旅行推销员问题:(Traveling salesman problem)
子图同构问题:(Subgraph isomorphism problem)
子集合加总问题:(Subset sum problem)
分团问题:(Clique problem)
顶点涵盖问题:(Vertex cover problem)
独立顶点集问题:(Independent set problem)
图着色问题(参见四色定理):(Graph coloring problem)
更多NPC问题的例子,请见NP-complete问题列表(英文版)。
通常一个P与NPC问题的叙述看起来只有一些不同的地方,例如3SAT问题(SAT问题的限制版本)仍然是NPC问题,但更限制的2SAT问题则是个P问题(准确的说,是NL-complete问题),而条件较为宽松的MAX 2SAT问题却又成了NPC问题。决定一个图是否能被两色涂满是P问题,但三色图是NPC问题,即使我们将它限制在平面图上。决定一个图有无循环或它是两分图很容易(在log空间等级),但是发现一个最大二分图或最大循环子图则是NPC。以一固定百分比来求郊游打包问题的最佳解可以在多项式时间解决,但是求最佳解是NPC。
目前为止,所有已知解NPC问题的算法需要依照资料数量而定的
超多项式
(superpolynomial)时间,目前也不知道是否有任何更快的算法存在。因此要在输入资料量大的时候解决一个NPC问题,通常我们使用下列的手段来解:近似算法:这类算法可以快速发现离最佳解在一定差距内的次佳解。
乱数算法:此类算法可提供一乱数产生的输入资料,让
本质上解答分布均匀
的受测程式可以有良好的求解效率。对于解答分布不均匀的程式,则可以降低乱数程度以改变输入资料。特例:此算法可以在题目呈献某些特殊情况时快速得解。参数化复杂度(Parameterized complexity)可视为广义的此类算法。
启发式算法:这种算法在许多时候可以产生
理性解答
(即运用评比或线索找出解),但无法保证它效率的良莠与解答的好坏程度。一个启发式算法的例子是用在图着色问题以O( n log n)的贪婪算法找次佳解,用在某些编译器的暂存器配置阶段上,此技术又叫图着色全域暂存器配置(graph-coloring global register allocation)。每顶点视为一变量,每边代表两变量同时使用的情况,颜色则代表配置给每一变量的暂存器编号。由于大多数的RISC机器拥有大量通用暂存器,因此启发式算法很适合用来解这类题目。
依照上述NPC的定义,所谓的变换其实是多项式时间多对一变换的简称。
另一种化约法称为多项式时间图灵归约(polynomial-time Turing reduction)。若我们提供一个副函式(subroutine)可以在多项式时间解出"Y",
又
可写出呼叫此副函式的程式并在多项式时间解出问题"X",代表我们可以将"X"多项式时间图灵变换成"Y"。相较起来,不同处在于多对一变换只能呼叫上述副函式一次
,且副函式的回传值必须就是
整个变换程式回传的值。如果有人使用图灵变换而非多对一变换来解析NPC,此问题的解答集合不一定会小于NPC。孰大孰小其实是个开放问题。如果两个概念相同,则可导出NP=反NP(co-NP)。此结论成立的道理在于NPC与反NPC的定义以图灵归约来看是相等的,且图灵变换定义的NPC包含多对一变换定义的NPC,反NPC也是相同情况。所以若是两种变换定义的NPC一样大的话,反NPC也会比照办理(在两者的定义之下)。例如SAT的反问题也会是NPC(在两者的定义之下)。因此推得NP = 反NP(证明在反NP条目中)。虽然NP是否等于反NP是个开放问题,但一般认为这似乎不大可能,也因此那两类的NPC定义也不大可能相等。
另一种很常用于NPC证明的变换手法是对数空间多对一变换(logarithmic-space many-one reduction),它是一种可以在对数量级空间运用的多对一变换法。由于每道可以在对数空间完成的运算也可以在多项式时间做完,因此能使用对数空间多对一变换的场合也可以使用多项式时间多对一变换。本方法较多项式时间多对一变换优雅,它也可以让我们对算法复杂度细分出更多分类,例如P完备复杂度。而NPC的定义是否会因为使用不同变换手法而产生差异,仍是一个未知的问题。
上一篇:五时八教
下一篇:没有了