Ich eine Menge , eine ganze Zahl und nicht negative ganze Zahlen a_ {ij} . Mein Problem besteht darin, s disjunkte Teilmengen S_j von \ {1, \ ldots, k \} so zu finden, dass:s ⩽ k a i j s S j { 1 , … , k }
- ; und
- für alle und .
Wie kann man dieses Problem lösen? Ist es schwierig, eine praktikable Lösung zu finden?
Ich denke, es ist nicht einfach, das Problem zu lösen, weil ich eine Prozedur ausprobiert habe, die mit j \ in \ {1, \ ldots, n \} beginnt und bis zur Nummer zuweist von zugewiesen größer als für einige zugeordnet. Dies ist jedoch nicht korrekt, da ich von einigen i übrig bleiben könnte, die keinem j zugewiesen werden könnten (aufgrund ihres das nicht erfüllt werden konnte).
Die Brute-Force-Methode, bei der ich alle Teilmengen von A generieren und jede testen muss, funktioniert für mich ( ), ist aber sehr ineffizient.
Antworten:
Dieses Problem ist durch Reduzierung von Vertex Cover NP-schwer.
Im Vertex Cover-Problem erhalten wir einen Graphen und eine Zahl , und unsere Aufgabe besteht darin, zu bestimmen, ob es eine Teilmenge von höchstens Eckpunkten von so dass jede Kante in einfällt auf zumindest einen Scheitelpunkt in . (Entsprechend: Ist es möglich, jede Kante in zu töten, indem höchstens Eckpunkte gelöscht werden ?)r U r V E U G rG=(V,E) r U r V E U G r
Zuerst Partitionieren in disjunkte Untermengen entspricht , jedes Element in der Zuweisung genau einer der möglichen Etiketten. Die Grundidee der Reduktion besteht darin, für jeden Scheitelpunkt in eine Beschriftung zu erstellen und jeder Kante nur eine der beiden Beschriftungen zu "erlauben", die ihren Endpunkten entsprechen, im folgenden Sinne: Zuweisen einer Kante eine entsprechende Mit label wird keine (echte) Einschränkung eingeführt, welche anderen Kanten derselben Beschriftung zugewiesen werden können, während durch Zuweisen einer Kante zu einer nicht entsprechenden Beschriftung verhindert wird, dass einer anderen Kante dieselbe Beschriftung zugewiesen wird - was natürlich dazu führt, dass die Nummer nach oben verschoben wird von verschiedenen Etiketten erforderlich.s A s S j v j V.A s A s Sj vj V
So erstellen Sie eine Instanz Ihres Problems aus einer Instanz von Vertex Cover:( G , r )(A,a,s) (G,r)
WennS j v j U v b v c ∈ E ( b , c ) ∈ A S b S c s a i j | E |(G,r) eine YES-Instanz von Vertex Cover ist, ist es leicht zu erkennen, dass die gerade konstruierte Instanz Ihres Problems auch eine YES-Instanz ist: einfach die Bezeichnungen , die den Vertices in einer beliebigen Lösung und weisen Sie für jede Kante das entsprechende Element je nachdem, welche der Bezeichnungen oder ausgewählt wurde (wählen Sie willkürlich, wenn beide Bezeichnungen ausgewählt wurden). Diese Lösung verwendet Teilmengen und ist gültig, da nur die entsprechenden für die Entsprechung geltenSj vj U vbvc∈E (b,c)∈A Sb Sc s aij Labels, die den (Nicht-) Effekt haben, mehr alsKanten, denen das gleiche Etikett zugewiesen wurde.|E|
Es bleibt zu zeigen, dass eine YES-Instanz Ihres Problems impliziert, dass das Original( G , r ) Y X ( i , j ) S m m ∉ { i , j } U Y.X=(A,a,s) (G,r) eine YES-Instanz von Vertex Cover ist. Dies ist etwas komplizierter, da eine gültige Lösung bis im Allgemeinen einer Kante eine nicht entsprechende Bezeichnung zuweisen kann , dh , was bedeutet, dass wir dies nicht können notwendigerweise eine gültige Scheitelpunktabdeckung aus einer gültigen Lösung "ablesen" .Y X (i,j) Sm m∉{i,j} U Y
Das Zuweisen eines nicht entsprechenden Etiketts ist jedoch mit hohen Kosten verbunden, die die Struktur der Lösung stark einschränken: immer dann, wenn eine Kante vorhanden ist S m m ∉ { i , j } a ( i , j ) , m = 1 Y ( i , j ) ↦ S m Y '(i,j) solches Etikett zugewiesen wird , ist die Tatsache dass sicherstellt, dass es die einzige Kante sein muss, der diese Bezeichnung zugewiesen wurde. In jeder Lösung die eine solche nicht entsprechend markierte Kante , könnten wir also eine alternative Lösung wie folgt konstruieren :Sm m∉{i,j} a(i,j),m=1 Y (i,j)↦Sm Y′
s - 1 sSz s−1 s |E| Y′′
Diese Konstruktion ist eindeutig eine Polynomzeit, daher ist Ihr Problem NP-schwer.
quelle