我试图了解NP-Complete和NP-Hard之间的区别。
以下是我的理解
NP-Hard问题是在多项式时间内无法解决但在多项式时间内可以验证的问题。
NP-Complete问题是NP中的问题,也是NP-Hard问题。
以上定义是否正确?如果是这样,那么问题不是NP而是NP-Hard。难道它们不会比NP完全问题更难,说它们只能在指数时间内得到解决和验证吗?
答案 0 :(得分:12)
NP
问题(不是NP-Hard
问题)是决策问题,可以在多项式时间内验证。也许它们在多项式时间内是可解的,因为P
中的所有问题也都在NP
中。
NP-complete
问题是决策问题,所有NP
问题都可以在多项式时间内减少。它们是班级NP
中最难的问题。
NP-hard
类是问题的类,至少与NP-complete
问题一样难。它们不一定是决策问题。鉴于我们不知道是否NP = P
,我们很难说我们是否可以在多项式时间内验证NP-hard
问题。
例如,最大集团的决策问题(给图表G
一个整数K
,以判断是否存在至少K
个顶点的完整图表)是{{ 1}}问题。它也是NP
和NP-complete
。但是,最大团队问题(在给定图表中查找最大团队)不是NP-hard
或NP
,因为它不是决策问题。我们可以说它是NP-complete
,因为它至少与最大集团问题的决策版本一样难。
答案 1 :(得分:2)
NP-Hard是问题的下限。不可能的问题也是NP-Hard。 NP-Complete意味着它是NP-Hard,同时NP-Solvable。
可以在多项式时间内验证的问题是NP中问题的定义之一。
答案 2 :(得分:2)
你对NP-Hard的定义不正确,它看起来更像是复杂性类NP的(不完全正确的)定义。
计算问题p
在复杂性类NP中,如果它可以有效验证。在复杂性理论中,我们认为使多项式时间有效的计算。如果p ∈ NP
多项式时间可验证,则正式p
。
在你的定义中,你提到了概念多项式时间可解决,它对应于复杂度类P. NP-Complete问题是多项式时间可解决如果和只有当P = NP时。请注意,着名的P vs NP是计算机科学中最大的开放性问题之一,因此目前没有人知道P = NP还是P⊊NP,并且不能说NP问题不是多项式时间可解的(虽然它被广泛认为相信就是这样。)
直观地说,NP-Hard问题是计算问题,至少与NP中的问题一样难以解决。当我们说计算问题p
至少和另一个问题q
一样困难时,我们实际上反过来考虑它 - 如果我们能够在时间T中解决p
,那么我们也可以解决q
及时与T大致相同(例如,因多项式因子而异)。
更准确地说,如果从p
到q
有polynomial-time reduction,我们说q
至少与另一个问题p
一样难。粗略地说,多项式时间减少意味着给定一个解算A
的算法p
,我们可以使用B
作为黑盒来构造多项式时间算法A
(即我们将A
的时间复杂度视为O(1)
)来解决q
。
在NP-Hard问题的情况下,如果可以在多项式时间中解决NP-Hard问题,那么 ALL NP问题可以在多项式时间(因此P = NP!)。因此,NP-hard问题 NOT 多项式时间是可以解决的。
正如您在问题中所述,如果NP-Hard p
,则计算问题p ∈ NP
为NP-Complete。
如果存在不在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。