以下是对 "分团问题(Clique Problem)" 的描述:给定一个无向图 G 和一个整数 k,问是否存在一个点集 V,使得 V 中的点相互连接且 V 的大小不超过 k。下图是一个例子,其中 <B,C,D,E> 是一个满足条件的点集,因为这四个点相互连接,可以构成一个团。
首先,我们需要证明分团问题是一个 NP 问题。给定一个点集 V,只需要检查 V 中的每个点是否与其他点相连,就可以验证 V 的正确性。这个验证过程可以在多项式时间内完成,所以分团问题属于 NP 问题。
接下来,我们将 3-SAT 问题归约到分团问题,以证明分团问题是 NP 难的。首先,我们知道 3-SAT 问题的形式如下:
C = C1 ∩ C2 ∩ ... ∩ Cn
Ci = xa ∪ xb ∪ xc
给定一个 3-SAT 表达式,对于表达式中的任意两个变量 xa 和 xb,有以下规则:
- 如果 i ≠ j
- 如果 a = b,则 xa 和 xb 保持一致性。即当 xa 为真时,xb 也为真;当 xa 为假时,xb 也为假。
然后连接 xa 和 xb,这样我们就将一个 3-SAT 布尔表达式转换成了一个图。举个例子,假设一个 3-SAT 布尔表达式为:
C = (x+y+z) · (¬x+¬y+¬z) · (x+¬y+z) · (¬x+y+¬z)
根据上述规则转换成的图如下:
现在我们要证明两件事情:1)如果存在一个有解的 3-SAT 问题,且这个问题有 k 个簇(Ci),那么由它转换的图 G 可以使分团问题 <G, k> 有解。2)如果存在一个分团问题 < G, k > 有解,那么我们一定可以从 G 中转换到一个有解的 3-SAT 问题。
对于第一点,如果给定的 3-SAT 问题有解,根据 3-SAT 的定义,为了使布尔表达式为真,每个簇都必须为真,即每个簇中至少有一个变量为真。因此,我们可以在图中圈出为真的变量。对于上述例子,圈出一个解后的图如下:
根据我们转换规则,每个变量都与其他不在同一个簇且不与它矛盾的变量相连。因此,我们可以确保选出的点可以构成一个团(即相互连接)。
对于第二点,如果给定一个有解的分团问题 <G, k>,我们可以逆向应用转换规则,将 G 转换为一个布尔表达式,然后将 V 中的点对应的变量赋值为真。由于 V 中的点相互连接,根据规则,它们既不在同一个簇中也不矛盾,因此可以确保布尔表达式为真。
综上所述,我们成功地将 3-SAT 问题归约到了分团问题,证明了分团问题是 NP 完全的。