Se le proporciona una lista de puntos en el plano, escriba un programa que emite cada punto junto con los otros tres puntos más cercanos . Estos tres puntos ordenados por distancia.Encontrar los tres puntos más cercanos a cada punto en un plano 2D
Por ejemplo, dado un conjunto de puntos en los que cada línea es de la forma: ID coordenada x y la coordenada
1 0.0 0.0
2 10.1 -10.1
3 -12.2 12.2
4 38.3 38.3
5 79.99 179.99
su programa debe salida:
1 2,3,4
2 1,3,4
3 1,2,4
4 1,2,3
5 4,3,1
Esta es una pregunta de la entrevista que encontré en un foro en línea. Puedo pensar en una solución O (n * n): calcule la distancia de cada punto a cada otro punto. Devuelve los puntos de distancia mínima para este punto. Repita el proceso para los otros puntos
¿Cuál es tu pregunta? ¿Estás buscando una solución que sea más rápida que 'O (N * N)'? – dasblinkenlight
Esta es una pregunta de entrevista bastante mala, especialmente si el objetivo es crear un código real. Es trivial obtener una solución de trabajo (cuya complejidad puede ser aceptable en algunos contextos), como lo hizo aproximadamente, pero bastante difícil de mejorar. Especialmente si no tiene idea de las estructuras utilizadas en geometría computacional. De todos modos, buscar en Google "neighbo (u) r más cercano" debería darte muchos consejos. Un buen comienzo es [esta entrada de Wikipedia] (http://en.wikipedia.org/wiki/Nearest_neighbor_search) –
@dasblinkenlight, no busca el algoritmo para ejecutar en O (n^n). –