NPC问题:顶点覆盖是NP完全的

只需证明 \(3SAT \le _p VC\)

证明思路

任给3SAT的一个实例I(I由变元\(x_1,...x_n\)的3元合取范式\(F=\and_{1\le j\le m} C_j\)构成)

需要构造一个VC的实例\(f(I)\)(由一个无向图\(G=<V,E>\)和非负整数K构成)

要求:3元合取范式F是可满足的 当且仅当 G有顶点数不超过K的顶点覆盖

证明构造

第一部分,构造两个顶点\(x_1\)\(\overline x_i\),以及连接他们的边\((x_i,\overline x_i)\)

从而任意顶点覆盖,在\(x_1\)\(\overline x_i\)之间必须选择一个进行覆盖

第二部分,表示F的m个简单析取式,对于每一个简单析取式\(C_j = z_{j1}\or z_{j2}\or z_{j3}\),构造三角形,三个顶点分别记为\([z'_{j1,1}],[z'_{j2,2}],[z'_{j3,3}]\)

因为这三个点两两相连,构成了三角形,所以任何顶点覆盖必须在这三个顶点中取两个

从上面两部分看,第一部分一共n个点,至少取一个;第二部分一共3m个点,至少取2m个,所以V'至少有\(n+2m\)个顶点。令\(K=n+2m\)

所以第三部分的选择要求是,3元合取式可满足\(\iff\)G有顶点数不超过\(n+2m\)的顶点覆盖

第三部分,连接\([z'_{jk,k}]\)\(z'_{jk}\)。其中\(z'_{jk}\)定义如下

  • \(z_{jk}=x_i\rightarrow z'_{jk}=x_i\)

  • \(z_{jk}=\neg x_i\rightarrow z'_{jk}=\overline x_i\)

构造正确性

设t是F的成真赋值

对于每一个i,若\(t(x_i)=1\),则取顶点\(x_i\);若\(t(x_i)=0\),则取顶点\(\overline x_i\)。这样,这n个点覆盖了第一部分

对于每一个j(\(1\le j\le m\)),\(C_j\)中至少有一个文字\(z_{jk}=1\),第三部分中其引出的边对应的顶点在第一部分中已经被取

比如\(z_{jk}=x_i\),那么说明\(x_i=1\),第一部分已经取了;如果\(z_{jk}=\neg x_i\),那么连接的是\(\overline x_i\)\(z_{jk}=1\)意味着\(x_i=0\),即\(\overline x_i\)被取

选择剩余的两个顶点即可,这样n+2m个点符合顶点覆盖要求


反之,设\(V'\subset V\)是G的一个顶点覆盖,且\(|V'|\le K = n+2m\)

显然必然是n个属于第一部分,2m个属于第二部分(这是满足顶点覆盖的基本要求)

选择和上面相反的策略,将第二部分没有取的一个点,连接的如果是\(x_i\),则\(x_i=1\);否则\(x_i=0\)。此时三元组中必有至少一项为1,符合3SAT条件

posted @ 2022-05-26 20:31  无证_骑士  阅读(482)  评论(0)    收藏  举报
页脚HTML页码