在这里,我证明问题是NP完全的。
我们将CNF转换为您的问题实例,如下所示。假设CNF的变量是x i,子句是m C j,其中n < m。让û = ∪ 我(甲我 ∪ 乙我 ∪ Ž 我),其中在联合所有组都完全不相交。事实上,甲我 = { 一个我,Ĵ | X 我 ∈ Ç Ĵ } ∪ { 一个我n xim Cjn<mU=∪i(Ai∪Bi∪Zi)和乙我 ={ b 我,Ĵ | X 我 ∈ Ç Ĵ }∪{ b 我,0 },而 ž 我是任何集基数的ķ=2Ñ+1。还分别表示ž= ∪ 我Ž 我和定为每个 ž 我长度的增加的家庭ķ里面,记 ž 我,Ai={ai,j∣xi∈Cj}∪{ai,0}Bi={bi,j∣xi∈Cj}∪{bi,0}Zik=2n+1Z=∪iZiZik对于l=1 ..k。对于每一个变量 X 我,我们添加2个ķ集来 ˚F,每组形式的阿我 ∪ Ž 我,升和乙我 ∪ Ž 我,升。对于每个子句 Ç Ĵ,我们添加一组到 ˚F,其中包含Ž,并为每 X 我 ∈ Ç Ĵ元件{一个我,Ĵ }Zi,ll=1..kxi2kFAi∪Zi,lBi∪Zi,lCjFZxi∈Cj{ai,j}并为每元件{ b 我,Ĵ }。x¯i∈Cj{bi,j}
假定该公式是可满足的,并确定了令人满意的赋值。然后挑集的形式的阿我 ∪ Ž 我,升或乙我 ∪ Ž 我,升,这取决于是否X 我是真还是假。这些是n k个增量集。现在添加与子句相对应的m套。由于这些子句是可以满足的,因此它们的大小也不断增加。最后,我们甚至可以添加ķ多套(每个变量),使该序列覆盖ü。kAi∪Zi,lBi∪Zi,lxinkmkU
现在假设将集合放在一个递增序列中。请注意,最多可以为每个x i选择对应于x i的 k + 1套。因此,如果没有子句套在增量序列,至多Ñ (ķ + 1 )可以被选择,这是太少。注意,一旦选择了子句集,我们最多可以选择与每个x i对应的最多两个集,总共最多2 个n集。因此,我们必须至少选择n(k+1)+mk+1xixin(k+1)xi2n在选择任何子句集之前,先设置 n (k − 1 )个变量集。但是,因为我们可以为每个 x i最多选择 k + 1,所以这意味着对于每个 x i我们至少选择了 1个,因为 k = 2 n + 1。这决定了变量的“值”,因此我们只能选择“ true”子句。n(k−1)k+1xi1k=2n+1
更新:的改变值从Ñ到2 Ñ + 1通过马兹奥指出。kn2n+1