[英]Classification and complexity of generating all possible combinations: P, NP, NP-Complete or NP-Hard
[英]NP-Complete VS NP-Hard
我试图理解NP-Complete和NP-Hard之间的区别。
以下是我的理解
NP-Hard问题是在多项式时间内无法解决的问题,但可以在多项式时间内验证。
NP-Complete问题是NP中的问题,也是NP-Hard问题。
以上定义是否正确? 如果是这样,那么问题不是NP而是NP-Hard。 难道它们不会比NP完全问题更难,说它们只能在指数时间内得到解决和验证吗?
NP
问题(不是NP-Hard
问题)是一个可以在多项式时间内验证的决策问题 。 也许它们在多项式时间内是可解的,因为P
中的所有问题也都在NP
。
NP-complete
问题是一个决策问题 ,所有NP
问题都可以在多项式时间内减少。 它们是NP
级中最难的问题。
NP-hard
类是至少与NP-complete
问题一样难的问题。 它们不一定是决策问题。 鉴于我们不知道NP = P
与否,我们很难说我们是否可以在多项式时间内验证NP-hard
问题。
例如,最大集团的决策问题(给图表G
一个整数K
,以判断是否存在具有至少K
个顶点的完整图表)是NP
问题。 它也是NP-complete
和NP-hard
。 但是,最大团问题(在给定图中找到最大团)不是NP
或NP-complete
,因为它不是决策问题。 我们可以说它是NP-hard
,因为它至少与最大集团问题的决策版本一样难。
NP-Hard是问题的下限。 不可能的问题也是NP-Hard。 NP-Complete意味着它是NP-Hard并且同时是NP-Solvable。
可以在多项式时间内验证的问题是NP中问题的定义之一。
你对NP-Hard的定义是不正确的,它看起来更像是复杂性类NP的(不是精确正确的)定义。
如果可以有效地验证,则计算问题p
在复杂度类NP中。 在复杂性理论中,我们认为计算需要多项式时间才能有效。 所以正式p ∈ NP
如果p
是多项式时间验证 。
在你的定义中,你提到了概念多项式时间可解 ,它对应于复杂性类P.当且仅当P = NP 时, NP-Complete问题是多项式时间可解的 。 请注意,着名的P vs NP是计算机科学中最大的开放性问题之一,因此目前没有人知道P = NP还是P⊊NP,并且不能说NP问题不是多项式时间可解的(尽管它人们普遍认为是这样的。
直观地说,NP-Hard问题是计算问题, 至少与 NP中的问题一样难 。 当我们说计算问题p
至少与另一个问题q
一样困难时,我们实际上反过来考虑它 - 如果我们能够在时间T中求解p
,那么我们也可以在时间上解决q
与 T 大致相同 (比如,不同)通过多项式因子)。
更确切地说,我们说p
至少是很难,因为另一个问题q
如果有一个多项式时间减少从q
到p
。 粗略地说,多项式时间减少意味着给定一个求解p
的算法A
,我们可以通过使用A
作为黑盒来构造多项式时间算法B
(即我们将A
的时间复杂度视为O(1)
)来解决q
。
在NP-Hard问题的情况下,如果NP-Hard问题可以在多项式时间内求解,那么所有 NP问题都可以在多项式时间内求解(因此P = NP!)。 因此,人们普遍认为 NP难问题不是多项式时间可解的。
正如您在问题中正确指出的那样,如果计算问题是NP-Hard 且 p ∈ NP
,则计算问题p
是NP-Complete。
如果存在不在NP中的NP-Hard问题(据我所知,在这个时刻没有证明这类问题属于这一类),这样的问题比NP-Complete问题更难 。
证明:假设我们的主张不正确。 设p
是NP-Complete问题, 至少与 NP-Hard的另一个问题q
一样难,但在NP中则不然。 由于p
至少与q
一样硬,因此我们从q
到p
有多项式时间减少(比如它在时间P(n)
)。 由于p
在NP中,因此可以通过一些算法A
在时间T(n)
中验证,其中T
是多项式。
现在给出q
任何实例r
,我们可以通过首先将其减少到p
的实例s
来构造算法B
,然后调用A
来验证s
。 注意, B
在时间T(P(n))
验证q
,这是n
的多项式,它遵循q
在NP中,这给我们一个矛盾!
您的定义仅适用于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的多项式时间解在多项式时间内求解。
让我简单一点。
教授给他的学生一个问题,并要求他们提供一个有效的算法。
第二天,他的一些聪明的学生已经破解了算法来解决它。 它的复杂度为O(2 n ) 。 现在,所有人都很高兴他们有算法来获得解决方案。 一切都很好看。
教授对此表示赞赏,但他们说, “任务尚未结束” ,并挑战他们实际使用系统解决问题。
因此,他们立即尝试在系统中模拟它。 一名学生说,他的系统具有1 GIPS(每秒1000,000,000条指令)的极佳速度,并且可以在几分之一秒内解决问题。 因此,他们编写算法并尝试执行它。
然后他们从数据集的100个输入开始,然后运行它。 他们惊讶地发现程序运行并运行并运行并且不会停止。
然后另外一个学生做就可以了数学和揣摩的是,该系统将采取2 十分之百 9秒解决它。 大约2 40年左右。
第二天,当程序仍在运行时,教授说: “很好。亲爱的学生们,这就是我们所谓的NP-Hard 。系统可能会给出解决方案一天,但我担心我们不会在那里看到它“ 。
但是,同样的问题,一旦它产生一个解决方案,如果我们能够在实际时间内验证NP-Hard问题的解决方案,那么它就被称为NP-Complete 。 例如,子集的总和是NP-Hard问题。 但是,一旦我们得到子集解,我们就可以在多项式时间内轻松检查它。 所以它变成了NP-Complete。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.