Was sind die Vorteile von Octrees in Bezug auf räumliche / zeitliche Leistung oder auf andere Weise und in welchen Situationen sind sie am besten anwendbar (ich habe 3D-Grafikprogrammierung gehört)?
kD-Bäume sind ausgeglichene Binärbäume und Octrees sind Versuche, so dass die Vor- und Nachteile wahrscheinlich von diesen allgemeineren Datenstrukturen geerbt werden. Speziell:
- Das Nachwuchten kann teuer sein (Octrees müssen nicht nachgewuchtet werden).
- Das Auswuchten handhabt die Heterogenität besser, weil es anpassungsfähig ist.
- Ein höherer Verzweigungsfaktor in Oktaven bedeutet flachere Bäume (weniger Indirektionen und Zuweisungen) für homogene Verteilungen.
Außerdem bietet sich eine Halbierung (wie in Oktaven) für eine triviale Implementierung in Bezug auf Bit-Twiddling an. Ebenso stelle ich mir vor, dass Octrees bei der Suche nach Reichweiten von vorberechneten Entfernungen in hohem Maße profitieren können.
BEARBEITEN
Offensichtlich müssen meine Hinweise auf Versuche und Homogenität geklärt werden.
Versuche sind eine Familie von Datenstrukturen, die durch Verzeichnisbäume dargestellt werden und als Wörterbücher für Schlüssel verwendet werden, die Sequenzen sind (insbesondere Zeichenfolgen, aber auch DNA-Sequenzen und die Bits in einem Hash-Wert für Hash-Versuche). Wenn jedes Wörterbuch jeweils ein Bit der x-, y- und z-Koordinaten abbildet (höchstwertiges Bit in der ersten Ebene des Versuchs, nächstwertiges Bit in der zweiten Ebene usw.), ist der Versuch ein Oktree, das den 3D-Raum gleichmäßig unterteilt. Octrees erben daher die Eigenschaften von Versuchen, die im Allgemeinen sind:
- Ein hoher Verzweigungsfaktor kann flache Bäume bedeuten, für die nur wenige Indirektionen auftreten, sodass die Suche schnell vonstatten geht. Beispielsweise können 20 Ebenen eines Binärbaums in 4 Ebenen eines Baums mit einem Verzweigungsfaktor von 256 gespeichert werden.
- Versuche werden während des Einfügens und Löschens nicht neu ausgeglichen, was eine teure Operation erspart, die für ausgeglichene Binärbäume erforderlich ist.
Der Nachteil ist, dass Heterogenität zu unausgeglichenen Versuchen / Octrees führen kann, sodass die Suche viele Indirektionen erfordern kann. Das äquivalente Problem bei Versuchen wird durch die Verwendung von Kantenkomprimierung gelöst, um mehrere Indirektionsebenen in einer einzigen Ebene zusammenzufassen. Octrees tun dies nicht, aber es gibt nichts, was Sie daran hindert, ein Octree zu komprimieren (aber ich glaube nicht, dass Sie das Ergebnis als Octree bezeichnen könnten!).
Betrachten Sie zum Vergleich ein spezialisiertes Wörterbuch für Zeichenfolgenschlüssel, das als Trie dargestellt wird. Die erste Stufe des Versuchs verzweigt sich auf das erste Zeichen im Schlüssel. Die zweite Ebene des zweiten Zeichens und so weiter. Nach einer beliebigen Zeichenfolge kann gesucht werden, indem nach dem ersten Zeichen aus dem Schlüssel im Wörterbuch gesucht wird, um ein zweites Wörterbuch zu erhalten, das zum Nachschlagen des zweiten Zeichens aus dem Schlüssel usw. verwendet wird. Ein Satz zufälliger Schlüsselfolgen wäre eine homogene Verteilung. Ein Satz von Schlüsselzeichenfolgen, die alle ein Präfix haben (z. B. alle Wörter, die mit "anti" beginnen), sind a heterogenVerteilung. Im letzteren Fall enthält das erste Wörterbuch nur eine Bindung für "a", das zweite nur eine für "n" und so weiter. Suchen Sie nach einer Zuordnung in der Liste, indem Sie immer dieselben vier Wörterbücher mit denselben vier Schlüsseln durchsuchen. Dies ist ineffizient und genau das tun Octrees, wenn sie zum Beispiel zum Speichern heterogener Partikelverteilungen verwendet werden, bei denen der größte Teil der Partikel in einem winzigen Volumen im Vektorraum liegt.