Das eigentliche Problem, mit dem ich konfrontiert bin, ist das Folgende.
INSTANZ : Ich habe Mengen und und Matrix für alle und .K : = { 1 , … , k } a i j > 0 i ∈ K j ∈ N.
FRAGE : Ich muss eine Teilmenge von einer möglichst kleinen Größe finden und die Menge indisjunkte Mengen deren Vereinigung gleich so dass ich für alle für alle habe i \ in K_j .
Beispiel:
Gegeben ist und die Matrix
In diesem Beispiel sollte gleich und und .
Ich habe zwei Fakten bemerkt:
- Wenn in N etwas j \ existiert, so dass für alle dann ist und ; und
- Wenn es so dass dann ist .
Meine Frage : Ist es möglich, dieses Optimierungsproblem in Polynomzeit zu lösen (zumindest mit einem Approximationsalgorithmus)?
Das erste, was ich versuchte, war, es in ein bekanntes Problem umzuwandeln und dann einen bekannten Algorithmus dafür anzuwenden. Ich habe darüber nachgedacht, es in ein Set-Cover oder eine Müllverpackung umzuwandeln, aber ich bin gescheitert und finde das auch nicht interessant.
Das Problem habe ich versucht zu formulieren.
Ich habe Sätze und und Matrix für alle und . Außerdem habe ich disjunkte Mengen für jedes (ich habe als Eingaben hinzugefügt, weil ich es nicht anders formulieren konnte.)
Schließlich erhalte ich Folgendes:
Vielen Dank.
quelle
Antworten:
Auch die Entscheidung Version dieses Problem, bei dem wir versuchen , einfach zu bestimmen , ob es existiert jede machbare Lösung ist NP-schwer durch Reduktion von Exact - Abdeckung . (Die Optimierungsversion, in der wir nach einer praktikablen Lösung suchen, die minimiert , ist eindeutig mindestens so schwierig.)|S|
Die einzeilige einspaltige Matrix mit dem Wert 0,5 ist ein Beispiel für eine Eingabe, für die es keine praktikable Lösung gibt. Hier ist ein anderes:
Erstellen eines Gadgets "höchstens eines auswählen"
Erstens, dass Hinweis , wenn der Maximalwert in irgendeiner Zeile ist , und diese Reihe enthält (mindestens) zwei Kopien von , sagen sich bei und , , dann kann nicht sowohl als auch , da dann einer der beiden folgenden Fälle auftreten muss, die jeweils zu einem Widerspruch führen:ai x>0 x aij aij′ j′≠j S j j′
Daher können wir einen Maximalwert auswählen, der sicher höher ist als die Summe aller nicht maximalen Werte in der Zeile, und Kopien dieses Maximalwerts verwenden, um zu erzwingen, dass höchstens eine dieser Spalten in .S
Wir können diese Einschränkung "höchstens eine auswählen" in eine Einschränkung "genau eine auswählen" umwandeln, indem wir einen positiven Wert kleiner als 1 als "nicht maximalen" Wert verwenden. Das liegt daran, dass jede Zeile zu einem Teil der gehört , und wenn ist, wird die RHS der Ungleichung für Zeile negativ , sodass es keine Möglichkeit gibt, sie zu erfüllen: also muss mindestens ein in gezwungen werden, so dass .i Kj aij<1 i j S aij≥1
Um sicherzustellen, dass genau eine der Spalten in einer Menge in gezwungen wird , erstellen Sie eine Zeile wie folgt:T⊆N S ai
Somit wird die Reduktion von Exact Abdeckung ist einfach: es eine Zeile für jedes Element ist, eine Spalte für jeden Satz, mit , wenn Satz enthält Element und sonst. Beide Richtungen ("Die Eingabe-EC-Instanz ist eine YES-Instanz konstruierte Instanz des OP-Problems eine YES-Instanz ist" und "Die konstruierte Instanz des OP-Problems ist eine YES-Instanz Eingabe-EC-Instanz eine YES-Instanz ist") sind sauber.aij=n+1 j i aij=0.5 ⟹ ⟹
quelle