【问题标题】:Which of these languages is NP-complete?这些语言中哪一种是 NP 完全的?
【发布时间】:2012-11-29 11:59:04
【问题描述】:

我正在寻找 NP 和 NP 完全问题之间的区别。我在 Jason 的 * 中找到了这个很棒的答案。关于 NP 完全问题,他说

一个 NP 问题 X,它可以在多项式时间内将任何其他 NP 问题 Y 简化为 X。直观地说,这意味着如果我们知道如何快速求解 X,我们就可以快速求解 Y。准确地说,如果有一个多项式时间算法 f 在多项式时间内将 X 的实例 x 转换为 Y 的实例 y = f(x),则 Y 可简化为 X,并且当且仅当答案时,x 的答案是肯定的到 f(x) 是肯定的。

我的问题是:哪一个是 NP 完全问题,X 还是 Y?

【问题讨论】:

    标签: algorithm computer-science theory np-complete np


    【解决方案1】:

    两者兼而有之。这个过程称为 Karp 约简,关键是任何 NP 完全问题都可以在多项式时间内转化为任何其他 NP 完全问题。

    然而,NP 完全问题只是 NP 问题的一个子集。 (根据我们目前的理解,如果 P=NP,它们是一回事。)

    【讨论】:

    • 我认为您声称 any NP 问题可以转化为 any 其他 NP 问题的说法是错误的。这意味着 NP 与 NP-complete 相同,但正如您自己提到的,NP-complete 是 NP 的一个子集。 (除非 P=NP)
    • 谢谢,我当然是想在那里写NP-complete。我会更新答案。
    • 那个位是固定的,但你的“两者或都不”的主要答案仍然是错误的。有关为什么 X 必须是 NP-Complete 的解释,请参阅 @templatetypedef 的答案。
    【解决方案2】:

    NP 完全语言是 X。这个想法是您可以从任意 NP 语言 Y 开始,然后在多项式时间内将其简化为 X。

    形式上,NP-completeness 的定义如下:一种语言 X 称为 NP-complete iff

    1. X ∈ NP。也就是说,X 不可能比“最难的 NP 问题”“更难”,因为 X 本身就是 NP 的成员。
    2. 对于任何 Y ∈ NP,存在从 Y 到 X 的多项式时间映射缩减。也就是说,X“至少与 NP 中的任何问题一样难”,因为 X 的多项式时间算法给出了 Y 的多项式时间算法。顺便说一句,Y 是多项式时间可归约到 X 的事实有时表示为 Y ≤p X。

    也就是说,可以将任何 NP 完全语言简化为任何其他 NP 完全语言,因此如果 Y 多项式时间简化为 X 并且 X 是 NP 完全的,则 Y 可能(但不是必需的)是NP完全的。然而,众所周知,如果 Y 在多项式时间内减少到 X,则 Y 必须是 NP 的一个元素。

    希望这会有所帮助!

    【讨论】:

    • 这可能看起来很愚蠢,但最难的NP问题不属于NP吗?那么为什么 X 不能比最难的 NP 问题更难呢?
    • @eddard.stark- 你说得对,“最难”的 NP 问题必须属于 NP。 NP完全问题也必须属于NP这一事实意味着它们不能比最难的NP问题更难,因为NP完全问题不会超出NP。这有意义吗?
    • @eddard.stark 请记住,任何 x 和 y 之间都有一个转换函数,因此 X 和 Y 的复杂度并不完全相同。