什么是NP完全问题?为什么它在计算机科学中如此重要?
什么是NP完全问题?为什么它在计算机科学中如此重要?
Answers:
NP代表非确定性多项式时间。
这意味着可以使用非确定性图灵机(类似于常规图灵机,但还包括非确定性“选择”功能)在多项式时间内解决问题。基本上,解决方案必须可以在聚合时间内进行测试。如果是这样,并且可以使用输入经过修改的给定问题来解决已知的NP问题(可以将NP问题简化为给定问题),那么该问题就是NP完整的。
要摆脱NP完全问题,最主要的事情是它不能以任何已知的方式在多项式时间内求解。NP-Hard / NP-Complete是一种显示某些类型的问题在现实中无法解决的方法。
编辑:正如其他人指出的那样,通常有近似的解决方案来解决NP-完全问题。在这种情况下,近似解通常使用特殊的符号给出近似边界,该近似符告诉我们近似的接近程度。
NP是所有决策问题(具有“是或否”答案的问题)的集合,可以在多项式时间(O(n k)中验证 “是”答案,其中n是问题大小,而k是常数)由确定性图灵机。多项式时间有时被用作快速或快速的定义。
P是一套可以决定所有问题解决在多项式时间由确定性图灵机。由于它们可以在多项式时间内求解,因此它们也可以在多项式时间内验证。因此,P是NP的子集。
当且仅当 NP中的所有其他问题都可以快速(即在多项式时间内)转化为x时,NP中的问题x才在NP-Complete中。
换一种说法:
因此,使NP-Complete如此有趣的是,如果要快速解决NP-Complete中的任何一个问题,那么所有NP问题都可以很快得到解决。
另请参阅文章“ P = NP?”,为什么它是一个如此著名的问题?
NP-Hard是至少与NP中最难的问题一样困难的问题。请注意,NP完全问题也是NP难问题。但是,尽管有NP
前缀,但并非所有NP难题都是NP(甚至是决策问题)。那就是NP-hard中的NP并不意味着不确定的多项式时间。是的,这很令人困惑,但是其用法根深蒂固,不太可能改变。
NP-Complete的意思很具体,您必须小心,否则定义将会错误。首先,NP问题是是/否问题,因此
如果X是NP-Complete
如果X是NP完全的,并且存在确定性的多项式时间算法,可以正确解决X的所有实例(0%假阳性,0%假阴性),则NP中的任何问题都可以通过确定性多项式求解。时间(减少到X)。
到目前为止,还没有人提出这样一种确定性的多项式时间算法,但是没有人证明不存在这种算法(任何人都可以做到一百万美元:P = NP问题)。这并不意味着您无法解决NP-Complete(或NP-Hard)问题的特定实例。这只是意味着您无法像在可靠地对整数列表进行排序一样,无法在所有问题实例上可靠地工作。您可能会非常想出一种算法,该算法将在NP-Hard问题的所有实际情况下都能很好地工作。
基本上,这个世界的问题可以归类为
1)无法解决的问题2)棘手的问题3)NP问题4)P问题
1)第一个是没有解决问题的方法。2)第二个是需要指数时间(即上面的O(2 ^ n))。3)第三个称为NP。4)第四是容易的问题。
P:指多项式时间问题的解决方案。
NP:参考多项式时间尚未找到解决方案。我们不确定是否没有多项式时间解决方案,但是一旦提供了解决方案,就可以在多项式时间中验证该解决方案。
NP完整:在多项式时间中仍未找到解决方案,但可以在多项式时间中进行验证。NP中的NPC问题是更困难的问题,因此,如果我们可以证明对NPC问题具有P解,那么可以在P解中找到NP问题。
NP Hard:参考“多项式时间”尚未找到解决方案,但确定无法在“多项式时间”中进行验证。NP困难问题超过了NPC困难。
NP-Complete是一类问题。
该类P
由可在多项式时间内解决的问题组成。例如,它们可以在O(n k)中求解某个常数k,其中n是输入的大小。简而言之,您可以编写一个可以在合理的时间运行的程序。
该类NP
包含可在多项式时间内验证的那些问题。也就是说,如果给定了一个潜在的解,那么我们可以检查给定的解在多项式时间内是否正确。
一些示例是布尔可满足性(或SAT)问题或哈密顿循环问题。已知在NP类中存在许多问题。
NP-Complete
意味着问题至少与NP中的任何问题一样困难。
这对计算机科学非常重要,因为已经证明,NP中的任何问题都可以转化为NP-complete中的另一个问题。这意味着对任何一个NP完全问题的解决方案就是对所有NP问题的解决方案。
安全性中的许多算法取决于以下事实:不存在针对NP难题的已知解决方案。如果找到解决方案,那肯定会对计算产生重大影响。
这是一类问题,我们必须模拟所有可能性以确保我们拥有最佳解决方案。
对于某些NP完全问题,有很多很好的启发式方法,但充其量只是一种有根据的猜测。
如果您正在寻找NP完全问题的示例,那么我建议您看一下3-SAT。
基本前提是您有一个合取范式形式的表达式,这是一种表示您有一系列由OR组成的表达式的声明,所有条件都必须为真:
(a or b) and (b or !c) and (d or !e or f) ...
3-SAT问题是要找到一个满足该表达式的解决方案,其中每个OR表达式都具有恰好匹配的3个布尔值:
(a or !b or !c) and (!a or b or !d) and (b or !c or d) ...
一个解决方案可能是(a = T,b = T,c = F,d = F)。但是,尚未发现在多项式时间内一般情况下可以解决此问题的算法。这意味着解决此问题的最佳方法实质上是进行蛮力猜测和检查并尝试不同的组合,直到找到可行的组合为止。
3-SAT问题的特殊之处在于,任何NP完全问题都可以简化为3-SAT问题。这意味着,如果您能找到一个多项式时间算法来解决该问题,那么您将获得1,000,000美元,更不用说全世界计算机科学家和数学家的尊重和钦佩。
老实说,维基百科可能是寻找答案的最佳场所。
如果NP = P,那么我们可以比以前想象的更快地解决非常棘手的问题。如果我们仅在P(多项式)时间内解决一个NP-完全问题,则可以将其应用于NP-完全类别中的所有其他问题。
我们需要分离算法和问题。我们编写算法来解决问题,并且它们以某种方式扩展。尽管这只是一种简化,但如果缩放比例足够好,我们就用“ P”标记算法,否则就用“ NP”标记。
了解有关我们要解决的问题的信息,而不是了解用于解决这些问题的算法,将很有帮助。因此,我们将说所有具有良好缩放算法的问题都是“ in P”。缩放算法较差的是“ in NP”。
这意味着很多简单的问题也“在NP中”,因为我们可以编写糟糕的算法来解决简单的问题。最好知道NP中的哪些问题确实很棘手,但我们不只是要说“这是我们没有找到好的算法的问题”。毕竟,我可能会提出一个我认为需要超级惊人算法的问题(称为X)。我告诉全世界,我想出的最佳算法很难解决X缩放问题,因此我认为X是一个非常棘手的问题。但是明天,也许比我更聪明的人发明了一种解决X并在P中的算法。因此,这并不是对难题的很好定义。
一样,NP中有很多问题,没有人知道一个好的算法。因此,如果我可以证明 X是某种问题:一个可以解决X的好的算法,也可以通过某种round回方式,为NP中的其他每个问题提供一个好的算法。现在,人们可能会更加相信X是一个真正棘手的问题。在这种情况下,我们将其称为X NP-Complete。
上面关于NP完全问题的定义是正确的,但是我认为我可能会对它们的哲学重要性加些抒情,因为还没有人解决这个问题。
几乎所有您遇到的复杂问题都是NP Complete。这个类有一个非常基础的东西,在计算上似乎与容易解决的问题有所不同。它们有点自己的风味,识别它们并不难。从根本上讲,这意味着您无法完全解决任何中等复杂的算法-计划,优化,打包,覆盖等。
但是,如果您遇到的问题是NP Complete,并不是所有的一切都会丢失。人们在广泛的技术领域中研究近似算法,这将为您提供接近NP完全问题的解决方案的保证。其中一些是非常强大的保证-例如,对于3sat,您可以通过一个非常明显的算法获得7/8保证。甚至更好的是,实际上,有一些非常强大的启发式方法,可以很好地为这些问题提供很好的答案(但不能保证!)。
请注意,两个非常著名的问题-图形同构和分解-都不是P或NP。
我听过一个解释,那就是:“ NP完全性可能是算法研究中比较神秘的想法之一。“ NP”代表“不确定性多项式时间”,并且是所谓的“复杂性类别”的名称。NP复杂度类别的重要之处在于可以验证该类别中的问题通过多项式时间算法 例如,考虑计数的问题。假设桌子上有一堆苹果。问题是“那里有多少个苹果?” 系统会为您提供一个可能的答案8。您可以通过使用对苹果计数的算法,在多项式时间内验证该答案。对苹果进行计数的时间为O(n)(表示为Big-oh),因为对每个苹果进行计数需要一步。对于n个苹果,您需要n个步骤。这个问题在NP复杂度类别中。
如果可以证明问题是NP-Hard且可在多项式时间内验证的,则将其分类为NP-complete。在不深入讨论NP-Hard的情况下,可以说还没有发现多项式时间解的某些问题。也就是说,它需要像n一样的东西!(n个阶乘)步骤来解决它们。但是,如果为您提供了NP完全问题的解决方案,则可以在多项式时间内对其进行验证。
NP完全问题的一个典型例子是旅行商问题。”
作者:ApoxyButt来自:http ://www.everything2.com/title/NP-complete
NP完整问题:-
1个决策问题A如果具有以下两个属性,则称为NP完成:
一些前:-
据我所理解
P是可以使用确定性TM在多项式时间内解决的一组问题。
NP是需要不确定的TM以便在多项式时间内解决的一组问题。这意味着要并行检查所有可能的变量,每个实例花费多项式时间。如果问题可以解决,那么这些并行状态中的至少一种必须解决该问题。这也意味着,如果您对解变量进行猜测,那么唯一需要做的就是检查多项式时间内解的有效性。
NP-Hard是问题至少与NP一样困难的领域。NP中的任何问题都可以在多项式时间内转换为NP-Hard问题。如果P不等于NP,则无法在多项式时间内解决这些问题。也就是说,当NP中最困难的问题是多项式时间可解时,那么只有NP-Hard问题才是多项式时间可解。
NP-Complete是NP与NP-Hard的交集。任何NP问题都可以在多项式时间内转化为NP-Complete问题。这意味着,如果任何NP-Complete都可以有一个有效的解决方案,那么任何NP问题都可以以相同的效率解决。
如果我有任何错误,请告诉我。
NP问题是可以在多项式时间内创建一种验证解决方案的计算机算法的问题。
一个NP完全问题是NP,但是如果您可以在多项式时间内求解它(称为P),那么所有NP问题都是P。
所以开始吧。