先决条件: NP-完全性,独立集。
图G = (V, E)的独立集S是一组顶点,使得 S 中没有两个顶点彼此相邻。它由不相邻的顶点组成。
问题:给定一个图 G(V, E) 和一个整数 k,问题是确定该图是否包含一组大小 >=k 的独立顶点。
解释:
问题的一个实例是为问题指定的输入。独立集问题的一个实例是图 G(V, E) 和一个正整数 k,问题是检查 G 中是否存在大小为 k 的独立集。 由于 NP-Complete 问题,根据定义,是一个既是 NP 又是 NP-hard 的问题,证明一个问题是 NP-Complete 的证明由两部分组成:
- 问题本身在 NP 类中。
- NP 类中的所有其他问题都可以在多项式时间内简化为该问题。
(B 是多项式时间可归约到 C 表示为 )
如果仅满足第二个条件,则该问题称为NP-Hard 。
但是不可能将每个 NP 问题都化简为另一个 NP 问题以始终显示其 NP-Completeness。这就是为什么如果我们想证明一个问题是 NP-Complete,我们只表明该问题在 NP 中,并且任何 NP-Complete 问题都可以简化为它,那么我们就完成了,即如果 B 是 NP-Complete 并且对于 NP 中的 C,则 C 是 NP-Complete。
- 独立集是 NP
如果任何问题在 NP 中,那么,给定一个“证书”,它是问题的解决方案和问题的一个实例(在这种情况下是一个图 G 和一个正整数 k),我们将能够验证(检查给出的解决方案是否正确)多项式时间内的证书。
证书是顶点的子集V’,它包括属于独立集合的顶点。我们可以通过检查属于解决方案的每对顶点是否不相邻来验证该解决方案,只需验证它们彼此不共享边。这可以在多项式时间内完成,即 O(V + E) 使用图 G(V, E) 的以下策略:flag=true For every pair {u, v} in the subset V’: Check that these two don’t have an edge between them If there is an edge, set flag to false and break If flag is true: Solution is correct Else: Solution is incorrect
- 独立集是 NP-Hard。
为了证明独立集问题是 NP-Hard 问题,我们将从一个已知的 NP-Hard 问题简化为这个问题。我们将进行归约,从中可以将集团问题归约到独立集问题。
由图 G (V, E) 和整数 k 组成的团问题的每个实例都可以转换为独立集问题所需的图 G’ (V’, E’) 和 k’。我们将按以下方式构建图 G’:V’ = V i.e. all the vertices of graph G are a part of the graph G’
E’ = complement of the edges E, i.e. the edges not present in the original graph G.图 G’ 是 G 的互补图。计算互补图 G’ 所需的时间需要遍历所有顶点和边。其时间复杂度为 O (V+E)。
我们现在将证明计算独立集的问题确实归结为计算集团。归约可以通过以下两个命题来证明:- 让我们假设图 G 包含一个大小为 k 的团。 clique 的存在意味着 G 中有 k 个顶点,其中每个顶点通过一条边与其余顶点连接。这进一步表明,由于这些边包含在 G 中,因此它们不能出现在 G’ 中。结果,这 k 个顶点在 G’ 中不相邻,因此形成大小为 k 的独立集。
- 我们假设互补图 G’ 有一组独立的大小为 k’ 的顶点。这些顶点都不与任何其他顶点共享一条边。当我们对图进行补充以获得 G 时,这 k 个顶点将共享一条边,因此彼此相邻。因此,图 G 将有一个大小为 k 的团。
因此,如果 G’(补图)中存在大小为 k 的团,我们可以说图 G 中存在大小为 k 的独立集合。因此,独立集问题的任何实例都可以简化为集团问题的实例。因此,独立集是NP-Hard。
结论:
由于独立集问题既是 NP 问题又是 NP-Hard 问题,因此它是一个 NP-完全问题。
如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程和学生竞争性编程现场课程。