什么是np完全问题?为什么它在计算机科学中如此重要?


当前回答

上面NP完全问题的定义是正确的,但我想我可能会对它们的哲学重要性进行抒情,因为还没有人解决这个问题。

几乎你遇到的所有复杂问题都是NP完全的。这门课有一些非常基础的东西,从计算上看和容易解决的问题是不同的。它们有自己的味道,而且不难辨认。这基本上意味着任何适度复杂的算法都不可能精确地解决——调度、优化、包装、覆盖等。

But not all is lost if a problem you'll encounter is NP Complete. There is a vast and very technical field where people study approximation algorithms, which will give you guarantees for being close to the solution of an NP complete problem. Some of these are incredibly strong guarantees -- for example, for 3sat, you can get a 7/8 guarantee through a really obvious algorithm. Even better, in reality, there are some very strong heuristics, which excel at giving great answers (but no guarantees!) for these problems.

请注意,两个非常著名的问题——图同构和因式分解——不知道是P或NP。

其他回答

什么是NP?

NP是所有决策问题(答案是或否的问题)的集合,其中“是”答案可以通过确定性图灵机在多项式时间(O(nk),其中n是问题大小,k是常数)验证。有时用多项式时间来定义快或快。

P是什么?

P是由确定性图灵机在多项式时间内解决的所有决策问题的集合。由于它们可以在多项式时间内求解,因此也可以在多项式时间内验证。因此P是NP的子集。

什么是np完全?

NP中的问题x也属于NP完全,当且仅当NP中的所有其他问题都可以快速地(即。在多项式时间内)转换成x。

换句话说:

x在NP中,并且 NP中的每个问题都可约为x

所以,NP完全问题的有趣之处在于,如果任何一个NP完全问题可以快速解决,那么所有NP问题都可以快速解决。

另见帖子“P=NP”是什么?为什么这是一个如此著名的问题?

什么是NP-Hard?

NP- hard是指至少和NP中最难的问题一样难的问题。注意,np完全问题也是np难的。然而,并非所有NP难问题都是NP问题(甚至是决策问题),尽管有NP作为前缀。NP-hard中的NP并不意味着非确定性多项式时间。是的,这令人困惑,但它的用法根深蒂固,不太可能改变。

NP代表非确定性多项式时间。

这意味着使用非确定性图灵机(就像常规图灵机,但也包括非确定性“选择”函数)可以在多项式时间内解决问题。基本上,解必须在多边形时间内可测试。如果是这样的话,一个已知的NP问题可以用修改输入的给定问题来解决(一个NP问题可以简化为给定问题),那么这个问题就是NP完全的。

从np完全问题中得到的主要东西是,它不能以任何已知的方式在多项式时间内解决。NP-Hard/NP-Complete是一种表明某些类型的问题在现实时间内无法解决的方法。

编辑:正如其他人所注意到的,np完全问题通常有近似解。在这种情况下,近似解通常给出一个近似界,用特殊的符号告诉我们这个近似有多接近。

np完全是一类问题。

P类由那些可以在多项式时间内解决的问题组成。例如,对于某个常数k,它们可以用O(nk)来求解,其中n是输入的大小。简单地说,您可以编写一个在合理时间内运行的程序。

NP类由那些在多项式时间内可验证的问题组成。也就是说,如果我们已知一个可能的解,那么我们可以在多项式时间内检验这个解是否正确。

一些例子是布尔可满足性(或SAT)问题,或哈密顿循环问题。在NP类中有很多已知的问题。

NP完全意味着问题至少和NP中的任何问题一样难。

它对计算机科学很重要,因为它已经证明了NP中的任何问题都可以转化为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-Complete指的是非常具体的东西,你必须小心,否则你会弄错定义。首先,NP问题是一个是/否问题

对于答案为"是"的问题的每个实例都有多项式时间证明,即答案为"是",或者(等价地) 存在一种多项式时间算法(可能使用随机变量),如果问题实例的答案是“是”,那么它有非零概率回答“是”,如果答案是“否”,则它会在100%的时间内回答“否”。换句话说,该算法的假阴性率必须小于100%,并且没有假阳性。

问题X是np完全的,如果

X在NP中,并且 对于NP中的任何问题Y,都有一个从Y到X的“约简”:一个多项式时间算法,将Y的任何实例转换为X的实例,当且仅当X实例的答案是“是”时,Y实例的答案是“是”。

如果X是NP完全的,并且存在一个确定性的多项式时间算法,可以正确地解决X的所有实例(0%假阳性,0%假阴性),那么NP中的任何问题都可以在确定性多项式时间中解决(通过归约到X)。

So far, nobody has come up with such a deterministic polynomial-time algorithm, but nobody has proven one doesn't exist (there's a million bucks for anyone who can do either: the is the P = NP problem). That doesn't mean that you can't solve a particular instance of an NP-Complete (or NP-Hard) problem. It just means you can't have something that will work reliably on all instances of a problem the same way you could reliably sort a list of integers. You might very well be able to come up with an algorithm that will work very well on all practical instances of a NP-Hard problem.