NP , NP-Complete 和 NP-Hard 之间有什么区别?
我知道网上有很多资源。我想阅读你的解释,原因是它们可能与那些不同,或者有些东西我不知道。
答案 0 :(得分:1316)
答案 1 :(得分:235)
我一直在环顾四周,看到许多长篇解释。 这是一个可用于总结的小图表:
注意难度从上到下增加:任何 NP都可以减少到NP-Complete ,任何 NP-Complete都可以减少到NP-Hard ,全部在P(多项式)时间。
如果你能在P时间内解决一个更难解决的问题,那就意味着你找到了如何在P时间内解决所有更容易的问题(例如,证明P = NP,如果你弄清楚如何解决任何NP- P时间完成问题。)
____________________________________________________________ | Problem Type | Verifiable in P time | Solvable in P time | Increasing Difficulty ___________________________________________________________| | | P | Yes | Yes | | | NP | Yes | Yes or No * | | | NP-Complete | Yes | Unknown | | | NP-Hard | Yes or No ** | Unknown *** | | ____________________________________________________________ V
关于Yes
或No
条目的说明:
我还发现this diagram非常有用,可以看到所有这些类型如何相互对应(更多地关注图的左半部分)。
答案 2 :(得分:74)
这是对所提问题的非正式回答。
3233可以写成另外两个大于1的数字的乘积吗?有没有办法在没有任何桥梁两次的情况下绕所有Seven Bridges of Königsberg走一条路?这些是具有共同特征的问题的示例。如何有效地确定答案可能并不明显,但如果答案是“是”,那么有一个简短快速的检查证明。在第一种情况下,51的非平凡因子分解;在第二个,走桥梁的路线(适应约束)。
决策问题是一系列问题,答案是肯定或不答案,仅在一个参数中有所不同。说问题COMPOSITE = {“是n
复合”:n
是一个整数}还是EULERPATH = {“图表G
是否有欧拉路径?”:G
是有限图}。
现在,一些决策问题有助于提高效率,即使不是很明显的算法。欧拉在250多年前发现了一种有效的算法来解决诸如“柯尼斯堡的七桥”之类的问题。
另一方面,对于许多决策问题,如何得到答案并不明显 - 但如果你知道一些额外的信息,很明显如何证明你已经得到了正确答案。 COMPOSITE是这样的:试验除法是明显的算法,它很慢:要算出一个10位数的数字,你必须尝试类似100,000个可能的除数。但是,例如,如果有人告诉你61是3233的除数,那么简单的长除法是一种有效的方法,可以看出它们是正确的。
复杂性类 NP 是一类决策问题,其中“是”答案的状态为短,快速检查证据。像COMPOSITE一样。一个重要的一点是,这个定义并没有说明问题的严重程度。如果您有正确,有效的方法来解决决策问题,那么只需在解决方案中写下步骤就足够了。
算法研究仍在继续,并且一直在创建新的聪明算法。你今天可能不知道如何有效解决的问题可能会在明天有一个有效的(如果不是显而易见的)解决方案。事实上,研究人员在2002之前找到了有效的COMPOSITE解决方案!随着所有这些进步,人们真的不得不怀疑:这有点短暂的证据只是一种幻觉吗?也许每个决策问题都有助于高效的证明有一个有效的解决方案吗? Nobody knows
也许对这一领域的最大贡献来自于发现一种特殊的NP问题。通过使用电路模型进行计算,Stephen Cook发现了NP变种的决策问题,这个问题可能比每个其他NP问题更难或更难。 boolean satisfiability problem的有效解决方案可用于为NP中的任何其他问题创建有效的解决方案。不久之后,理查德卡普表明,其他一些决策问题也可以达到同样的目的。从某种意义上说,这些问题是NP中“最难”的问题,被称为 NP-complete 问题。
当然,NP只是一类决策问题。许多问题不是以这种方式自然陈述的:“找到N的因子”,“找到访问每个顶点的图G中的最短路径”,“给出一组使下面的布尔表达式为真的变量赋值”。虽然可以非正式地谈论一些这样的问题是“在NP中”,从技术上说这没有多大意义 - 它们不是决策问题。其中一些问题甚至可能与NP完全问题具有相同的能力:这些(非决策)问题的有效解决方案将直接导致任何NP问题的有效解决方案。像这样的问题被称为 NP-hard 。
答案 3 :(得分:55)
除了其他很好的答案之外,这里有typical schema人用来显示NP,NP-Complete和NP-Hard之间的区别:
答案 4 :(得分:52)
P(多项式时间):正如名称本身所暗示的,这些是可以在多项式时间内解决的问题。
NP(非确定性多项式时间):这些是可以在多项式时间内验证的决策问题。这意味着,如果我声称对于特定问题存在多项式时间解决方案,那么您要求我证明它。然后,我会给你一个证据,你可以在多项式时间内轻松验证。这类问题被称为NP问题。注意,这里我们不讨论是否存在针对该问题的多项式时间解决方案。但我们正在讨论在多项式时间内验证给定问题的解决方案。
答案 5 :(得分:43)
解释P v.NP的最简单方法是将“单词问题”与“多项选择问题”进行比较。
当您尝试解决“单词问题”时,您必须从头开始找到解决方案。 当您尝试解决“多项选择问题”时,您可以选择:要么像解决“单词问题”一样解决问题,要么尝试插入给您的每个答案,并选择合适的候选答案。
通常情况下,“多项选择问题”比相应的“单词问题”容易得多:替换候选答案并检查它们是否合适可能比从头开始找到正确答案要少得多。
现在,如果我们同意多项式时间“容易”的努力,那么P类将由“简单的单词问题”组成,而NP类将包含“容易的多项选择问题”。
P v.NP的本质是这样一个问题:“是否有任何简单的多项选择问题,这些问题不像单词问题那么容易”?也就是说,是否有问题可以很容易地验证给定答案的有效性,但从头开始找到答案很困难?
现在我们直观地理解NP是什么,我们必须挑战我们的直觉。事实证明,存在“多项选择问题”,从某种意义上说,它们中最难的是:如果能够找到解决其中“最困难的”问题之一的问题,那么就能找到所有问题的解决方案。 NP问题!当库克在40年前发现这一点时,它完全出乎意料。这些“最困难的”问题被称为NP-hard。如果您找到其中一个“单词问题解决方案”,您会自动为每个“简单的多项选择问题”找到“单词问题解决方案”!
最后,NP完全问题是同时NP和NP难的问题。按照我们的比喻,它们同时“容易作为多项选择问题”和“其中最难解决的是单词问题”。
答案 6 :(得分:18)
我认为我们可以更简洁地回答这个问题。我回答了related question,并从那里复制了我的答案
但首先,NP难问题是一个我们无法证明存在多项式时间解的问题。一些“问题-P”的NP-硬度通常通过将已经证明的NP难问题转换为多项式时间内的“问题-P”来证明。
要回答其余问题,首先需要了解哪些NP难题也是NP完全的。如果NP难问题属于集合NP,则它是NP完全的。要属于集合NP,问题需要是
(i)决定问题,
(ii)问题的解决方案的数量应该是有限的,并且每个解决方案应该是多项式长度,并且
(iii)给定多项式长度解,我们应该能够说出问题的答案是肯定还是否现在,很容易看出可能存在许多不属于集合NP并且难以解决的NP难题。作为一个直观的例子,我们需要找到实际时间表的旅行推销员的优化版本比旅行推销员的决策版本更难,我们只需要确定长度< = k的时间表是否存在。“ / p>
答案 7 :(得分:16)
NP完全问题是NP-Hard和复杂类NP中的那些问题。因此,为了表明任何给定的问题是NP完全的,你需要证明问题是在NP中并且它是NP难的。
NP复杂度类中的问题可以在多项式时间内非确定性地求解,并且可以在多项式时间中验证NP中的问题的可能解(即证书)的正确性。
k-clique问题的非确定性解决方案的一个例子是:
1)从图中随机选择k个节点
2)验证这些k个节点是否形成了一个集团。
上述策略是输入图大小的多项式,因此k-clique问题在NP中。
请注意,在多项式时间内确定性可解决的所有问题也都在NP中。
显示问题是NP难的通常涉及使用多项式时间映射从其他一些NP难问题减少到您的问题:http://en.wikipedia.org/wiki/Reduction_(complexity)
答案 8 :(得分:5)
对于这个特定的问题,有很好的答案,所以没有必要写出我自己的解释。因此,我将尝试为不同类别的计算复杂性提供优秀的资源。
对于那些认为计算复杂性仅与P和NP有关的人,here is the most exhaustive resource关于不同的计算复杂性问题。除了OP提出的问题之外,它还列出了大约500种不同类型的计算问题和良好的描述,以及描述该类的基础研究论文列表。
答案 9 :(得分:3)
根据我的理解, np-hard 问题不是“更难”。而不是 np-complete 问题。实际上,根据定义,每个np-complete问题都是:
- 介绍。 Cormen,Leiserson,Rivest和Stein的算法(3ed),第1069页
答案 10 :(得分:1)