什么是NP和co-NP之间的区别

时间:2013-06-11 14:20:19

标签: algorithm code-analysis np

我知道他们的完整同行意味着 NP - 完全是NP问题中最难的,而共同NP完全意味着共同NP问题中最难的,但两者之间的差异是什么?我的教科书上写着“是的,没有被逆转”,这并没有给我留下那么多线索。

3 个答案:

答案 0 :(得分:10)

当你想证明问题的难度时,你必须把它变成一个叫做决策问题的东西,这意味着一个“是/否”答案类型的问题。例如,在Set Cover中,我们可能会问“我们可以仅使用X子集覆盖所有元素吗?”其中X是一些任意数字。我们可以证明NP中存在这个问题,因为它的解决方案很容易验证;你提供X子集,我检查是否所有元素都包含在多项式时间内。如果我们能够有效地回答对决策问题回答“是”,那么我们可以最小化X,从而有效地解决整个Set Cover问题(从而证明P = NP)。

< - > Co- *(Co-NP,Co-NP-complete)侧重于回答补充决策问题的“否”。例如,Set Cover的补充决策问题是“对于X子集的每个组合,是否不可能覆盖所有元素?”对此问题回答“否”要求您提供一个反...示例

总结:NP关注某些决策问题的“是”答案。 Co-NP关注的是同一但补充的决策问题的“否”答案。

答案 1 :(得分:1)

补充一下其他人所说的(因为我自己觉得这很令人困惑),是否 NP = co-NP 的问题是询问是否每个决策问题都有一个“是”的答案可以检查多项式时间也有一个“否”的答案,可以在多项式时间内检查。

这有点令人困惑,所以这里有一个例子:旅行商问题的决策形式(“给定一个图 G,在 G 中是否有一条长度为 L 或更短的路径至少访问每个顶点一次?”)是在 NP 中:如果我说“是的,有一条长度为 L 或更短的路径至少访问每个顶点一次”,我证明这一点的方法是给你一条长度为 L 或更小的路径,该路径至少访问每个顶点一次,并且您检查我的解决方案的方式是走我的路径,检查它是否至少到达每个顶点一次,并且它的长度为 L 或更小。这个问题在 NP 中,因为做这个检查需要多项式时间(即它很快)

这个问题的补充是“给定一个图 G,在 G 中是否没有长度为 L 或更短的路径至少访问每个顶点一次?”对这个问题回答“否”与上述问题基本相同。为了证明这一点,我会说“不,没有长度为 L 或更短的路径(双重否定令人困惑)至少访问每个顶点一次。为了证明这一点,这里有一条长度为 L 或更小的路径访问每个顶点至少访问一次。所以在 G 中没有长度为 L 的路径至少访问每个顶点一次。”这就是人们所说的任何 NP 问题的补集都在 co-NP 中的意思。

那么,如果 NP = co-NP,这意味着什么?这意味着如果一个问题在 NP 中(你可以很容易地检查“是”的答案),那么它也是在 co-NP 中(你可以很容易地检查“否”的答案)。

(重申一下,我们不是在讨论问题的补集:我们已经知道 NP 问题的补集在 co-NP 中。我们在问原始问题。)

但是对于旅行商问题,它是如何工作的并不明显:如果我说“不,G 中没有长度为 L 或更短的路径可以恰好访问每个顶点一次”,我将如何证明这一点?当答案为“是”时,我很容易向您证明这一点(只需向您提供路径,以便您自己检查)。但是,如果我的回答是“否”,则没有简单的方法(我们知道)来检查我是否正确。我只能说“相信我,我检查了所有这些”。发现 NP = co-NP 会令人惊讶,因为这意味着我可以给你一些证据,你可以快速检查一下,看看我是对的。 >

答案 2 :(得分:0)

NP 是一类决策问题,针对该问题存在多项式时间算法,该算法可以验证“是”实例,并提供适当的证书。

CoNP 是一类决策问题,针对该问题,有多项式时间算法可以验证“没有”实例,并提供适当的证书。

我们不知道coNP是否不同于NP。

NP中的每个问题都存在一个NP问题,反之亦然。例如,SAT问题询问“是否存在使该公式评估为True的布尔分配”? coNP中的补数问题问:“是否所有布尔分配都使该公式的计算结果为False?”