Answers:
我假设您正在寻找直观的定义,因为技术定义需要花费很多时间才能理解。首先,让我们记住一个初步的概念,以理解这些定义。
现在,让我们定义那些复杂度类。
P是一个复杂度类,表示可以在多项式时间内解决的所有决策问题的集合。
即,给定问题的实例,可以在多项式时间内确定答案是或否。
例
给定一个连通图G
,是否可以使用两种颜色对其顶点进行着色,以使任何边都不是单色的?
算法:从任意顶点开始,将其着色为红色,并将其所有邻居着色为蓝色,然后继续。当顶点用尽时,或者在使边缘的两个端点都具有相同颜色的情况下,请停止。
NP是一个复杂性类,代表所有决策问题的集合,对于这些问题,答案为“是”的实例具有可以在多项式时间内验证的证明。
这意味着,如果有人给我们一个问题的实例,并且答案为是的证明(有时称为见证人),我们可以检查它在多项式时间内是否正确。
例
整数分解在NP中。这是给定的整数问题n
和m
,是否有一个整数f
与1 < f < m
,使得f
分裂n
(f
是的一个小的因素n
)?
这是一个决策问题,因为答案是是或否。如果有人将问题的一个实例交给我们(因此他们将整数n
和交给我们,m
并将整数f
给1 < f < m
,并声称f
是n
(证书)的一个因数),我们可以通过执行除法来检查多项式时间内的答案n / f
。
NP-Complete是一个复杂度类,表示X
NP 中所有问题的集合,可以将多项式中的任何其他NP问题减少Y
到NP X
。
直观地讲,这意味着Y
如果我们知道如何快速解决问题,我们就可以迅速解决X
。准确地说,Y
是还原为X
,如果有一个多项式时间算法f
改造实例y
中Y
,以实例x = f(y)
的X
在多项式时间内,与物业的答案y
是肯定的,当且仅当答案f(y)
是肯定的。
例
3-SAT
。这是一个问题,其中为我们提供了3子句析取词(OR)的连接词(AND),形式为
(x_v11 OR x_v21 OR x_v31) AND
(x_v12 OR x_v22 OR x_v32) AND
... AND
(x_v1n OR x_v2n OR x_v3n)
其中每个x_vij
是布尔变量或有限预定义列表中变量的取反(x_1, x_2, ... x_n)
。
可以证明,每个NP问题都可以简化为3-SAT。证明是技术性的,需要使用NP的技术定义(基于非确定性图灵机)。这被称为库克定理。
使NP完全问题重要的原因是,如果可以找到确定性的多项式时间算法来解决其中一个问题,则每个NP问题都可以在多项式时间内解决(一个问题可以解决所有问题)。
直观地讲,这些问题至少与NP完全问题一样困难。请注意,NP难题不一定在NP中,它们也不必是决策问题。
此处的精确定义是,如果存在NP完全问题,则问题X
是NP难的,Y
从而Y
可以X
在多项式时间内归纳为。
但是由于可以在多项式时间内将任何NP-完全问题简化为任何其他NP-完全问题,因此可以在多项式时间内将所有NP-完全问题简化为任何NP-hard问题。然后,如果在多项式时间内有一个NP-hard问题的解决方案,那么在多项式时间内有一个所有NP问题的解决方案。
例
该停机问题是一个NP难问题。这是给定程序P
和输入的问题I
,会停止吗?这是一个决策问题,但不是NP问题。显然,任何NP完全问题都可以简化为这一问题。作为另一个例子,任何NP完全问题都是NP困难的。
我最喜欢的NP完全问题是扫雷问题。
这是计算机科学中最著名的问题,也是数学科学中最重要的突出问题之一。实际上,克莱研究所(Clay Institute)愿意出一百万美元来解决这个问题(斯蒂芬·库克在克莱网站上的写法相当不错)。
显然,P是NP的子集。尚未解决的问题是NP问题是否具有确定的多项式时间解。人们普遍认为他们没有。这是一篇有关P = NP问题的最新(及其重要性)的近期出色文章:P与NP问题的现状。
最好的书是Garey和Johnson 撰写的Computers and Intractability。
我一直在四处看看,并看到许多详细的解释。这是一个小图表,可能有助于总结一下:
注意难度是如何从上到下增加的:任何NP都可以还原为NP-Complete,任何NP-Complete都可以还原为NP-Hard,所有这些都在P(多项式)时间内。
如果您可以在P时间中解决一类更困难的问题,那将意味着您找到了如何在P时间中解决所有较简单的问题的方法(例如,证明P = NP,如果您知道如何解决P中的NP完全问题)。 P时间)。
____________________________________________________________ | 问题类型 可在P时间验证 P时间可解决| 难度增加 ___________________________________________________________ | | | P | 是的 是的 | | NP | 是的 是或否* | | | NP完成 是的 未知 | | NP-硬| 是或否** | 未知*** | | ______________________________________________________________ V
注释Yes
或No
条目:
我还发现该图在查看所有这些类型如何相互对应时非常有用(请注意图的左半部分)。
这是对所提问题的非常非正式的回答。
3233可以写成另外两个大于1的数字的乘积吗?有没有什么方法可以绕过柯尼斯堡的所有七座桥梁而无需两次过任何一座桥梁?这些是具有共同特征的问题示例。如何有效地确定答案可能并不明显,但是如果答案是“是”,那么就会有简短快捷的检查证据。在第一种情况下,非平凡因式分解为51;第二,一条走桥的路线(适合约束)。
一个决策问题是有是问题或没有答案,只有在一个参数变化的集合。说问题:COMPOSITE = {“ is n
复合”:n
是整数}或EULERPATH = {“图G
是否具有欧拉路径?”:G
是有限图}。
现在,一些决策问题使自己可以采用高效的算法(即使不是显而易见的算法)。欧拉(Euler)在250多年前就发现了解决“柯尼斯堡七桥”等问题的有效算法。
另一方面,对于许多决策问题,如何获得答案并不明显,但是,如果您知道一些其他信息,那么如何证明您的答案正确就很明显了。COMPOSITE就像这样:尝试除法是显而易见的算法,而且速度很慢:要分解10位数字,您必须尝试100,000个可能的除数。但是,例如,如果有人告诉您61是3233的除数,则简单的长除法是一种查看它们正确的有效方法。
复杂度类别NP是决策问题类别,其中“是”的答案需要简短陈述,可以快速检查证明。像COMPOSITE。重要的一点是,该定义并未说明问题的严重程度。如果您有正确,有效的方法来解决决策问题,只需写下解决方案中的步骤即可证明。
算法研究仍在继续,并且新的聪明算法一直被创造出来。您今天可能不知道如何有效解决的问题明天可能会变成有效的(如果不是很明显的话)解决方案。实际上,直到2002年,研究人员才找到有效的COMPOSITE解决方案!有了所有这些进步,人们真的不得不怀疑:拥有简短证据只是一种幻想吗?也许每一个适合有效证明的决策问题都有一个有效的解决方案? 没有人知道。
对这一领域的最大贡献可能是发现了一系列特殊的NP问题。通过玩弄电路模型进行计算,斯蒂芬·库克发现的NP品种的决策问题,这是可证明为硬或难度比每一个其他NP问题。为有效的解决方案布尔可满足性问题可以被用来创建一个有效的解决方案的任何其他在NP问题。不久之后,理查德·卡普(Richard Karp)表明,许多其他决策问题也可以达到相同的目的。从某种意义上说,这些问题是NP中最“困难”的问题,被称为NP完全问题。
当然,NP只是一类决策问题。许多问题不是自然地以这种方式陈述的:“找到N的因数”,“找到图形G中访问每个顶点的最短路径”,“给出一组变量赋值,使以下布尔表达式为真”。尽管可以非正式地谈论“在NP中”这样的问题,但从技术上讲这没有多大意义-它们不是决策问题。其中一些问题甚至可能具有与NP完全问题相同的作用:对这些(非决策)问题的有效解决方案将直接导致对任何NP问题的有效解决方案。这样的问题称为NP-hard。
P(多项式时间):顾名思义,这些是可以在多项式时间内解决的问题。
NP(非确定性多项式时间):这些是可以在多项式时间中验证的决策问题。这意味着,如果我声称存在针对特定问题的多项式时间解,则您需要我证明它。然后,我将给您一个证明,您可以轻松地在多项式时间内对其进行验证。这些问题称为NP问题。请注意,这里我们不是在讨论是否存在针对该问题的多项式时间解。但是我们正在谈论验证多项式时间内给定问题的解决方案。
NP-Hard:这些问题至少与NP中最困难的问题一样困难。如果我们可以在多项式时间内解决这些问题,那么我们可以解决可能存在的任何NP问题。请注意,这些问题不一定是NP问题。这就是说,我们可能会/可能不会在多项式时间内验证这些问题的解决方案。
NP完成:这些都是NP和NP-Hard的问题。这意味着,如果我们能够解决这些问题,那么我们就可以解决任何其他NP问题,并且可以在多项式时间内验证这些问题的解决方案。
除了其他出色的答案之外,这是人们用来说明NP,NP-Complete和NP-Hard之间差异的典型方案:
在不涉及技术问题的情况下,解释P诉NP等最简单的方法是将“单词问题”与“多项选择问题”进行比较。
当您尝试解决“单词问题”时,您必须从头开始找到解决方案。当您尝试解决“多项选择题”时,您有一个选择:要么像解决“单词问题”那样解决它,要么尝试插入提供给您的每个答案,然后选择合适的候选答案。
通常,“多选问题”比相应的“单词问题”要容易得多:用替代答案并检查它们是否适合可能比从头开始找到正确答案要花费更少的精力。
现在,如果我们同意花费多项式时间“轻松”的努力,则类别P将包括“容易单词问题”,而类别NP将由“容易多项选择问题”组成。
P v。NP的本质是一个问题:“是否存在不像单词问题那样容易的简单选择题”?也就是说,是否存在容易验证给定答案的有效性但很难从头开始找到答案的问题?
既然我们能直观地理解NP是什么,我们就必须挑战直觉。事实证明,从某种意义上说,存在着所有问题中最难解决的“多选问题”:如果能够找到这些“最难解决”问题中的一个的解决方案,那么一个人就能找到所有问题的解决方案。 NP问题!当库克在40年前发现这一点时,这完全是一个惊喜。这些“最困难的”问题被称为NP困难。如果您找到其中一个的“单词问题解决方案”,您将自动为每个“简单的多项选择题”找到一个“单词问题解决方案”!
最后,NP完全问题是同时存在NP和NP困难的问题。按照我们的类比,它们同时“容易选择问题”和“最难解决的单词问题”。
NP完全问题是NP-Hard和复杂度NP中的那些问题。因此,为了证明任何给定的问题都是NP完全的,您需要证明该问题既在NP中,又是NP困难的。
可以在多项式时间内不确定性地解决NP复杂度类别中的问题,并且可以验证NP中的问题的可能解决方案(即证书)在多项式时间内的正确性。
k形问题的不确定性解决方案示例如下:
1)从图中随机选择k个节点
2)验证这k个节点形成集团。
上面的策略是输入图大小的多项式,因此k形问题在NP中。
请注意,在多项式时间内确定可解决的所有问题也都在NP中。
通过多项式时间映射显示问题是NP困难的,通常涉及将其他NP困难的问题简化为您的问题:http : //en.wikipedia.org/wiki/Reduction_(complexity)
我认为我们可以更简洁地回答。我回答了一个相关的问题,然后从那里复制答案
但是首先,NP困难问题是我们无法证明存在多项式时间解的问题。通常通过在多项式时间内将已经证明的NP难题转换为“问题P”来证明某些“问题P”的NP硬度。
要回答其余问题,您首先需要了解哪些NP难题也是NP完整的。如果NP难问题属于集合NP,则它是NP完全问题。属于集合NP,需要解决一个问题
(i)一个决策问题,
(ii)该问题的解决方案数目应该是有限的,并且每个解决方案都应具有多项式长度,并且
(iii)给定一个多项式长度的解决方案,我们应该能够说出对于问题是/否现在,很容易看出可能存在许多不属于集合NP且难以解决的NP难题。作为一个直观的例子,我们需要找到实际时间表的旅行推销员的优化版本比仅仅需要确定长度<= k的时间表的旅行推销员的决策版本难。
据我了解,np难题并不比np完全难题“难” 。实际上,根据定义,每个np完全问题是:
- 介绍。到Cormen,Leiserson,Rivest和Stein的算法(第3版),第1069页
I
对n
变量进行所有2^n
可能的分配,如果满足条件则停止,否则进入无限循环。我们看到,当且仅当I
满足条件时,该算法才会暂停。因此,如果我们有一个多项式时间算法来解决停止问题,那么我们就可以用多项式时间来解决SAT。因此,暂停问题是NP难题。