Hier zeige ich, dass das Problem NP-vollständig ist.
Wir konvertieren einen CNF wie folgt in eine Instanz Ihres Problems. Angenommen, die Variablen des CNF sind und die Klauseln sind , wobei . Es sei wobei alle Mengen in der Vereinigung vollständig disjunkt sind. Tatsächlich ist und , während eine beliebige Menge von Kardinalitäten . bezeichne auch und für jedes eine wachsende Familie der Länge darin fest, die mit für bezeichnet istx 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 xichm Cjn < mU= ∪ich(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 . Für jede Variable addieren wir Mengen zu , jede Menge der Form und . Für jede Klausel fügen wir eine Menge zu , die enthält , und für jedes Element und für jeden Element .xi2kFAi∪Zi,lBi∪Zi,lCjFZxi∈Cj{ai,j}x¯i∈Cj{bi,j}
Angenommen, die Formel ist erfüllbar, und Sie legen eine erfüllende Zuordnung fest. Wählen Sie dann die Mengen der Form oder , je nachdem, ob wahr ist oder nicht. Dies sind inkrementelle Mengen. Fügen Sie nun die Mengen hinzu, die den Klauseln entsprechen. Diese vergrößern sich auch immer weiter, da die Klauseln befriedigend sind. Schließlich können wir noch weitere Mengen hinzufügen (eine für jede Variable), damit die Sequenz abdeckt .kAi∪Zi,lBi∪Zi,lxinkmkU
Nehmen wir nun an, dass Mengen in einer inkrementellen Reihenfolge gesetzt werden. Beachten Sie, dass höchstens Mengen, die entsprechen, für jedes ausgewählt werden können . Wenn also in der inkrementellen Sequenz keine Klauselsätze vorhanden sind, kann höchstens ausgewählt werden, was zu wenig ist. Beachten Sie, dass wir, sobald eine Klauselmenge ausgewählt ist, höchstens zwei Mengen entsprechend jedem auswählen können , insgesamt höchstens Mengen. Daher müssen wir mindestens Variablensätze auswählen, bevor ein Satz von Klauseln ausgewählt wird. Aber da wir höchstens für jedes x i auswählen könnenk + 1 x i x i n ( k + 1 ) x i 2 n n ( k - 1 ) k + 1n(k+1)+mk+1xixin(k+1)xi2nn(k−1)k+1xiDies bedeutet, dass wir für jedes mindestens , als k = 2 n + 1 . Dies bestimmt den "Wert" der Variablen, daher können wir nur "wahre" Klauseln auswählen.1k=2n+1
Update: Der Wert von von n auf 2 n + 1 geändert, wie von Marzio herausgestellt.kn2n+1