Здесь я показываю, что проблема является NP-полной.
Мы конвертируем CNF в экземпляр вашей проблемы следующим образом. Предположим, что переменными CNF являются , а предложения - , где . Пусть где все множества в объединении полностью не пересекаются. Фактически, и , в то время как - это любое множество элементов . Также обозначим и зафиксируем для каждого растущее семейство длины внутри него, обозначаемое дляx i m C j n < m U = ∪ i ( A i ∪ B i ∪ Z i ) A i = { a i , j ∣ x i ∈ C j } ∪ { a i , 0 } B i = { b i , j ∣ x i ∈ C j } ∪n xim Cjn<mU=∪i(Ai∪Bi∪Zi)Ai={ai,j∣xi∈Cj}∪{ai,0}Z i k = 2 n + 1 Z = ∪ i Z i Z i k Z i , l l = 1 .. k x i 2 k F A i ∪ Z i , l B i ∪ Z i , l C j F Z x i ∈ C j { aBi={bi,j∣xi∈Cj}∪{bi,0}Zik=2n+1Z=∪iZiZikZi,ll=1..k . Для каждой переменной мы добавляем наборов в , каждый набор вида и . Для каждого предложения мы добавляем один набор в , который содержит , и для каждого элемента и для каждого элемента .xi2kFAi∪Zi,lBi∪Zi,lCjFZxi∈Cj ˉ х я ∈ С J { Ь I , J }{ai,j}x¯i∈Cj{bi,j}
Предположим, что формула выполнима и исправим удовлетворяющее присваивание. Затем выберите наборов в форме или , в зависимости от того, является ли истинным или нет. Это инкрементальных множеств. Теперь добавьте наборов, соответствующих пунктам. Они также продолжают увеличивать размер, поскольку пункты являются выполнимыми. Наконец, мы можем даже добавить больше наборов ( по одному для каждой переменной) , чтобы сделать последовательность крышку .A i ∪ Z i , l B i ∪ Z i , l x i n k m k UkAi∪Zi,lBi∪Zi,lxinkmkU
Теперь предположим, что наборов расположены в последовательной последовательности. Обратите внимание , что в большинстве устанавливает соответствующие могут быть выбраны для каждого . Таким образом, если в добавочной последовательности нет наборов предложений, можно выбрать не более , что слишком мало. Обратите внимание, что как только набор предложений выбран, мы можем выбрать не более двух наборов, соответствующих каждому , всего не более наборов. Следовательно, нам нужно выбрать как минимум наборов переменных, прежде чем будет выбран любой набор предложений. Но так как мы можем выбрать самое большее для каждого , это означает, что для каждого мы выбрали по крайней мереk + 1 x i x i n ( k + 1 ) x i 2 n n ( k - 1 ) k + 1 x i 1 k = 2 n + 1n(k+1)+mk+1xixin(k+1)xi2nn(k−1)k+1xi1 , так как . Это определяет «значение» переменной, поэтому мы можем выбирать только «истинные» предложения.k=2n+1
Обновление: изменено значение с до как указал Марцио.n 2 n + 1kn2n+1