Input вселенная и семейство подмножеств , скажем, . Будем считать , что подмножества можно покрыть , то есть, .U F ⊆ 2 U F U ⋃ E ∈ F E = U
Инкрементный последовательность покрытие представляет собой последовательность подмножеств , скажем, , что удовлетворяетA = { E 1 , E 2 , … , E | A | }
1) ,
2) у каждого новичка есть новый вклад, т. Е. \ Forall , ;
Проблема состоит в том, чтобы найти инкрементную покрывающую последовательность максимальной длины (т. Е. С максимальной ). Следует отметить , что последовательность максимальной длины должна в конечном итоге покрыть , то есть, .
Я попытался найти алгоритм или приблизительный алгоритм, чтобы найти самую длинную инкрементную последовательность покрытия. Мне было просто интересно, как называется этот вариант проблемы с множеством покрытий. Спасибо!
источник
Ответы:
Здесь я показываю, что проблема является 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 xi m Cj n<m U=∪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} Zi k=2n+1 Z=∪iZi Zi k Zi,l l=1..k . Для каждой переменной мы добавляем наборов в , каждый набор вида и . Для каждого предложения мы добавляем один набор в , который содержит , и для каждого элемента и для каждого элемента .xi 2k F Ai∪Zi,l Bi∪Zi,l Cj F Z xi∈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 Uk Ai∪Zi,l Bi∪Zi,l xi nk m k U
Теперь предположим, что наборов расположены в последовательной последовательности. Обратите внимание , что в большинстве устанавливает соответствующие могут быть выбраны для каждого . Таким образом, если в добавочной последовательности нет наборов предложений, можно выбрать не более , что слишком мало. Обратите внимание, что как только набор предложений выбран, мы можем выбрать не более двух наборов, соответствующих каждому , всего не более наборов. Следовательно, нам нужно выбрать как минимум наборов переменных, прежде чем будет выбран любой набор предложений. Но так как мы можем выбрать самое большее для каждого , это означает, что для каждого мы выбрали по крайней мере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)+m k+1 xi xi n(k+1) xi 2n n(k−1) k+1 xi 1 , так как . Это определяет «значение» переменной, поэтому мы можем выбирать только «истинные» предложения.k=2n+1
Обновление: изменено значение с до как указал Марцио.n 2 n + 1k n 2n+1
источник
Это проблема упаковки множеств при условии, что для решения для любого подмножества мы имеем, что в всегда есть элемент , который покрывается ровно один раз.B ⊆ A ⋃ X ∈ B XA B⊆A ⋃X∈BX
Доказательство: учитывая решение вашей проблемы, оно сразу же имеет это свойство. В самом деле, если является оптимальным решением вашей задачи, то рассмотрим подмножество этих множеств и предположим, что является последним множеством в этой последовательности, встречающимся в . Из обязательного свойства, что решение является инкрементным, следует, что покрывает элемент, который не охватывает предыдущий набор, что подразумевает указанное выше свойство.E1,…,Em E i B E iB Ei B Ei
Что касается другого направления, то это тоже легко. Начните с решения , найдите элемент, который покрыт ровно один раз, установите его как последний набор в последовательности, удалите этот набор и повторите. QED.A
Это довольно естественная проблема ....
Быстрое напоминание: в задаче упаковки наборов для данного семейства наборов найдите максимальное подмножество наборов, которое соответствует некоторому дополнительному ограничению (скажем, ни один элемент не покрывается более 10 раз и т. Д.)
источник