Nous avons une liste de paires x, y. Chaque paire représente un point sur un espace 2D. Je veux trouver le point le plus proche de cette liste, à un point spécifique xq, yq. Quel est le meilleur algorithme de performance critique pour ce problème? Lisp de points ne va pas changer; ce qui signifie que je n'ai pas besoin d'effectuer une insertion et une suppression. Je veux juste trouver le voisin le plus proche d'un point cible xq, yq dans cet ensemble.Meilleur algorithme de performance critique pour la résolution du plus proche voisin
Édition 1: Merci à tous! Comme Stephan202 a deviné correctement, je veux le faire à plusieurs reprises; comme une fonction. Une liste n'est pas nécessairement triée (en fait je ne comprends pas comment elle peut être triée? Comme une table avec une clé primaire de 2 colonnes a et y? Si cela aide alors je vais le trier).
Je construirai la structure de données basée sur la liste une fois, puis j'utiliserai cette structure de données générée dans la fonction (si ce processus lui-même est pertinent).
Merci Jacob; Il semble que la structure de données de KD-Tree soit un bon candidat pour être la réponse (et je pense que c'est le cas, je le mettrai à jour quand j'obtiendra des résultats pertinents).
Édition 2: J'ai trouvé que, ce problème est nommé "plus proche voisin"!
Édition 3: Le premier titre était "À la recherche d'un algorithme (pour l'interrogation spatiale et l'indexation spatiale) (le plus proche voisin)"; J'ai choisi un nouveau titre: "Meilleur algorithme de performance critique pour résoudre le plus proche voisin". Puisque je ne veux pas effectuer d'opération d'insertion et de suppression sur mes données initiales et que je veux juste la plus proche d'elles vers un nouveau point (qui ne sera pas inséré), j'ai choisi de travailler (actuellement) sur KD-Trees. Merci à tous!
Y at-il une certaine structure dans la liste (est-il par exemple CLASSEES)? Voulez-vous répéter cette opération, ou sera-t-elle effectuée une fois? Ce sont des informations pertinentes dont les gens auront besoin pour répondre à votre question. – Stephan202
Avez-vous accès à une base de données spatiale? –
Si la liste est non triés et l'opération sera effectuée qu'une seule fois, vous devrez effectuer une recherche linéaire sur la liste et ne peut donc faire mieux que O (n). Si vous voulez répéter l'opération, vous devez créer une représentation (arborescente) appropriée de la liste, en fonction des valeurs x et y de l'élément. – Stephan202