NP,NP-Complete和NP-Hard有什么区别?


Answers:


1437

我假设您正在寻找直观的定义,因为技术定义需要花费很多时间才能理解。首先,让我们记住一个初步的概念,以理解这些定义。

  • 决策问题否的问题。

现在,让我们定义那些复杂度类

P

P是一个复杂度类,表示可以在多项式时间内解决的所有决策问题的集合

即,给定问题的实例,可以在多项式时间内确定答案是或否。

给定一个连通图G,是否可以使用两种颜色对其顶点进行着色,以使任何边都不是单色的?

算法:从任意顶点开始,将其着色为红色,并将其所有邻居着色为蓝色,然后继续。当顶点用尽时,或者在使边缘的两个端点都具有相同颜色的情况下,请停止。


NP

NP是一个复杂性类,代表所有决策问题的集合,对于这些问题,答案为“是”的实例具有可以在多项式时间内验证的证明。

这意味着,如果有人给我们一个问题的实例,并且答案为是的证明(有时称为见证人),我们可以检查它在多项式时间内是否正确。

整数分解在NP中。这是给定的整数问题nm,是否有一个整数f1 < f < m,使得f分裂nf是的一个小的因素n)?

这是一个决策问题,因为答案是是或否。如果有人将问题的一个实例交给我们(因此他们将整数n和交给我们,m并将整数f1 < f < m,并声称fn(证书)的一个因数),我们可以通过执行除法来检查多项式时间内的答案n / f


NP完成

NP-Complete是一个复杂度类,表示XNP 中所有问题的集合,可以将多项式中的任何其他NP问题减少Y到NP X

直观地讲,这意味着Y如果我们知道如何快速解决问题,我们就可以迅速解决X。准确地说,Y是还原为X,如果有一个多项式时间算法f改造实例yY,以实例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中它们也不必是决策问题

此处的精确定义是,如果存在NP完全问题问题X是NP难的,Y从而Y可以X在多项式时间内归纳为

但是由于可以在多项式时间内将任何NP-完全问题简化为任何其他NP-完全问题,因此可以在多项式时间内将所有NP-完全问题简化为任何NP-hard问题。然后,如果在多项式时间内有一个NP-hard问题的解决方案,那么在多项式时间内有一个所有NP问题的解决方案。

停机问题是一个NP难问题。这是给定程序P和输入的问题I,会停止吗?这是一个决策问题,但不是NP问题。显然,任何NP完全问题都可以简化为这一问题。作为另一个例子,任何NP完全问题都是NP困难的。

我最喜欢的NP完全问题是扫雷问题


P = NP

这是计算机科学中最著名的问题,也是数学科学中最重要的突出问题之一。实际上,克莱研究所Clay Institute)愿意出一百万美元来解决这个问题(斯蒂芬·库克在克莱网站上的写法相当不错)。

显然,P是NP的子集。尚未解决的问题是NP问题是否具有确定的多项式时间解。人们普遍认为他们没有。这是一篇有关P = NP问题的最新(及其重要性)的近期出色文章:P与NP问题的现状

最好的书是Garey和Johnson 撰写的Computers and Intractability


32
@Paul Fisher:我将证明SAT可简化多项式时间内的停顿问题。请考虑以下算法:作为变量的命题输入,尝试In变量进行所有2^n可能的分配,如果满足条件则停止,否则进入无限循环。我们看到,当且仅当I满足条件时,该算法才会暂停。因此,如果我们有一个多项式时间算法来解决停止问题,那么我们就可以用多项式时间来解决SAT。因此,暂停问题是NP难题。
杰森

6
@Jason-您无法以这种方式将可决定的问题简化为不可决定的问题。可确定的问题必须导致确定的是或否答案,才能被认为是可确定的。暂停问题没有确定的“是”或“现在”答案,因为任意答案可能会使任何解决方案陷入循环。
rjzii

11
@Rob:是的,我可以。可还原的定义不要求将问题简化为可解决的。对于多对一缩减或图灵缩减,都是如此。
杰森

5
@Rob:好吧,如果您想继续进行下去。首先,“决定性”与使用“决定性问题”并不相同。大致上,“可判定”是指确定答案的“有效方法”。当然,“有效方法”具有技术定义。此外,“可判定的”也可以根据“可计算的功能”来定义。因此,暂停问题是一个决策问题(“程序是否停止?”是/否),但这是不确定的。没有有效的方法来确定停止问题的实例是否将停止。
杰森

21
将停止问题用作NP难题的“经典示例”是不正确的。这就像在说:“太平洋是盐水水族馆的经典例子。”
2014年

261

我一直在四处看看,并看到许多详细的解释。这是一个小图表,可能有助于总结一下:

注意难度是如何从上到下增加的:任何NP都可以还原为NP-Complete,任何NP-Complete都可以还原为NP-Hard,所有这些都在P(多项式)时间内。

如果您可以在P时间中解决一类更困难的问题,那将意味着您找到了如何在P时间中解决所有较简单的问题的方法(例如,证明P = NP,如果您知道如何解决P中的NP完全问题)。 P时间)。

____________________________________________________________
| 问题类型 可在P时间验证 P时间可解决| 难度增加
___________________________________________________________ | |
| P | 是的 是的 |
| NP | 是的 是或否* | |
| NP完成 是的 未知 |
| NP-硬| 是或否** | 未知*** | |
______________________________________________________________ V

注释YesNo条目:

  • *一个在P时间内也可以解决的NP问题。
  • ** NP-Hard问题,也是NP-Complete,可以在P时间验证。
  • *** NP完全问题(所有问题都是NP困难的子集)。剩下的NP难不是。

我还发现该图在查看所有这些类型如何相互对应时非常有用(请注意图的左半部分)。


我对您的回答有疑问。我在另一个问题中提出了问题,但有人要求我在此处发布它。你能在这里帮我吗?stackoverflow.com/questions/21005651/...
SRIKANTH

NP完全问题在多项式时间内是否可解决尚不清楚。而且,NP完全问题是NP难问题,因此某些NP难问题可以在多项式时间内验证,并且有可能也可以在多项式时间上求解。
FalkHüffner2014年

该表不正确且自相矛盾。即使您假设尚未证明的NP!= P,也仍然是错误的。例如,NP-Hard类包括NP-完全问题;因此,您的表声称NP完全问题可以同时在多项式时间内验证,而不能在多项式时间内验证。
2014年

3
@FalkHüffner谢谢,表已更新(从维恩图进行翻译时出错)。
Johnson Wong

1
@PeterRaeves根据定义,所有NP-complete问题都是NP-hard问题:NP-complete =(NP和NP-hard)。反之则不成立:NP-hard中存在一些问题(例如“停止问题”),而NP-hard中不存在。“ NP(在多项式时间内不可解)”-NP并不是这个意思。NP是“非确定性多项式”。P中的所有问题也在NP中。倒数是否成立是众所周知的。
Jim Balter 2015年

73

这是对所提问题的非常非正式的回答。

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


67

P(多项式时间):顾名思义,这些是可以在多项式时间内解决的问题。

NP(非确定性多项式时间):这些是可以在多项式时间中验证的决策问题。这意味着,如果我声称存在针对特定问题的多项式时间解,则您需要我证明它。然后,我将给您一个证明,您可以轻松地在多项式时间内对其进行验证。这些问题称为NP问题。请注意,这里我们不是在讨论是否存在针对该问题的多项式时间解。但是我们正在谈论验证多项式时间内给定问题的解决方案。

NP-Hard:这些问题至少与NP中最困难的问题一样困难。如果我们可以在多项式时间内解决这些问题,那么我们可以解决可能存在的任何NP问题。请注意,这些问题不一定是NP问题。这就是说,我们可能会/可能不会在多项式时间内验证这些问题的解决方案。

NP完成:这些都是NP和NP-Hard的问题。这意味着,如果我们能够解决这些问题,那么我们就可以解决任何其他NP问题,并且可以在多项式时间内验证这些问题的解决方案。


因此,您只是决定从某个位置复制定义?
阿伦·萨蒂亚斯

1
答案是有道理的!
康斯坦丁

2
@ArunSatyarth来自哪里?
含义-

3
最好的答案很简短,只使用足够的术语,使用普通的人类句子(不难读,让我们尽可能地正确无误),而且令人惊讶的是,唯一的答案写出了N代表什么。
含义-

62

除了其他出色的答案之外,这是人们用来说明NP,NP-Complete和NP-Hard之间差异的典型方案

在此处输入图片说明


1
是否已证明NP-Hard中存在而不是NP-Complete中存在的问题?因为此图像表明了这一点。谢谢。
Hilder Vitor Lima Pereira 2014年

9
@VitorLima是的,例如EXPSPACE完全问题是NP困难的,但事实证明不是NP完全的。
Franck Dernoncourt 2014年

2
好的谢谢。我发现一些参考资料在谈论它。例如,这一个:princeton.edu/~achaney/tmve/wiki100k/docs/NP-hard.html
Hilder Vitor Lima Pereira

47

在不涉及技术问题的情况下,解释P诉NP等最简单的方法是将“单词问题”与“多项选择问题”进行比较。

当您尝试解决“单词问题”时,您必须从头开始找到解决方案。当您尝试解决“多项选择题”时,您有一个选择:要么像解决“单词问题”那样解决它,要么尝试插入提供给您的每个答案,然后选择合适的候选答案。

通常,“多选问题”比相应的“单词问题”要容易得多:用替代答案并检查它们是否适合可能比从头开始找到正确答案要花费更少的精力。

现在,如果我们同意花费多项式时间“轻松”的努力,则类别P将包括“容易单词问题”,而类别NP将由“容易多项选择问题”组成。

P v。NP的本质是一个问题:“是否存在不像单词问题那样容易的简单选择题”?也就是说,是否存在容易验证给定答案的有效性但很难从头开始找到答案的问题?

既然我们能直观地理解NP是什么,我们就必须挑战直觉。事实证明,从某种意义上说,存在着所有问题中最难解决的“多选问题”:如果能够找到这些“最难解决”问题中的一个的解决方案,那么一个人就能找到所有问题的解决方案。 NP问题!当库克在40年前发现这一点时,这完全是一个惊喜。这些“最困难的”问题被称为NP困难。如果您找到其中一个的“单词问题解决方案”,您将自动为每个“简单的多项选择题”找到一个“单词问题解决方案”!

最后,NP完全问题是同时存在NP和NP困难的问题。按照我们的类比,它们同时“容易选择问题”和“最难解决的单词问题”。


18

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)


并非我在此答案中看到任何不正确的信息,但我不知道为什么会接受它。它实际上并不能满足OP的要求。甚至与这些问题的标准解释并没有什么不同,关于在这些类中导致这些问题的原因也没有任何明确的解释。不值得一票,但肯定不值得接受。
圣哈辛托

18

我认为我们可以更简洁地回答。我回答了一个相关的问题,然后从那里复制答案

但是首先,NP困难问题是我们无法证明存在多项式时间解的问题。通常通过在多项式时间内将已经证明的NP难题转换为“问题P”来证明某些“问题P”的NP硬度。

要回答其余问题,您首先需要了解哪些NP难题也是NP完整的。如果NP难问题属于集合NP,则它是NP完全问题。属于集合NP,需要解决一个问题

(i)一个决策问题,
(ii)该问题的解决方案数目应该是有限的,并且每个解决方案都应具有多项式长度,并且
(iii)给定一个多项式长度的解决方案,我们应该能够说出对于问题是/否

现在,很容易看出可能存在许多不属于集合NP且难以解决的NP难题。作为一个直观的例子,我们需要找到实际时间表的旅行推销员的优化版本比仅仅需要确定长度<= k的时间表的旅行推销员的决策版本难。


5

对于这个特定问题,确实有很好的答案,因此没有必要写我自己的解释。因此,我将尝试提供有关不同类别的计算复杂性的出色资源。

对于认为计算复杂度仅与P和NP有关的人而言,这里是有关各种计算复杂度问题的最详尽的资源。除了OP提出的问题外,它还列出了大约500种不同类别的计算问题,并给出了很好的描述,还列出了描述该类的基础研究论文列表。


3

据我了解,np难题并不比np完全难题“难” 。实际上,根据定义,每个np完全问题是:

  1. 在NP中
  2. np硬

在此处输入图片说明

- 介绍。到Cormen,Leiserson,Rivest和Stein的算法(第3版),第1069页


3
您的理解不正确。您对NP-complete的定义是正确的,但与您的第一个陈述无关。NP-hard中的所有问题至少与 NP-complete中的问题一样困难。某些问题(例如,无限困难的“停止问题”和en.wikipedia.org/wiki/EXPSPACE)更难证明。
Jim Balter 2015年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.