Angesichts eines k-dimensionalen kontinuierlichen (euklidischen) Raums mit ziemlich unvorhersehbar sich bewegenden/wachsenden/schrumpfenden Hypersphären muss ich immer wieder die Hyperkugel finden, deren Oberfläche am nächsten ist gegebene Koordinate. Wenn einige Hypersphären die gleiche Entfernung zu meiner Koordinate haben, dann gewinnt die größte Hypersphäre. (Die Gesamtzahl der Hypersphären ist garantiert das gleiche im Laufe der Zeit zu bleiben.)Schnelle räumliche Datenstruktur für Nearest-Neighbor-Suche zwischen Hypersphären ungleichmäßiger Größe
Mein erster Gedanke war ein KDTree zu verwenden, aber es wird die Hypersphären nicht einheitliche Volumina nicht berücksichtigen. Also schaute ich weiter und fand BVH (Bounding Volume Hierarchies) und BIH (Bounding Interval Hierarchies), die den Trick zu tun scheinen. Zumindest im 2-/3-dimensionalen Raum. Während ich jedoch ziemlich viele Informationen und Visualisierungen zu BVHs fand, konnte ich kaum etwas über BIHs finden.
My Grundvoraussetzung ist eine k-dimensionale räumliche Datenstruktur, die Volumen in Rechnung trägt und ist entweder super schnellen (off-line) oder dynamisch mit kaum Unwucht aufzubauen.
Angesichts meiner Anforderungen oben, mit welcher Datenstruktur würden Sie gehen? Irgendwelche anderen, die ich nicht einmal erwähnt habe?
Edit 1: Vergessen zu erwähnen: hypershperes dürfen (eigentlich sehr zu erwarten) überlappen!
Edit 2: Sieht so aus, als ob anstelle von "Abstand" (und "negativer Abstand" im Besonderen) meine beschriebene Metrik dem power of a point viel besser entspricht.
Da die Berechnung der Entfernung von einem Punkt zu einer Hypersphäre einfach trivial ist (selbst wenn O (k), aber so ist alles im k-Raum), wie viele Hyperspheres haben Sie im Allgemeinen? Natürlich sollte sich die Datenstruktur im Vergleich zu einer einfachen linearen Liste von Hyperspheres auszahlen. Nette Frage, obwohl. –
Die Anzahl der Hyperspheres könnte 8 sein (in diesem Fall würde ich wahrscheinlich nur mit Brute-Force gehen, oder in Tausenden oder sogar Hunderttausenden, abhängig von der Größe des Datensatzes, die ich an dieser Stelle nicht vorhersehen kann. Ich mache derzeit Brute-Force und es ist schmerzhaft langsam – Regexident
Ändert sich die Anzahl der Hypersphären, während Ihr Programm ausgeführt wird? Und zur Klarstellung, wenn Sie 'eine gegebene Koordinate' schreiben, erwarte ich, dass Sie eine Funktion wollen, die z Gibt jede gegebene Koordinate die nächste Hypersphäre zurück, dh die gegebene Koordinate ist nicht für die Dauer des Programms festgelegt? –