Najlepsze dopasowanie na wykresie dwudzielnym (np. Powiązanie etykiet z punktami na działce)

Próbuję wyodrębnić semantykę z graficznych wykresów xy, w których punkty są wykreślane, a niektóre lub wszystkie mają etykietę. Etykieta jest wykreślana „blisko punktu”, aby człowiek mógł normalnie zrozumieć, która etykieta pasuje do danego punktu. Na przykład na tym wykresie jest jasne, która etykieta (liczba) należy do którego punktu (*) i algorytm oparty na odległości euklidesowej będą działać. (Etykiety i punkty nie mają uporządkowania semantycznego - np. Wykres rozrzutu)

<code> *1
    *2

        *3

      *4
</code>

Na przeciążonych wykresach oprogramowanie autorskie / człowiek może umieścić etykietę w różnych kierunkach, aby uniknąć nakładania się. Na przykład w

<code>1**2
 **4
 3
</code>

Czytelnik ludzki może zwykle ustalić, która etykieta jest powiązana z jaką etykietą.

Jedynym rozwiązaniem, które zaakceptowałbym, byłoby stworzenie euklidesowej macierzy odległości i przetasowanie wierszy, aby uzyskać minimum funkcji (np. Sumowane kwadraty odległości po przekątnej lub inne heurystyczne). W drugim przykładzie (z punktami oznaczonymi a, b, c, d zgodnie z ruchem wskazówek zegara z narożnika NW) mamy macierz odległości (do 1 d.p.)

<code>             a   b   c   d
 1ab2    1  1.0 2.0 2.2 1.4    
  dc4    2  2.0 1.0 1.4 2.2
  3      3  2.0 2.2 1.4 1.0
         4  2.2 1.4 1.0 2.0
</code>

i musimy oznaczyća1 b2 c4 d3. Zamiana wierszy 3 i 4 daje minimalną sumę przekątnej. Oto bardziej złożony przykład, w którym proste wybranie najbliższego może się nie powieść

<code> *1*2*5
  **4
  3 *6
</code>

Jeśli to zostanie rozwiązane, będę musiał przejść do przypadków, w których liczba etykiet może być mniejsza lub większa niż liczba punktów.

Jeśli algorytm jest standardem, doceniłbym wskaźnik do Java Open Source (np. Matematyki JAMA lub Apache)

UWAGA: Ta odpowiedź SOKojarzenie pobliskich punktów ze ścieżką nie działa jako odpowiedź, ponieważ podano ścieżkę przez punkty.

questionAnswers(3)

yourAnswerToTheQuestion