什么是 NP 完全问题?为什么在计算机科学中如此重要?
什么是 NP 完全问题?为什么在计算机科学中如此重要?
NP是所有决策问题(具有是或否答案的问题)的集合,其中“是”答案可以通过确定性图灵机在多项式时间内验证(O(nk),其中n是问题规模,k是常数)。多项式时间有时被用作快速或迅速的定义。
P是所有决策问题的集合,可由确定性图灵机在多项式时间内解决。由于它们可以在多项式时间内解决,因此也可以在多项式时间内验证。因此,P是NP的子集。
如果且仅当每个NP中的其他问题可以快速(即在多项式时间内)转换为问题x时,问题x属于NP,则在NP中的问题x也属于NP-Complete。
换句话说:
因此,NP完全问题之所以如此有趣,是因为如果任何一个NP完全问题能够快速解决,那么所有的NP问题都可以被快速解决。
另请参阅帖子 什么是“P=NP?”,为什么它是一个著名的问题?
NP难问题至少与NP中最难的问题一样困难。请注意,NP完全问题也是NP难问题。但是,并非所有NP难问题都属于NP(甚至不是决策问题),尽管具有前缀NP
。即NP-hard中的NP并不意味着非确定性多项式时间。是的,这很令人困惑,但它的使用已经深入人心,不太可能改变。
NP 代表着非确定性多项式时间。
这意味着使用非确定性图灵机(像常规图灵机一样,但包括一个非确定性的“选择”函数),可以在多项式时间内解决该问题。基本上,一个解必须能够在多项式时间内进行测试。如果是这种情况,并且已知的 NP 问题可以使用给定问题的修改输入来解决(NP 问题可以被约化为给定问题),那么该问题就是 NP 完全问题。
从 NP 完全问题中得到的主要信息是,它不能以任何已知的方式在多项式时间内解决。NP-难/NP-完全是一种展示某些类别的问题无法在现实时间内解决的方式。
编辑:正如其他人所指出的,NP-完全问题通常有近似解。在这种情况下,近似解通常会使用特殊符号给出一个近似界限,告诉我们近似程度有多接近。
基本上,这个世界的问题可以分为:
1)无解问题 2)难题问题 3)NP问题 4)P问题
1)第一个是没有解决问题。 2)第二个需要指数时间(即O(2 ^ n)以上)。 3)第三个被称为NP。 4)第四个是简单问题。
P:指问题在多项式时间内得以解决。
NP:指虽然还未找到多项式时间解决方案,但我们并不确定没有多项式时间解决方案。一旦提供了解决方案,则该解决方案可以在多项式时间内验证。
NP完全问题(NPC):指虽然可以在多项式时间内验证,但我们仍未找到多项式时间解决方案。NPC问题比NP问题更困难,因此如果我们能证明对NPC问题有P解决方案,则可以找到P解决方案的NP问题。
NP难问题:指虽然还未找到多项式时间解决方案,但确定其不能在多项式时间内验证。NP难问题超越了NPC问题的难度。
NP-完全问题是一类问题。
类P包括那些可以在多项式时间内解决的问题。例如,它们可以在O(nk)的时间内解决,其中k是某个常数,n是输入的大小。简单来说,可以编写一个程序,在“合理”的时间内运行。
类NP包括那些可以在多项式时间内进行验证的问题。也就是说,如果我们得到了一个潜在的解决方案,那么我们可以在多项式时间内检查给定的解决方案是否正确。
一些例子是布尔可满足性(或SAT)问题,或者汉密尔顿回路问题。已知有许多问题属于类NP。
NP-完全意味着该问题至少与类NP中的任何问题一样困难。
这对计算机科学很重要,因为已经证明类NP中的任何问题都可以被转化为另一个NP-完全问题。这意味着解决任何一个NP-完全问题的解决方案也是所有NP问题的解决方案。
许多安全算法依赖于没有已知的解决方案的NP难问题。如果找到了解决方案,这肯定会对计算产生重大影响。
这是一类问题,我们必须模拟每种可能性以确保我们有最优解。
对于一些 NP-完全问题,有很多好的启发式算法,但它们只能尽最大努力猜测最优解。
(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) ...
说实话,维基百科可能是寻找这个问题答案最好的地方。
如果NP = P,那么我们能够比之前想象得更快地解决非常困难的问题。如果我们用P(多项式)时间解决一个NP-Complete问题,那么它可以应用于所有其他NP-Complete类别的问题。