2つのペアおよびp 2 = (a 2、b 2)は、どちらもスワップせずにソート済みリスト内のいずれかの順序で配置できる場合、非スワップ互換であるとします。いずれかの場合、これは真である(1 ≤ 2 ∧ B 1 ≥ B 2)又は(2 ≤ 1件の ∧ B 2 ≥ Bp1= (a1、b1)p2= (a2、b2)(a1≤ A2∧ B1≥ B2)。そのノート P 1及び P 2があれば、無スワップ互換性があり、それらがある場合にのみ、二スワップ互換性(半順序が満足を定義するので、P 1 ⪯ P 2 ≡ P * 2 ⪯ P * 1、 *スワップ操作を示します) 。最後に、 p 1と p 2は、それらの1つだけがスワップされたソート済みリストでどちらの順序でも配置できる場合、1スワップ互換です。これは、 p ∗ 1および(a2≤ A1∧ B2≥ B1)p1p2p1⪯ P2≡ P∗2⪯ P∗1∗p1p2p∗1は非スワップ互換です。残りの場合、 p 1と p 2は単純に互換性がありません。スワップ状態に関係なく順序条件を満たすことはできません。p2p1p2
この問題は次のように解決できます。ペアのすべてのペアをテストします。いずれかのペアに互換性がない場合、解決策はなく、例外をスローできます。そうでない場合は、元のペアに対応するノードと、1スワップ互換ではないノードのペア間のエッジを持つグラフを検討してください。そのようなノードの各ペアは、適切にソートされたリストで同じスワップ状態を持つ必要があります。したがって、グラフの各接続コンポーネントのすべてのノードは同じスワップ状態でなければなりません。これらのコンポーネント全体のスワップ状態を一貫して割り当てることができるかどうかを判断する必要があります。接続された各コンポーネント内のノードのすべてのペアをテストします。いずれかのペアが非スワップ互換でない場合、解決策はなく、例外をスローできます。接続されたコンポーネントのすべてのペアをテストします(つまり、コンポーネントC1及び、ノードのすべての対を試験P 1 ∈ C 1及びP 2 ∈ C 2)。コンポーネントの各ペアには少なくとも1つのスワップ互換性がありますが、一部のペアは非スワップ互換性もあります(エッジで接続されていないノードの各ペアには少なくとも1つのスワップ互換性があり、スワップ対応)。接続されたコンポーネントに対応するノードを持つ縮小グラフと、対応するコンポーネントが非スワップ互換でない場合は、2つのノード間のエッジを検討します。このグラフが2色の場合のみ、元の問題の解決策があります。2がない場合C2p1∈ C1p2∈ C222-色付け、解決策はなく、例外をスローできます。ある場合は、単色のすべてのコンポーネントのすべてのノードを交換します。任意の2つのノードが非スワップ互換であることが保証されたため、定義された部分順序を使用してペアのリストを適切にソートできます。
アルゴリズムの各ステップ、したがってアルゴリズム全体は、時間で実行できます。O (N2)
更新:よりエレガントな構造は次のとおりです。ペアのペアが非スワップ互換でない場合は、対応するノードをエッジで接続します(2色で異なる色になるように強制します)。ペアのペアが1スワップ互換でない場合、対応するノードを長さ2のチェーンで接続します(2色で同じ色になるように強制します)。結果のグラフが2色である場合にのみ、解決策があります。グラフの青赤の色からソリューションを構築するには、対応するノードが青であるペアのみを交換し、結果のリストをソートします。