8.14. 证明如下问题是NP完全的:给定一个无向图G = (V, E)和整数k,求G中一个规模为k的团以及一个规模为k的独立集
【证明】(算法导论34.5.1)
(1)团:顶点子集V'⊆V,其中每一对定点之间都由E中的一条边来连接,即团是G的完全子图。
对于一个给定的图G = (V, E),团中顶点集V',对于任意一对顶点u, v∈V',检查边(u, v)是否属于E,就可以在多项式时间确定V'是不是团。
把3-SAT归约到团,设φ= C1∧C2∧…Ck是3-CNF形式中一个具有k个子句的布尔公式。每个子句Cr中恰有3个不同的文字l1r,l2r,l3r。构造一个图G使得当且仅当G中包含一个规模为k的团时,φ可满足。
按照以下要求构造图G:对φ中的每个子句Cr=l1r∨l2r∨l3r,我们把三个顶点v1r,v2r,v3r组成的三元组放入V中。如果下列两个条件同时满足,就用一条边连接顶点vir,vjs: 1) vir,vjs处于不同的三元组中,即r≠s; 2) 它们的相应文字是一致的,即lir 不是ljs 的非。
下面证明构造的图G满足要求。首先,假定φ有一个可满足性赋值,那么每个字句Cr至少包含一个文字lir,将此文字赋值为1,并且把每个这样的文字对应于一个顶点vir。从上述的每个子句中挑选出的一个赋值为真的文字就得到对应的k个顶点,记这k个顶点构成的集合为V'。V'中任意两点间都有边,这是因为根据构造G的第一个条件,V'中的每个顶点都选自不同的子句。所以V'构成G的一个规模为k的团。
反之,如果G中有规模为k的团V' 。构造G的条件1),V'中顶点对应的文字都不在同一个子句中,所以V'中顶点恰好包含了k个子句。把V'中顶点所对应的文字赋值为真,这是可以做到的,因为构造图G的条件2),所有有边相连的两个顶点相应的文字是一致的,可以同时赋值为真。这样就找到了使φ满足的一组赋值条件,所以φ可满足。
综上,当且仅当G中包含一个规模为k的团时,φ可满足。也就是把3-SAT问题归约到了团问题。
(2)独立集:根据图论中的定理:图G中存在规模为k的团当且仅当G中存在规模为k的独立集。独立集问题也是NP完全问题。