Ich arbeite an einem Schulprojekt, bei dem es darum geht, einen Breiten-/Längengrad zu ziehen und die fünf wichtigsten Punkte in einer bekannten Liste von Orten zu finden. Die Liste soll im Speicher gespeichert werden, mit dem Vorbehalt, dass wir eine "geeignete Datenstruktur" wählen müssen - das heißt, wir können nicht einfach alle Orte in einem Array speichern und Abstände einzeln nacheinander vergleichen. Der Lehrer schlug vor, die Ortsdaten nach US-Bundesstaat zu gruppieren, um zu verhindern, dass die Entfernung für Orte berechnet wird, die offensichtlich zu weit entfernt sind. Ich denke, ich kann es besser machen.R Baum 50.000 Fuß Überblick?
Aus meiner Forschung online scheint es, als ob ein R-Baum oder eine seiner Varianten eine saubere Lösung sein könnte. Leider ist dieser Satz so weit, wie ich mit dem Verständnis der tatsächlichen Technik verstanden habe, da die Literatur für meinen nicht-akademischen Kopf einfach zu dicht ist.
Kann jemand geben Sie mir einen wirklich hohen Überblick darüber, was der Prozess ist ein R-Baum mit lat/long Daten zum Bestücken und durchquert dann den Baum diese fünf nächsten Nachbarn von einem bestimmten Punkt zu finden?
Außerdem ist das Projekt in C, und ich muss das Rad nicht neu erfinden. Wenn Sie also eine vorhandene Open-Source-C-Implementierung eines R-Baums verwendet haben, wäre ich an Ihren Erfahrungen interessiert.
UPDATE:This blog post beschreibt einen einfachen Suchalgorithmus für einen regional abgeteilten Raum (wie eine PR Quadtree). Hoffnung, die einem zukünftigen Leser hilft.
Werfen Sie einen Blick auf http://www.trreeportal.org/, es gibt Hinweise auf einige Implementierungen. Beachten Sie, dass ich noch eine C-Implementierung sehen muss, die kein Mist ist. – avakar
Mist als ineffizient, oder Mist als in wird nicht kompilieren? Ersteres ist für meine Zwecke in Ordnung. :-) – roufamatic
Mist wie in "überprüft nicht das Ergebnis von malloc und anderen ähnlichen Überschreitungen". Ich weiß nicht, ob es für Hausaufgaben gut ist oder nicht. :) – avakar