Angenommen, zwei Paare und sind nicht austauschbar, wenn sie in der sortierten Liste in einer beliebigen Reihenfolge platziert werden können, ohne eine der beiden auszutauschen. Dies gilt , wenn entweder ( a 1 ≤ a 2 ∧ b 1 ≥ b 2 ) oder ( a 2 ≤ a 1 ∧ b 2 ≥ b 1 ) . Beachten Sie, dass und genau dann nicht Swap-kompatibel sind, wenn sie mit zwei Swaps kompatibel sindp 2 = ( a 2 , b 2 ) p 1 p 2p1=(a1,b1)p2=(a2,b2)(a1≤a2∧b1≥b2)(a2≤a1∧b2≥b1)p1p2(da die Teilordnung definiert erfüllen , in denen * die Swap - Operation bezeichnet). Schließlich p 1 und p 2 sind eine-Swap - kompatibel , wenn sie mit genau einer von ihnen tauschte in beliebiger Reihenfolge in der sortierten Liste gesetzt werden. Dies trifft zu, wenn p ∗ 1 und p 2 nicht Swap-kompatibel sind. In den übrigen Fällen sind p 1 und p 2p1⪯p2≡p∗2⪯p∗1∗p1p2p∗1p2p1p2 sind einfach inkompatibel: Sie können die Bestellbedingung unabhängig von ihrem Swap-Status nicht erfüllen.
Das Problem kann nun wie folgt gelöst werden. Testen Sie jedes Paar. Wenn ein Paar nicht kompatibel ist, gibt es keine Lösung und wir können eine Ausnahme auslösen. Betrachten Sie andernfalls das Diagramm mit Knoten, die den ursprünglichen Paaren entsprechen, und Kanten zwischen den Knotenpaaren, die nicht mit einem Swap kompatibel sind. Jedes derartige Knotenpaar muss in einer ordnungsgemäß sortierten Liste den gleichen Auslagerungsstatus haben, und daher müssen alle Knoten in jeder verbundenen Komponente des Diagramms den gleichen Auslagerungsstatus haben. Wir müssen feststellen, ob diese komponentenweiten Auslagerungszustände konsistent zugewiesen werden können. Testen Sie alle Knotenpaare in jeder verbundenen Komponente. Wenn ein Paar nicht No-Swap-kompatibel ist, gibt es keine Lösung, und wir können eine Ausnahme auslösen. Testen Sie nun alle verbundenen Komponentenpaare (dh für die Komponenten C1und , testet alle Paare von Knoten p 1 ∈ C 1 und p 2 ∈ C 2 ). Wir wissen, dass jedes Komponentenpaar mindestens One-Swap-kompatibel ist, aber einige Paare können auch No-Swap-kompatibel sein (da jedes Knotenpaar, das nicht durch eine Kante verbunden ist, mindestens One-Swap-kompatibel ist und auch No-Swap-kompatibel sein kann). Swap-kompatibel). Betrachten Sie einen reduzierten Graphen mit Knoten, die den verbundenen Komponenten entsprechen, und eine Kante zwischen zwei Knoten, wenn die entsprechenden Komponenten nicht No-Swap-kompatibel sind. Es gibt eine Lösung für das ursprüngliche Problem, wenn dieses Diagramm 2- farbig ist. Wenn es keine 2 gibtC2p1∈C1p2∈C222-Farben gibt es keine Lösung, und wir können eine Ausnahme auslösen. Wenn es einen gibt, tauschen Sie alle Knoten in allen Komponenten einer Farbe aus. Wir haben jetzt die Garantie, dass zwei beliebige Knoten No-Swap-kompatibel sind, und können die Liste der Paare anhand der definierten Teilreihenfolge ordnungsgemäß sortieren.
Jeder Schritt im Algorithmus und damit der gesamte Algorithmus kann in -Zeit ausgeführt werden.O(N2)
UPDATE: Eine viel elegantere Konstruktion ist die folgende. Wenn ein Paar von Paaren nicht No-Swap-kompatibel ist, verbinden Sie die entsprechenden Knoten mit einer Kante (zwingen Sie sie, unterschiedliche Farben in einer beliebigen Zweifarbigkeit zu haben). Wenn ein Paar von Paaren nicht mit einem Tausch kompatibel ist, verbinden Sie die entsprechenden Knoten mit einer Kette der Länge 2 (wobei erzwungen wird, dass sie in jeder Zweifarbigkeit dieselbe Farbe haben). Es gibt nur dann eine Lösung, wenn das resultierende Diagramm zweifarbig ist. Um eine Lösung aus einer blau-roten Färbung des Diagramms zu erstellen, tauschen Sie nur die Paare aus, deren entsprechende Knoten blau sind, und sortieren Sie dann die resultierende Liste.