先决条件: NP-完全性,哈密顿循环。
哈密顿循环:无向图中G =(V,E)的循环,该循环恰好遍历每个顶点一次。
问题陈述:给定一个图G(V,E),问题在于确定该图是否包含由属于V的所有顶点组成的哈密顿环。
解释 –
问题的一个实例是为问题指定的输入。独立集问题的一个实例是图G(V,E),问题是检查该图是否可以在G中具有哈密顿环。
根据定义,由于NP-Complete问题既是NP问题又是NP-hard问题,因此证明问题为NP-Complete的陈述的证明包括两部分:
- The problem itself is in NP class.
- All other problems in NP class can be polynomial-time reducible to that.
(B is polynomial-time reducible to C is denoted as )
如果仅满足第二个条件,则该问题称为NP-Hard 。
但是不可能始终将每个NP问题都简化为另一个NP问题以显示其NP完整性。这就是为什么如果我们要表明问题是NP-完全的,我们只是表明问题在NP中,并且如果可以解决任何NP-完全的问题,那么我们就完成了,即,如果B是NP-完全,并且对于NP中的C,则C为NP-Complete。
- 汉密尔顿周期在NP中
如果NP中存在任何问题,则给定“证书” ,它是问题的解决方案和问题的实例(在这种情况下为图G和正整数k),我们将能够验证(检查给定的解是否正确)在多项式时间内的证书。
证书是在图中形成汉密尔顿循环的一系列顶点。我们可以通过验证所有顶点都属于图并且属于解决方案的每对顶点相邻来验证此解决方案。这可以在多项式时间内完成,即使用图G(V,E)的以下策略来计算O(V + E):flag=true For every pair {u, v} in the subset V’: Check that these two have an edge between them If there is no edge, set flag to false and break If flag is true: Solution is correct Else: Solution is incorrect
- 汉密尔顿周期是NP困难的
为了证明哈密顿循环是NP-Hard,我们必须将已知的NP-Hard问题简化为该问题。我们将从哈密顿路径问题简化为哈密顿循环问题。
可以将包括图G =(V,E)作为输入的哈密顿路径问题的每个实例转换为由图G’=(V’,E’)组成的哈密顿循环问题。我们将通过以下方式构造图G’:- V’ =添加原始图G的顶点V并添加一个新的顶点V new ,以使该图的所有连接的顶点都连接到该顶点。顶点数增加1, V’= V + 1 。
- E’ =添加原始图形G的边E,并在新添加的顶点和图形的原始顶点之间添加新的边。边的数量增加了顶点的数量V,即E’= E + V。
通过将新边添加到新顶点上需要O(V)时间,可以在多项式时间内获得新图G’。可以通过以下两个权利要求来证明这种减少:
- 让我们假设图G包含哈密顿路径,该路径覆盖了图的V个顶点,该顶点从一个随机顶点开始,例如V start,到Vend结束,这是因为我们将所有顶点连接到G’中的任意新顶点V new。
我们分别使用V end到V new的边和V new到V start的边将原始的Hamiltonian路径扩展到Hamiltonian循环。现在,图形G’包含一个遍历所有顶点的闭合循环。 - 我们假设图G’具有哈密顿循环,该哈密顿循环通过所有顶点,包括V new 。现在将其转换为哈密顿路径,我们删除与循环中new顶点V相对应的边。生成的路径将覆盖图形的顶点V,并将仅覆盖它们一次。
因此我们可以说,图G’包含哈密顿循环,而图G包含哈密顿路径。因此,任何哈密顿循环问题的实例都可以简化为哈密顿路径问题的实例。因此,哈密顿循环是NP-Hard 。
结论:由于汉密尔顿周期既是NP问题又是NP-Hard 。因此,这是一个NP完全问题。