quels sont les avantages des octrees dans les performances spatiales / temporelles ou autres, et dans quelles situations sont-ils les plus applicables (j'ai entendu une programmation graphique 3D)?
Les arbres kD sont des arbres binaires équilibrés et les octrees sont des essais donc les avantages et les inconvénients sont probablement hérités de ces structures de données plus générales. Plus précisément:
- Le rééquilibrage peut être coûteux (les octets n'ont pas besoin d'être rééquilibrés).
- L'équilibrage gère mieux l'hétérogénéité car il est adaptatif.
- Un facteur de ramification plus élevé en octets signifie des arbres moins profonds (moins d'indirections et d'allocations) pour des distributions homogènes.
De plus, la bissection (comme dans les octrees) se prête à une implémentation triviale en termes de bit-twiddling. De même, j'imagine que les octrees peuvent grandement bénéficier des distances précalculées lors des recherches de plage.
MODIFIER
Apparemment, mes références aux essais et à l'homogénéité doivent être clarifiées.
Les essais sont une famille de structures de données représentées par des arbres de dictionnaires et sont utilisés comme dictionnaires pour des clés qui sont des séquences (notamment des chaînes mais aussi des séquences d'ADN et les bits dans une valeur de hachage pour les essais de hachage). Si chaque dictionnaire mappe un bit de chacune des coordonnées x, y et z (bit le plus significatif au premier niveau du trie, bit significatif suivant au deuxième niveau, etc.), le trie est un octree qui subdivise uniformément l'espace 3D. Par conséquent, les octrees héritent des caractéristiques des essais qui sont, en général:
- Un facteur de ramification élevé peut signifier des arbres peu profonds qui subissent peu d'indirections, la recherche est donc rapide, par exemple 20 niveaux d'arbre binaire peuvent être stockés dans 4 niveaux d'un arbre avec un facteur de ramification de 256.
- Les tentatives ne sont pas rééquilibrées pendant les insertions et les suppressions, ce qui évite une opération coûteuse requise pour les arbres binaires équilibrés.
L'inconvénient est que l'hétérogénéité peut entraîner des essais / octets déséquilibrés, de sorte que les recherches peuvent nécessiter de nombreuses indirections. Le problème équivalent dans les essais est résolu en utilisant la compression des bords pour réduire plusieurs niveaux d'indirection en un seul niveau. Octrees ne fait pas cela mais rien ne vous empêche de compresser un octree (mais je ne pense pas que vous puissiez appeler le résultat un octree!).
À titre de comparaison, considérons un dictionnaire spécialisé pour les clés de chaîne qui est représenté comme un trie. Le premier niveau du trie se branche sur le premier caractère de la clé. Le deuxième niveau sur le deuxième personnage et ainsi de suite. Toute chaîne peut être recherchée en recherchant le premier caractère de la clé dans le dictionnaire pour obtenir un deuxième dictionnaire qui est utilisé pour rechercher le deuxième caractère de la clé, etc. Un ensemble de chaînes de clés aléatoires serait homogène distribution . Un ensemble de chaînes de clés qui partagent toutes un préfixe (par exemple, tous les mots commençant par "anti") sont hétérogènes.Distribution. Dans ce dernier cas, le premier dictionnaire ne contient qu'une seule liaison, pour "a", le second uniquement pour "n" et ainsi de suite. La recherche de tout mappage dans le trie étant toujours en recherchant les quatre mêmes dictionnaires avec les mêmes quatre touches. C'est inefficace et c'est ce que font les octrees si, par exemple, ils sont utilisés pour stocker des distributions de particules hétérogènes où la grande majorité des particules se trouvent dans un petit volume dans l'espace vectoriel.