Dieses Problem, das ich CO für die Spaltenbestellung nennen werde, ist NP-schwer . Hier ist eine Reduktion vom NP-harten Problem Vertex Cover (VC) darauf:
Entscheidungsproblemformen von VC und CO
Die VC-Eingangsinstanz sei (V,E,k) . Es stellt die Frage: "Ist es angesichts des Graphen ( V., E.) möglich, eine Menge von höchstens k Eckpunkten aus V. so zu wählen, dass jede Kante in E. auf mindestens einen ausgewählten Eckpunkt fällt?" Wir werden eine Instanz (A,k′) von CO konstruieren , die die Frage darstellt: "Gegeben ist die Matrix A mit Elementen in {−1,0,1}Ist es möglich, die Spalten von A so zu permutieren, dass eine 1 in mindestens k′ Zeilen vor einer -1 erscheint ? "Diese beiden Probleme werden in Form eines Entscheidungsproblems angegeben , wobei die Antwort auf jedes entweder JA oder NEIN lautet: formal Es ist nicht allzu schwer zu erkennen, dass die in der Frage des OP angegebene natürlichere Form des Optimierungsproblems in Bezug auf die Komplexität ungefähr gleichwertig ist: binäre Suche auf der Schwelle Parameter können verwendet werden, um das Optimierungsproblem unter Verwendung eines Entscheidungsproblemlösers zu lösen, während ein einzelner Aufruf eines Optimierungsproblemlösers, gefolgt von einem einzelnen Vergleich, ausreicht, um das Entscheidungsproblem zu lösen.
Erstellen einer CO-Instanz aus einer VC-Instanz
Sei n=|V|und m=|E|. Wir werden eine Matrix A mit ( n + 1 ) m + n Zeilen und n + 1 Spalten erstellen . Die oberen ( n + 1 ) m Reihen bestehen aus m Blöcken mit jeweils n + 1 Reihen, wobei jeder Block eine Kante darstellt, die abgedeckt werden muss . Der Boden n Zeilen enthalten Scheitelpunkt- "Flags", die dazu führen, dass eine Spalte (die einem Scheitelpunkt entspricht) feste Kosten verursacht, wenn sie auf der linken Seite der CO-Lösung enthalten ist (entsprechend einem Scheitelpunkt, der in der Scheitelpunktabdeckung des enthalten ist VC-Lösung).
Erstellen Sie für jeden Scheitelpunkt vich eine Spalte, in der:
- unter dem ersten ( n + 1 ) m Reihen der j - ten Blöcke von n + 1 enthält alle Zeilen ein +1 , wenn Kante ej fällt auf ist vich , und 0 sonst, und
- Die unteren n Zeilen sind alle 0 mit Ausnahme des ich ten, das -1 ist.
Erstellen Sie eine weitere "Zaun" -Spalte, die aus ( n + 1 ) m Kopien von -1 besteht, gefolgt von n Kopien von +1.
Stellen Sie schließlich den Schwellenwert k' für die konstruierte CO-Instanz ein: ( n + 1 ) m + n - k . Mit anderen Worten, wir erlauben höchstens k Zeilen, in denen ein -1 vor einem +1 erscheint. Nennen wir diese Anzahl verletzender Zeilen die "Kosten" einer CO-Lösung.
Beweis
Die Entsprechung zwischen einer Lösung für die CO-Instanz und einer Menge von Scheitelpunkten in der ursprünglichen VC-Instanz lautet: Jede Spalte links vom Zaun entspricht einem Scheitelpunkt, der sich in der Menge befindet, und jede Spalte rechts vom Zaun entspricht ein Scheitelpunkt, der nicht ist.
Intuitiv erzwingen die -1s oben in der "Zaun" -Spalte die Auswahl einer Teilmenge von Spalten, die links davon platziert werden sollen und zusammen +1s in all diesen Positionen enthalten - entsprechend einer Teilmenge von Eckpunkten, die auf jede einfallen Kante. Jede dieser Spalten, die links vom "Zaun" angezeigt wird, hat eine -1 in einer bestimmten Zeile irgendwo in den unteren n Zeilen, was Kosten von 1 verursacht. Die +1 am unteren Rand des "Zauns" stellen sicher, dass für alle rechts angeordneten Säulen keine derartigen Kosten anfallen.
Es ist klar, dass eine VC-Lösung, die höchstens k Eckpunkte verwendet, eine Lösung für die konstruierte CO-Instanz mit höchstens k Kosten ergibt : Ordnen Sie einfach die Spalten, die den Eckpunkten in der Scheitelpunktabdeckung entsprechen, willkürlich an, gefolgt von der Zaunsäule, gefolgt von allen verbleibenden Spalten in beliebiger Reihenfolge .
Es bleibt zu zeigen, dass eine Lösung für die CO-Instanz mit Kosten von höchstens k einer Scheitelpunktabdeckung mit höchstens k Scheitelpunkten entspricht.
Nehmen wir im Gegenteil an, es gibt eine Lösung für die CO-Instanz mit höchstens k Kosten , die eine Zeile in den oberen ( n + 1 ) m Zeilen mit einem -1 vor einem +1 belässt . Diese Zeile gehört zu einem Block von ( n + 1 ) Zeilen, die einer bestimmten Kante u v . Jede Zeile in diesem Block in der ursprünglichen Instanz EIN ist konstruktionsbedingt identisch. Das Permutieren von Spalten kann diese Zeilen ändern, hat jedoch keinen Einfluss auf die Tatsache, dass sie identisch sind. Somit hat jede dieser n + 1 identischen Zeilen ein -1 vor einem +1 in der Lösung, was Kosten von mindestens impliziertn + 1 . Aberk≤n<n+1 : Widerspruch.
Da jeder der m Zeilenblöcke in den oberen (n+1)m Zeilen eine +1 vor einer -1 hat, wird jede der entsprechenden Kanten von einem Scheitelpunkt abgedeckt, der einer Spalte links vom Zaun entspricht bildet diese Teilmenge von Eckpunkten eine Eckpunktabdeckung. Da keine der oberen (n+1)m Reihen eine -1 vor einer +1 hat, ist der einzige Ort, an dem Kosten in der Lösung anfallen können, in den unteren n Reihen von Spalten links vom Zaun. Jede solche Spalte hat genau 1 gekostet. Wenn also die Kosten höchstens k , müssen höchstens ksolche Spalten und damit höchstens k Eckpunkte in der Abdeckung.
Schließlich ist klar, dass die CO-Instanz in Polynomzeit aus der VC-Instanz konstruiert werden kann, was bedeutet, dass, wenn ein Polynomzeitalgorithmus zum Lösen von CO vorhanden wäre, jede VC-Instanz auch in Polynomzeit gelöst werden könnte, indem zuerst eine CO-Instanz wie beschrieben konstruiert wird oben und dann lösen. Da VC NP-hart ist, ist es auch CO.