解が存在する場合 (そうでない例を示す私のコメントを参照してください)、すべての点とすべての赤について (赤または黒の) 頂点を含む完全な 2 部グラフで一致する最小の重みを見つけることによって見つけることができます。頂点 u と黒い頂点 v、重みが対応する点間のユークリッド距離に等しいエッジ (u, v)。これは O(V^4) 時間で最適に解決できます。
なぜこれが機能する必要があるのですか?David Eisenstat の同様の質問への回答から得た主なアイデアは、点 X で交差する線分 AB と CD のペアがあるときはいつでも、三角形の不等式を使用して、それぞれの端点のいずれかを選択することを示すことができるということです。それらを交換すると、全長が短いか等しい線分のペアが得られます。
A
|\
| \
| \ X
C---+-----D
\ /
\ /
B
AX + XC >= AC (tri. ineq.)
BX + XD >= BD (tri. ineq.)
AX + XC + BX + XD >= AC + BD (sum both sides)
(AX + BX) + (XC + XD) >= AC + BD (rearrange LHS)
AB + CD >= AC + BD (combine pairs of segments on LHS)
さらに、三角形 AXC と BXC が非縮退であると仮定すると、 は に>=なります>。(このための十分条件は、少なくとも 1 つの赤点と 1 つの黒点を含む 3 つの点のセットが同一線上にないことです。) したがって、任意の解 (赤のノードを黒のノードに割り当てる) について、その解に交差が含まれる場合、線分の長さの合計は、交差する 2 つの線分セグメントの赤 (または黒) の端点を交換することにより、0 以外の量だけ減らすことができます。
言い換えると、
Solution contains a crossing => sum of segment lengths is not minimal.
対偶を取ると、すぐに得られます
Sum of segment lengths is minimal => solution contains no crossing.
最小重みマッチング アルゴリズムは可能な限り最小の重みの解を返すため、これによってその正確性が確立されます。
(エンドポイントの交換が実際に線分 AC と BD の新しいペアが交差しないことを保証するかどうかについて心配する必要はないことに注意してください -- 交差しないことは明らかですが、実際に必要なのは正しさの証明はそれを示すことcrossing exists => sum not minimalです。)