Tengo dos conjuntos de puntos en el plano bidimensional. Quiero encontrar el par de puntos más cercano s , t tal que s ∈ S , t ∈ T , y la distancia euclidiana entre s , t sea lo más pequeña posible. ¿Cuán eficientemente se puede hacer esto? ¿Se puede hacer en O ( n log n ) tiempo, donde n = | S | + | T | ?
Sé que si me dan un solo conjunto , entonces es posible encontrar el par de puntos más cercano s , s ′ ∈ S en el tiempo O ( n log n ) usando un algoritmo estándar de divide y vencerás . Sin embargo, ese algoritmo no parece generalizarse al caso de dos conjuntos, porque no hay conexión entre la distancia entre los dos puntos más cercanos dentro de S o T frente a la distancia entre los dos puntos más cercanos a través de esos conjuntos.
Pensé en almacenar el conjunto en un árbol k -d, luego para cada s ∈ S , usando una consulta de vecino más cercano para encontrar el punto más cercano en T a s . Sin embargo, el peor tiempo de ejecución de esto podría ser tan malo como el tiempo O ( n 2 ) . Hay resultados que dicen que si los puntos de T se distribuyen aleatoriamente, entonces el tiempo de ejecución esperado para cada consulta es O ( log n ) , por lo que obtendríamos un algoritmo con el tiempo de ejecución esperado O ( n log n ) si se nos garantizara que los puntos se distribuyen aleatoriamente, pero estoy buscando un algoritmo que funcione para cualquier colección de puntos (no necesariamente distribuidos aleatoriamente).
Motivación: un algoritmo eficiente sería útil para esta otra pregunta .
fuente