如何证明问题是NP完整的?

时间:2010-11-27 22:30:51

标签: algorithm

我的调度问题。我需要证明问题是NP完整的。可以用什么方法证明NP完成?

5 个答案:

答案 0 :(得分:138)

要显示问题是NP完成,您需要:

显示它在NP

换句话说,给定一些信息C,您可以创建一个多项式时间算法V,该算法将验证每个可能的输入X是否X在您的域中或不。

实施例

证明顶点覆盖的问题(即,对于某些图G它是否有一个大小为k的顶点覆盖集, G中的边缘在封面集中至少有一个顶点?)在NP中:

  • 我们的输入X是一些图表G和一些数字k(这来自问题定义)

  • 将我们的信息C视为“尺寸为G的图k中任何可能的顶点子集”

  • 然后我们可以编写一个算法V,给定GkC,将返回该组顶点是否为顶点覆盖是G或不是,多项式时间

然后对于每个图G,如果存在一些“G大小k中可能的顶点子集”,这是一个顶点覆盖,那么G就在NP

注意我们需要在多项式时间内找到C。如果可以的话,问题将在'P。

注意对于某些V,算法G应适用于每个 C。对于每个输入,都应该存在信息,这些信息可以帮助我们验证输入是否在问题域中。也就是说,不应该存在信息不存在的输入。

证明它是NP Hard

这涉及到一个已知的NP完全问题,如SAT,布尔表达式的形式为:

  

(A或B或C)和(D或E或F)和......

表达式可以满足,就是这些布尔值存在一些设置,这使得表达式为真

然后在多项式时间内将NP完全问题减少到您的问题

也就是说,给定X的一些输入SAT(或者您正在使用的任何NP完整问题),为您的问题创建一些输入Y,以便{{1}当且仅当X出现在您的问题中时,才会出现在SAT中。函数Y必须以多项式时间运行。

在上面的示例中,输入f : X -> Y将是图Y和顶点封面G的大小。

对于完整证明,您必须同时证明:

  • k = X = {你问题中的SAT

  • 您的问题中的
  • Y => Y中的X

marcog的答案与您可以减少问题的其他几个NP完整问题相关联。

脚注:在第2步(证明它是NP-hard )中,将NP-hard(不一定是NP-complete)问题减少到当前问题就可以了,因为NP完全问题是NP难问题的一个子集(也在NP中)。

答案 1 :(得分:23)

您需要将NP-Complete问题减少到您遇到的问题。如果减少可以在多项式时间内完成,那么你已经证明你的问题是NP完全的,如果问题已经在NP中,因为:

它不比NP完全问题容易,因为它可以在多项式时间内减少到它,这使得问题NP-Hard。

有关详情,请参阅http://www.ics.uci.edu/~eppstein/161/960312.html的结尾。

答案 2 :(得分:8)

首先,你表明它完全位于NP中。

然后你发现另一个你已经知道的问题是NP完成,并说明你如何多方式地减少NP Hard问题。

答案 3 :(得分:6)

为了证明问题L是NP完全的,我们需要执行以下步骤:

  1. 证明你的问题L属于NP(即给定解决方案,你可以在多项式时间内验证它)
  2. 选择已知的NP完全问题L'
  3. 描述将L'转换为L
  4. 的算法f
  5. 证明你的算法是正确的(形式上:x∈L'当且仅当f(x)∈L时)
  6. 证明algo f以多项式时间运行

答案 4 :(得分:5)

  1. 熟悉NP完整问题的子集
  2. 证明NP硬度:将NP完整问题的任意实例减少到您的问题实例。这是馅饼中最大的一块,对NP Complete问题的熟悉程度是值得的。根据您选择的NP Complete问题,减少或多或少会很困难。
  3. 证明您的问题在NP中:设计一种算法,可以在多项式时间内验证实例是否是解决方案。