📜  半团NP完全问题

📅  最后修改于: 2021-09-28 11:01:23             🧑  作者: Mango

图中的半团是一组 n/2 个顶点,使得每个顶点与其他每个顶点共享一条边,即该图的 k = n/2 个顶点形成一个完整的图。

问题 –给定一个图 G(V,E) ,问题是确定该图是否包含大小至少为 k = |V/2| 的团。

解释-
问题的一个实例是为问题指定的输入。 Half-Clique 问题的一个实例是图 G (V, E) 和一个正整数 k,问题是检查大小 k = |V/2| 的团是否存在存在于 G 中。 由于一个 NP 完全问题,根据定义,是一个既在 NP 中又在 NP 中的问题,所以问题是 NP 完全问题的证明由两部分组成:

1. Half – Clique 问题在 NP 中:
如果任何问题在 NP 中,那么,给定一个“证书”,它是问题的解决方案和问题的一个实例(在这种情况下是一个图 G 和一个正整数 k),我们将能够验证(检查给出的解决方案是否正确)多项式时间内的证书。
证书是顶点的子集V’,它包括属于半集团的顶点。我们可以通过检查属于解决方案的每对顶点是否相邻来验证该解决方案,只需验证它们是否共享一条边即可。这可以在多项式时间内完成,即 O(V + E) 使用图 G(V,E) 的以下策略:

flag=true
Count the number of vertices in the subset V' 
If not equal to V/2 :
    flag = false
Else : 
    For every pair {u,v} in the subset V’:
        Check that these two vertices {u,v} share an edge
        If there is no edge ,set flag to false and break
If flag is true:
    Solution is correct
Else:
    Solution is incorrect 

2. Half-Clique 问题是 NP Hard :
为了证明半团问题是 NP Hard,我们借助一个已经是 NP Hard 的问题,证明这个问题可以简化为半团问题。为此,我们考虑 Clique 问题,它是 NP Complete(因此是 NP Hard)。
由图 G (V,E) 和整数 k 组成的团问题的每个实例都可以转换为半团问题所需的图 G’ (V’,E’) 和 k’。可以做出的推论是,图 G’ 将有一个大小为 n/2 的团,如果图 G 有一个大小为 k 的团。令 m 为图 G 中的节点数。我们现在将证明计算团的问题确实归结为独立集的计算。归约可以通过以下两个命题来证明:

  • 如果 k > = m/2,那么对于常数 t,我们添加 t 个节点,每个节点的度数为 0,用于图 G’。图 G’ 的节点总数等于 n = m + t,即图 G 的所有节点与额外节点的总和,使得它等于 2k,对于任意 k 值.现在 k = n/2。这可以通过取 t = 2k -m 来完成。那么,图 G 有一个大小为 k 的团当且仅当图 G’ 有一个大小为 k 的团。

  • 如果 k < m/2 ,那么我们添加 t 个额外的节点来创建图 G’。边也可以从每个新节点添加到图中的每个其他节点。因此,G 中的任何 k-clique,对于 k 的任意值,都与 t 个新节点组合以形成 G’ 中的 (k+t)-clique,因为在每对顶点之间添加了边。 G’ 中 k+t 大小的团必须至少包含 k 个旧节点,它们在图 G 中形成团。因此,选择 t 的值使得 k+t = (m+t)/2,或t = m-2k,这使得 G’ 中的团大小正好等于 n/2。