NP-Complete VS NP-Hard

时间:2013-12-11 15:46:35

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

我试图了解NP-Complete和NP-Hard之间的区别。

以下是我的理解

  

NP-Hard问题是在多项式时间内无法解决但在多项式时间内可以验证的问题。
  NP-Complete问题是NP中的问题,也是NP-Hard问题。

以上定义是否正确?如果是这样,那么问题不是NP而是NP-Hard。难道它们不会比NP完全问题更难,说它们只能在指数时间内得到解决和验证吗?

5 个答案:

答案 0 :(得分:12)

NP问题(不是NP-Hard问题)是决策问题,可以在多项式时间内验证。也许它们在多项式时间内是可解的,因为P中的所有问题也都在NP中。

NP-complete问题是决策问题,所有NP问题都可以在多项式时间内减少。它们是班级NP中最难的问题。

NP-hard类是问题的类,至少与NP-complete问题一样难。它们不一定是决策问题。鉴于我们不知道是否NP = P,我们很难说我们是否可以在多项式时间内验证NP-hard问题。

例如,最大集团的决策问题(给图表G一个整数K,以判断是否存在至少K个顶点的完整图表)是{{ 1}}问题。它也是NPNP-complete。但是,最大团队问题(在给定图表中查找最大团队)不是NP-hardNP,因为它不是决策问题。我们可以说它是NP-complete,因为它至少与最大集团问题的决策版本一样难。

答案 1 :(得分:2)

NP-Hard是问题的下限。不可能的问题也是NP-Hard。 NP-Complete意味着它是NP-Hard,同时NP-Solvable。

可以在多项式时间内验证的问题是NP中问题的定义之一。

答案 2 :(得分:2)

你对NP-Hard的定义不正确,它看起来更像是复杂性类NP的(不完全正确的)定义。


复杂性等级NP是什么?

计算问题p在复杂性类NP中,如果它可以有效验证。在复杂性理论中,我们认为使多项式时间有效的计算。如果p ∈ NP 多项式时间可验证,则正式p

在你的定义中,你提到了概念多项式时间可解决,它对应于复杂度类P. NP-Complete问题是多项式时间可解决如果和只有当P = NP时。请注意,着名的P vs NP是计算机科学中最大的开放性问题之一,因此目前没有人知道P = NP还是P⊊NP,并且不能说NP问题不是多项式时间可解的(虽然它被广泛认为相信就是这样。)


什么是NP-Hard问题?

直观地说,NP-Hard问题是计算问题,至少与NP中的问题一样难以解决。当我们说计算问题p至少和另一个问题q一样困难时,我们实际上反过来考虑它 - 如果我们能够在时间T中解决p,那么我们也可以解决q及时与T大致相同(例如,因多项式因子而异)。

更准确地说,如果从pqpolynomial-time reduction,我们说q至少与另一个问题p一样难。粗略地说,多项式时间减少意味着给定一个解算A的算法p,我们可以使用B作为黑盒来构造多项式时间算法A(即我们将A的时间复杂度视为O(1))来解决q

在NP-Hard问题的情况下,如果可以在多项式时间中解决NP-Hard问题,那么 ALL NP问题可以在多项式时间(因此P = NP!)。因此,NP-hard问题 NOT 多项式时间是可以解决的。


什么是NP完全问题?

正如您在问题中所述,如果NP-Hard p,则计算问题p ∈ NP为NP-Complete。


NP-Hard问题不在NP?

如果存在不在NP中的NP-Hard问题(据我所知,此时此类问题没有被证明属于此类别),这样的问题比NP完全问题

证明:假设我们的主张不正确。让p成为一个NP-Complete问题,至少和另一个问题q一样难以解决,这个问题是NP-Hard,但不是NP。由于p至少与q一样难,因此从P(n)q我们的多项式时间减少(比如它在时间上p)。由于p位于NP中,因此可以通过某些算法A及时T(n)来验证,其中T是多项式。

现在给出r的任何实例q,我们可以先构建一个算法B,然后将其缩减为s的实例p,然后调用A验证s。请注意,B及时q验证T(P(n)) n,这是q中的多项式,它遵循{{1}}在NP中,这给我们带来了矛盾!

答案 3 :(得分:1)

您的定义仅适用于NP-complete。

从底部开始:P是多项式时间内某些确定性图灵机可以解决的问题类。 NP是一类问题,可以通过一些非确定性图灵机在多项式时间内解决(或者其解可以通过确定性图灵机在多项式时间内验证)。

对于NP-hard,它意味着具有以下属性的决策问题X:给定一个解决问题的图灵机,可以将NP中的任何问题实例重构(图灵减少)到多项式中的X实例时间。非正式地,这意味着NP难问题是“至少和NP一样难”的问题,或者X的解决方案可以应用于NP中的每个问题。请注意,问题不必在多项式时间内可验证,或者实际上可以验证。 NP-hard也包括不可判断和无法识别的问题。

我们不知道NP-hard是否包含可以在多项式时间内解决的问题(P?= NP问题)。目前,还没有找到针对NP难问题的单一多项式时间解决方案,但也没有证明这种解决方案不存在。如果找到某个NP难问题X的解决方案,则意味着P = NP,因为NP中任何问题的任何实例都可以在多项式时间内转换为X的实例(因为NP-hard的图灵减少属性)然后通过X的多项式时间解在多项式时间内求解。

答案 4 :(得分:0)

让我简单一点。

教授给他的学生一个问题,并要求他们提供一个有效的算法。

第二天,他的一些聪明的学生已经破解了算法来解决它。它具有 O(2 n 的复杂性。现在,所有人都很高兴他们有算法来获得解决方案。一切都很好看。

教授很欣赏他们,但他说,“任务尚未结束”,并挑战他们实际使用系统来解决它。

因此,他们立即尝试在系统中模拟它。一名学生说,他的系统具有1 GIPS(每秒 1000,000,000 指令)的极佳速度,并且可以在几分之一秒内解决问题。因此,他们编写算法并尝试执行它。

然后他们从数据集的 100 输入开始,然后运行它。他们惊讶地发现程序运行并运行并运行并且不会停止。

然后另一名学生对其进行了数学计算并发现,系统将采用 2 100 / 10 9 秒来解决它。大约 2 40

第二天,当程序仍在运行时,教授说,“非常好。亲爱的学生,这就是我们所说的 NP-Hard 。系统可能会提供解决方案有一天,但我担心我们不会在那里看到它“

但是,同样的问题,一旦它产生解决方案,如果我们能够在实际时间内验证NP-Hard问题的解决方案,那么它被称为 NP-Complete 。例如,子集的总和是NP-Hard问题。但是,一旦我们得到子集解,我们就可以在多项式时间内轻松检查它。所以它变成了NP-Complete。