Melhor correspondência em um gráfico bipartido (por exemplo, associando rótulos a pontos em um gráfico)

Eu estou tentando extrair semântica de gráficos xy gráficos onde os pontos são plotados e alguns ou todos têm um rótulo. O rótulo é plotado "perto do ponto", de modo que um humano pode normalmente entender qual rótulo vai com qual ponto. Por exemplo, neste gráfico, está claro qual rótulo (número) pertence a qual ponto (*) e um algoritmo baseado na distância euclidiana funcionaria. (Os rótulos e pontos não têm ordenação semântica - por exemplo, um gráfico de dispersão)

<code> *1
    *2

        *3

      *4
</code>

Em parcelas congestionadas, o software / usuário de criação pode colocar o rótulo em direções diferentes para evitar a sobreposição. Por exemplo em

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

Um leitor humano pode normalmente descobrir qual rótulo está associado a qual rótulo.

Uma solução que eu aceitaria seria criar uma matriz de distância euclidiana e embaralhar as linhas para obter o mínimo de uma função (por exemplo, os quadrados somados das distâncias na diagonal ou outra heurística). No segundo exemplo (com os pontos marcados a, b, c, d no sentido horário a partir do canto NW), temos uma matriz de distância (para 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>

e precisamos rotulara1 b2 c4 d3. Trocar as linhas 3 e 4 fornece a soma mínima da diagonal. Aqui está um exemplo mais complexo, onde simplesmente escolher o mais próximo pode falhar

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

Se isso for resolvido, precisarei ir a casos em que o número de rótulos pode ser menor ou maior que o número de pontos.

Se o algoritmo é padrão, eu apreciaria um ponteiro para Open Source Java (por exemplo, JAMA ou Apache)

NOTA: Esta resposta SOAssociando pontos próximos a um caminho não funciona como resposta, porque o caminho através dos pontos é dado.

questionAnswers(3)

yourAnswerToTheQuestion