Algorithm NP完全与NP难

Algorithm NP完全与NP难,algorithm,complexity-theory,np-complete,np-hard,Algorithm,Complexity Theory,Np Complete,Np Hard,如果一个已知为NP完全的问题a可以在多项式时间内归结为另一个问题B,那么B就是 (A) NP完全 (B) NP难 关于问题B,无论它是否在NP中,都没有给出任何信息。我很困惑,因为在霍普克拉夫特和厄尔曼的书中有一个定理,如果一个NP完全问题P1可以在多项式时间内简化为问题P2,那么P2就是NP完全的。但它也要求一个问题是NP完全的,它应该属于NP类。伙计们帮助理解这个概念。如果A是NP完全的,那么它也必然是NP。这反过来意味着A的每个潜在解都可以在多项式时间内得到验证,这意味着B也是如此(因为A

如果一个已知为NP完全的问题a可以在多项式时间内归结为另一个问题B,那么B就是 (A) NP完全 (B) NP难


关于问题B,无论它是否在NP中,都没有给出任何信息。我很困惑,因为在霍普克拉夫特和厄尔曼的书中有一个定理,如果一个NP完全问题P1可以在多项式时间内简化为问题P2,那么P2就是NP完全的。但它也要求一个问题是NP完全的,它应该属于NP类。伙计们帮助理解这个概念。

如果A是NP完全的,那么它也必然是NP。这反过来意味着A的每个潜在解都可以在多项式时间内得到验证,这意味着B也是如此(因为A可以在多项式时间内还原为B)。因此B是NP;因为问题A可以在多项式时间内简化为问题B,所以问题B的任何解都可以用来找到问题A的解。或者更简单地说,解A不能比解B更难。既然我们知道A是NP完全问题,哪一类问题至少和NP完全问题一样难

为了便于参考,你可能还想看看维基百科关于的文章(特别是第二句)。
而且。

如果A可以在多项式时间内简化为B,那么你只知道B比A难。在你的例子中,如果A是NP完全的,B是NP难的

如果B恰好也在NP中,那么B将是NP完全的(因为NP完全意味着同时在NP中并且是NP难的)

然而,没有什么能阻止你把一个问题简化成一个不在NP中的问题。例如,将NP中的任何问题简化为停顿问题是很简单的,这是一个除了NP难之外还无法确定的问题:

Construct the following program:
    Test all possible solutions for A.
    If one of them is successful halt and otherwise enter an infinite loop.
A has a solution if-and-only if that program halts

我的老师告诉我,如果问题Y可以简化为问题X,这也意味着X至少和Y一样难,因为如果你能解决X,你就可以解决Y。我在这里引用维基百科“一个问题H是NP难的,当且仅当存在一个NP完全问题L,它是多项式时间图灵可简化为H的。”A可还原为B意味着B的任何解都可以用来解A。这并没有对B的复杂度设置上限,所以B可能比NP难。这就是为什么B不仅仅是NP难的原因。B可能比NP难。那样的话,B应该是NP难的。如果它也是在NP中,那么我们可以说B是NP完全的。是的,B是NP难的。NP难问题“至少和NP中最难的问题一样难。”因为A可以简化为B,B至少和A一样难,而且因为A是NP完全的,所以它是NP中最难的问题之一。谢谢@David。我终于明白了。在阅读了这么多不同的资料后,我有点困惑。还有一个疑问大卫,假设我们可以在多项式时间内将一个NP问题a简化为另一个问题B,那么我们可以推断出关于B的什么。它是否在NP中?我们不能说B是否是NP。NP是一个问题复杂性的上界,但我们所知道的关于B的一切是,它至少和a一样难(a是一个下界)。NP-Hard是复杂度的下限,所有NP-Hard问题至少和NP完全问题一样难(可能更难)。然而,如果A只是NP,我们也不能说B是NP难的(除非P=NP),因为A和B可能都是NP,但不是NP完全的。供应商图应该有助于澄清这一点。正如一些回答者所指出的(有些人完全不同意),这种减少只会使B NP变得困难,尽管在你的特殊情况下,即使没有明确说明,可能作者认为它显然是在NP中(因此NPC)。如果它很容易验证(通常是属于NP的最简单的方式),那就足够了。@Prashant:如果你接受答案作为解决问题的答案,你可以接受(绿色标记)。同样,向上投票有用的问题和答案也不会有任何伤害。