Sur le entrée wikipédia pour les arbres k-d L'article présente un algorithme permettant d'effectuer une recherche du plus proche voisin dans un arbre k-d. Il s'agit d'un algorithme de recherche de l'arbre. Ce que je ne comprends pas, c'est l'explication de l'étape 3.2. Comment savez-vous qu'il n'y a pas un point plus proche simplement parce que la différence entre la coordonnée de division du point de recherche et le nœud actuel est plus grande que la différence entre la coordonnée de division du point de recherche et le meilleur actuel ?
Recherche du plus proche voisin Animation de recherche de NN avec un arbre KD en 2D
L'algorithme du plus proche voisin (NN) vise à trouver le point de l'arbre qui est le plus proche d'un point d'entrée d'entrée. Cette recherche peut être effectuée efficacement en utilisant les propriétés propriétés de l'arbre pour éliminer rapidement parties de l'espace de recherche. La recherche d'un plus proche voisin dans un kd-tree se déroule comme suit :
- En commençant par le nœud racine, l'algorithme se déplace vers le bas de l'arbre. récursivement, de la même façon qu'il le ferait qu'il le ferait si le point de recherche était de recherche (c'est-à-dire qu'il va vers la droite ou la gauche selon que le point est supérieur ou inférieur au nœud actuel dans la dimension partagée).
- Une fois que l'algorithme atteint un nœud feuille, il enregistre ce point de nœud en tant que le "meilleur moment".
- L'algorithme déroule la récursion de l'arbre, en effectuant les opérations suivantes les étapes suivantes à chaque nœud : 1. Si le noeud actuel est plus proche que le meilleur noeud actuel, alors il devient le noeud actuel. devient le meilleur actuel. 2. L'algorithme vérifie s'il existe des points sur les l'autre côté du plan de division qui sont plus proches du point de recherche que le meilleur point actuel. En théorie, cela se fait en croisant l'hyperplan de hyperplan de séparation avec une hypersphère autour du point de recherche dont le rayon est égal à la distance la plus proche. Puisque les hyperplans sont tous alignés sur l'axe est implémentée comme une simple comparaison pour voir si la différence entre la coordonnée de division du point de recherche et le nœud actuel est inférieure à la distance (coordonnées globales) entre le point de recherche et le nœud actuel meilleur. 1. Si l'hypersphère traverse le plan, il pourrait y avoir points plus proches de l'autre côté du plan plan, l'algorithme doit donc descendre l'autre branche de l'arbre à partir du nœud nœud actuel, à la recherche de points points plus proches, en suivant le même processus récursif que l'ensemble de la recherche. 2. Si l'hypersphère ne coupe pas le plan de séparation, alors l'algorithme continue de marcher l'arbre, et la branche entière sur de l'autre côté de ce noeud est éliminée.
- Lorsque l'algorithme termine ce processus pour le nœud racine, alors l'indice recherche est terminée.
En général, l'algorithme utilise les carrés pour la comparaison afin d'éviter de calculer des racines carrées. De plus, il peut économiser des calculs en conservant la meilleure distance actuelle au carré dans une variable pour la comparaison.