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


当前回答

NP问题:-

NP问题是一类可以在非确定多项式时间内解决的问题。 非确定性算法分为两个阶段。 非确定性猜测阶段&&非确定性验证阶段。

Np问题的类型

NP完全 NP困难

NP完全问题:-

如果问题A具有以下两个性质,则称为NP完全问题

它属于NP类。 NP中的任何其他问题都可以在多项式时间内转化为P。

一些例子:

背包问题 子集和问题 顶点覆盖问题

其他回答

I have heard an explanation, that is:" NP-Completeness is probably one of the more enigmatic ideas in the study of algorithms. "NP" stands for "nondeterministic polynomial time," and is the name for what is called a complexity class to which problems can belong. The important thing about the NP complexity class is that problems within that class can be verified by a polynomial time algorithm. As an example, consider the problem of counting stuff. Suppose there are a bunch of apples on a table. The problem is "How many apples are there?" You are provided with a possible answer, 8. You can verify this answer in polynomial time by using the algorithm of, duh, counting the apples. Counting the apples happens in O(n) (that's Big-oh notation) time, because it takes one step to count each apple. For n apples, you need n steps. This problem is in the NP complexity class.

如果一个问题可以证明它既NP-Hard,又在多项式时间内可验证,那么它就被归类为NP-complete。在不深入讨论NP-Hard的情况下,只要说明某些问题的多项式时间解还没有找到就足够了。也就是说,它需要n!(n !)步来解它们。然而,如果给你一个np完全问题的解,你可以在多项式时间内验证它。

np完全问题的一个经典例子是旅行商问题。”

作者:ApoxyButt 来自:http://www.everything2.com/title/NP-complete

我们需要把算法和问题分开。我们编写算法来解决问题,它们以某种方式扩展。虽然这是一种简化,但如果缩放足够好,我们就用“P”来标记算法,如果缩放不够好,就用“NP”来标记算法。

了解我们试图解决的问题,而不是我们用来解决它们的算法,是有帮助的。所以我们说,所有具有良好伸缩算法的问题都是"在P内"的。而那些有一个糟糕的缩放算法的是“NP”。

That means that lots of simple problems are "in NP" too, because we can write bad algorithms to solve easy problems. It would be good to know which problems in NP are the really tricky ones, but we don't just want to say "it's the ones we haven't found a good algorithm for". After all, I could come up with a problem (call it X) that I think needs a super-amazing algorithm. I tell the world that the best algorithm I could come up with to solve X scales badly, and so I think that X is a really tough problem. But tomorrow, maybe somebody cleverer than me invents an algorithm which solves X and is in P. So this isn't a very good definition of hard problems.

尽管如此,NP中仍有许多问题,没有人知道一个好的算法。因此,如果我能证明X是一个特定的问题:一个解决X的好算法也可以用某种迂回的方式,为NP中的所有其他问题提供一个好算法。现在人们可能更相信X是一个棘手的问题。在这种情况下,我们称X为np完全。

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.

np完全是一类问题。

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

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

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

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

它对计算机科学很重要,因为它已经证明了NP中的任何问题都可以转化为NP完备中的另一个问题。这意味着任何一个NP完全问题的解都是所有NP问题的解。

安全性中的许多算法依赖于NP困难问题没有已知解的事实。如果能找到解决方案,它肯定会对计算产生重大影响。

据我所知

P是可以用确定性TM在多项式时间内解决的问题集。

NP是需要在多项式时间内解决非确定性TM的问题集。 这意味着我们可以用多项式时间并行检查每个实例的所有不同变量组合。如果问题是可解决的,那么至少有一个平行的TM实例会以“是”而停止。 这也意味着如果你能对变量/解做出正确的猜测,那么你只需要在多项式时间内检查它的有效性。

NP- hard是指问题比NP更难的集合。这意味着NP- hard问题比NP集中的任何问题都要难。即使使用图灵机的非确定性,这些问题也是指数级的。所以并行计算在解决这些问题时没有帮助。

NP- complete是NP和NP- hard的交集集。根据我的理解,

NP完全中的问题至少和NP集中最难的问题一样难。 所有np -完全问题的类都是等价的,即np -完全集中的一个问题可以简化为任何其他的np -完全问题。这意味着,如果任何一个np完全问题都有一个有效的解,那么所有的np完全问题都可以用相同的解来解决。

如果np -完全集中的任何问题在多项式时间内确定可解,则整个np -完全集在多项式时间内确定可解。此外,由于NP-完全问题至少与NP集中最难的问题一样难,NP集中的所有问题(等于或容易于NP-完全集中的问题)将被确定性多项式的运行时间所限制,将P集扩展到NP集中,从而得到P=NP。

如果我弄错了,请告诉我。