如何证明一个问题是NP-hard(NP-complete)

原文地址:https://zhuanlan.zhihu.com/p/53085012、
本文仅做记录笔记已方便理解使用。

判断步骤:

1.是否NP?
→ 算法结果能否在多项式时间内验证正确性
2.是否NP-hard?
→使用一个叫做Reduction的技巧,即,如果能用A问题的求解器去求解另一个已知的NP-hard问题,则A问题是NP-hard的

Reduction是将两个算法建立联系的一个过程。我们说X reduce 到Y,意味着,假设现在有一个Y的黑盒求解器,于是我们设计一个多项式算法来用Y的求解器来求解问题X。

对于NP-hard与NP-Complete的区别

如何证明一个问题是NP-hard(NP-complete)_第1张图片
如果我们找到一个特别的问题H,使得所有NP问题都可以reduce到问题H上,那这个问题H肯定特别难,因为我们能用这个问题H解决所有的NP问题,因此我们称这个问题H为NP-Hard问题。
这个经过reduce的问题H不一定是NP问题,于是才有上述示意图的上部分,即有一部分NP hard问题是落在圈外的。如果问题H是属于NP的话,那么问题H就是NP-complete问题,NP-complete是NP和NP-hard的交集。

NP定义: 可以在多项式时间验证结果正确性的问题。
NP-hard定义: 对于问题H,所有NP问题都可以reduce到H。
这意味着,如果NP-hard可以用多项式解决,那么所有NP问题都可以用多项式解决。不过目前还没人找到多项式算法。

总的来说,判断一个NP问题是不是NP-Complete的两个方法:
找到一个NP-Complete问题,经过证明可以reduce to
你的问题,这意味着你的方法可以解决这个NP-Complete问题,那很显然,这个解决方法也是NP-Complete的。
所有的NP问题都可以reduced到你的问题

你可能感兴趣的:(脑阔痛的东西,NP问题)