Je travaille sur un projet d'école qui consiste à prendre un point lat/long et à trouver les cinq points les plus proches dans une liste de lieux connus. La liste doit être stockée en mémoire, avec la mise en garde que nous devons choisir une "structure de données appropriée" - c'est-à-dire que nous ne pouvons pas simplement stocker toutes les places dans un tableau et comparer les distances une par une de façon linéaire. L'enseignant a suggéré de regrouper les données de lieu par État américain pour éviter de calculer la distance pour des endroits qui sont évidemment trop loin. Je pense que je peux faire mieux. De mes recherches en ligne, il semble qu'un R-Tree ou l'un de ses variants pourrait être une solution soignée. Malheureusement, cette phrase est aussi loin que j'ai compris la technique, car la littérature est tout simplement trop dense pour ma tête non académique.R Tree Aperçu de 50 000 pieds?
quelqu'un peut me donner une vue d'ensemble très élevé de ce que le processus est de remplissage d'un arbre R avec des données lat/long, puis traversant l'arbre pour trouver les 5 voisins les plus proches d'un point donné?
De plus le projet est en C, et je n'ai pas besoin de réinventer la roue, donc si vous avez utilisé une implémentation en C open source existante d'un arbre R, je serais intéressé par vos expériences.
MISE À JOUR:This blog post décrit un algorithme de recherche simple pour un espace cloisonné régional (comme un quadtree PR). J'espère que cela aidera un futur lecteur.
Jetez un oeil à http://www.rtreeportal.org/, il y a des pointeurs vers certaines implémentations. Notez que je n'ai pas encore vu une implémentation C qui n'est pas de la merde. – avakar
Merde comme inefficace, ou merde comme ne compilera pas? Le premier est bon pour mes fins. :-) – roufamatic
Merde comme dans "ne vérifie pas le résultat de malloc et d'autres transgressions similaires". Je ne sais pas si c'est bien pour les devoirs ou non. :) – avakar