NPC问题:恰好覆盖问题是NP完全的

恰好覆盖定义:类似于集合的划分,互不相交子集的并集为全集

恰好覆盖问题:给定有穷集\(A=\{a_1,a_2...a_n \}\)和A的子集的集合\(W=\{S_1,...S_m \}\),问是否存在子集\(U\subset W\)使得U中的子集都是不相交的且它们的并集等于A?

例题3:恰好覆盖是NP完全的

显然 恰好覆盖$\in $NP 。

下证 \(SAT \in _p\)恰好覆盖

证明思路

任给变元\(x_1,...x_n\)的合取范式\(F=C_1\and C_2...\and C_n\),其中\(C_j = z_{j1}\or...z_{js_j}\) 。需要构造有穷集AA的子集的集合W ,使得F是可满足的当且仅当W含有A的恰好覆盖

采用构件设计法

\(p_{jt}\)表示\(C_j\)中的文字\(z_{jt}\)

证明构造

对每一个变元\(x_i\),有两个子集\(T_i^T\)\(T_i^F\)

  • \(T_i^T\)包含\(\neg x_i\)以及\(\neg x_i\)在所有简单析取式中的出现
  • \(T_i^F\)包含$ x_i\(以及\)x_i$在所有简单析取式中的出现

其他的子集中都不包含\(x_i\)。因此任何恰好覆盖U必须恰好包含\(T_i^T\)\(T_i^F\)中的一个,这对应于对\(x_i\)的赋值。如果\(t(x_i)=1\),当且仅当U包含\(T_i^T\)

对每一个\(C_j\),有\(s_j\)个子集:\(C_{jt}=\{C_j,p_{jt} \},1\leq t\leq s_j\)

除此之外,每一个\(p_{jt}\)构成一个单元子集\(\{p_{jt} \}\)

综上,W包含下述子集:

  1. 单元子集\(\{p_{jt} \},1\le t \le s_j,1\le j\le m\)
  2. \(T_i^T = \{x_i,p_{jt} |z_{jt}=\neg x_i,1\le t\le s_j,1\le j\le m \}\)
  3. \(T_i^F = \{x_i,p_{jt} |z_{jt}= x_i,1\le t\le s_j,1\le j\le m \}\)
  4. \(C_{jt} = \{C_j,p_{jt} \},1\le t\le s_j,1\le j\le m\)

实例如下

构造正确性

需要证明 F是可满足的 \(\iff\) W含有A的恰好覆盖

\(U\subset W\)是A的恰好覆盖,对每一个i(\(1\le i\le n\)),若\(T_i^T\in U\),则令\(t(x_i)=1\),否则\(T(x_i)=0\)

对每一个j(\(1\le j\le m\)),必有一个\(C_{jt}=\{C_j,p_{jt} \}\in U\)

\(T_i^T \in U\),则\(p_{jt}\notin T_i^T\),所以\(z_{jt}=x_i\),此时有\(t(x_i)=1\)

\(T_i^F \in U\),则\(p_{jt}\notin T_i^F\),从而\(z_{jt}=\neg x_i\),此时有\(t(x_i)=0\)

理解过程

以上面的实例图为例,如果要恰好覆盖,首先必须包含\(C_j\)这类元素,这就对应了任意j必有一个\(C_{jt}\),这样就有了\(p_{jt}\)

同理,需要恰好覆盖,所以必须包含\(x_i\)这类元素,这就对应了任意i,必须有\(T_i^T\)\(T_i^F\)

由于需要恰好覆盖,那就要求\(p_{jt}\)不会再次出现

  • \(p_{jt}=x_i\),那么只能是\(T_i^T\)加入U中,取\(t(x_i)=1\)
  • \(p_{jt}=\neg x_i\),那么只能是\(T_i^F\)加入U中,取\(t(x_i)= 0\)

只要证明这是成真赋值即可。

上述操作,保证了任意j,都有一个\(z_{jt}=1\),所以是成真赋值

反之,设F是可满足的,t是F的成真赋值。若\(t(x_i)=1\),则U包含\(T_i^T\);若\(t(x_i)=0\),则U包含\(T_i^F\)。由于t满足\(C_j\),所以必有一个\(z_{jt}\),使得\(t(x_{jt})=1\)。从而U中现有的子集中不包含\(p_{jt}\),所以可以把\(C_{jt}\)加入到U中。最后补齐所剩的\(p_{jt}\)即可。

显然这个构造可以在多项式时间内完成,所以 可满足性\(\le_p\)恰好覆盖

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