Eu tenho dois conjuntos de pontos no plano bidimensional. Quero encontrar o par mais próximo de pontos s , t tal que s ∈ S , t ∈ T , e a distância euclidiana entre s , t é a menor possível. Com que eficiência isso pode ser feito? Isso pode ser feito no tempo O ( n log n ) , onde n = | S | + | T | ?
Eu sei que se eu sou dado um único conjunto , então é possível encontrar o par mais próximo de pontos s , s ' ∈ S em O ( n log n ) tempo usando um algoritmo de divisão e conquista padrão . No entanto, esse algoritmo não parece generalizar para o caso de dois conjuntos, porque não há conexão entre a distância entre os dois pontos mais próximos dentro de S ou T versus a distância entre os dois pontos mais próximos entre esses conjuntos.
Pensei em armazenar o conjunto em uma árvore k- d, depois para cada s ∈ S , usando uma consulta do vizinho mais próximo para encontrar o ponto mais próximo em T para s . No entanto, o pior caso de execução disso pode ser tão ruim quanto o tempo O ( n 2 ) . Há resultados dizendo que, se os pontos de T são distribuídos aleatoriamente, o tempo de execução esperado para cada consulta é O ( log n ) ; portanto, obteríamos um algoritmo com o tempo de execução esperado O ( n log n ) se tivéssemos a garantia de que os pontos são distribuídos aleatoriamente - mas estou procurando um algoritmo que funcione para qualquer coleção de pontos (não necessariamente distribuídos aleatoriamente).
Motivação: Um algoritmo eficiente seria útil para essa outra questão .
fonte