En el wikipedia entry for k-d trees, se presenta un algoritmo para realizar una búsqueda de vecino más cercano en un árbol k-d. Lo que no entiendo es la explicación del paso 3.2. ¿Cómo se puede saber que no hay un punto más cercano solo porque la diferencia entre la coordenada de división del punto de búsqueda y el nodo actual es mayor que la diferencia entre la coordenada de división del punto de búsqueda y la mejor corriente?vecino más cercano - árbol k-d - prueba de wikipedia
EDITAR: Agregó el texto del artículo de Wikipedia en cuestión en caso de que se cambie más tarde en Wikipedia.
más cercano Animación búsqueda del vecino de NN búsqueda con un árbol kd en 2D
El vecino más cercano (NN) algoritmo tiene como objetivo encontrar el punto en el árbol que está más próxima a una entrada punto dado . Esta búsqueda se puede hacer de manera eficiente utilizando las propiedades de árbol para eliminar rápidamente porciones grandes del espacio de búsqueda. La búsqueda de un vecino más cercano en un procede kd-árbol de la siguiente manera:
- Comenzando con el nodo raíz, el algoritmo se mueve hacia abajo el árbol de forma recursiva, de la misma manera que sería si el punto de búsqueda se siendo insertado (es decir, va a la derecha o izquierda dependiendo de si el punto es mayor o menor que el nodo actual en la dimensión dividida).
- Una vez que el algoritmo llega a un nodo hoja, se ahorra ese punto nodo como la "corriente mejor"
- El algoritmo desenrolla la recursividad del árbol, realizando los siguientes pasos en cada nodo: 1. Si la corriente el nodo está más cerca que el mejor actual, entonces se convierte en el mejor actual. 2. El algoritmo comprueba si podría haber puntos en del otro lado del plano de división que están más cerca del punto de búsqueda que los mejores actuales. En concepto, esto se hace al intersectar el hiperplano de división con una hiperesfera alrededor del punto de búsqueda que tiene un radio igual a la distancia más cercana a . Dado que los hiperplanos son todos los ejes alineados este se implementa como una simple comparación para ver si la diferencia entre coordinar la división del punto de búsqueda y el nodo actual es menor que la distancia (coordenadas globales) partir de la búsqueda apunte a la actual mejor. 1. Si el hiperesfera cruza el plano, podría haber más cercanas puntos en el otro lado del plano , por lo que el algoritmo debe moverse hacia abajo la otra rama del árbol del nodo actual buscando estrechar puntos, siguiendo el mismo proceso recursivo como toda la búsqueda. 2. Si la hiperesfera no se cruza con el plano de división, , el algoritmo continúa caminando en el árbol y la rama completa en al otro lado de ese nodo es eliminada.
- Cuando el algoritmo finaliza este proceso para el nodo raíz, se completa la búsqueda .
En general los usos de algoritmo cuadrados distancias para la comparación de computación para evitar raíces cuadradas. Además, puede guardar el cálculo manteniendo la mejor distancia al cuadrado actual en una variable para comparar.
Este es el eslabón perdido que hizo que se entendiera el algoritmo. Parece que ninguna de las otras explicaciones lleva tiempo explicar el paso de simplificación (o simplemente lo mencionan como algo por cierto). –