jakie są zalety oktetów w wydajności przestrzennej / czasowej lub w inny sposób, i w jakich sytuacjach są najbardziej odpowiednie (słyszałem programowanie grafiki 3D)?
Drzewa kD są zrównoważonymi drzewami binarnymi, a liczby są próbami, więc zalety i wady są prawdopodobnie odziedziczone po tych bardziej ogólnych strukturach danych. Konkretnie:
- Ponowne równoważenie może być kosztowne (oktoty nie wymagają ponownego równoważenia).
- Równoważenie lepiej radzi sobie z heterogenicznością, ponieważ jest adaptacyjne.
- Wyższy współczynnik rozgałęzienia w oktatach oznacza płytsze drzewa (mniej pośrednich i alokacji) dla jednorodnych rozkładów.
Również bisekcja (jak w oktatach) nadaje się do trywialnej implementacji pod względem kręcenia bitów. Podobnie, wyobrażam sobie, że oktany mogą znacznie skorzystać ze wstępnie obliczonych odległości podczas wyszukiwania zasięgu.
EDYTOWAĆ
Najwyraźniej moje odniesienia do prób i jednorodności wymagają wyjaśnienia.
Próby są rodziną struktur danych reprezentowanych przez drzewa słowników i są używane jako słowniki dla kluczy, które są sekwencjami (w szczególności ciągami, ale także sekwencjami DNA i bitami o wartości skrótu dla prób skrótu). Jeśli każdy słownik odwzorowuje jeden bit każdej ze współrzędnych x, y i z (najbardziej znaczący bit na pierwszym poziomie trie, następny znaczący bit na drugim poziomie itd.), Wówczas trie jest oktawą, która równomiernie dzieli przestrzeń 3D. W związku z tym ósemki dziedziczą cechy prób, które są na ogół:
- Wysoki współczynnik rozgałęzienia może oznaczać płytkie drzewa, które powodują niewielką liczbę pośrednich, dzięki czemu wyszukiwanie jest szybkie, np. 20 poziomów drzewa binarnego można zapisać na 4 poziomach drzewa ze współczynnikiem rozgałęzienia wynoszącym 256.
- Próbki nie są ponownie równoważone podczas wstawiania i usuwania, co oszczędza kosztownej operacji wymaganej dla zrównoważonych drzew binarnych.
Wadą jest to, że heterogeniczność może prowadzić do niezrównoważonych prób / oktetów, więc wyszukiwania mogą wymagać wielu pośrednich. Równoważny problem w próbach rozwiązuje się za pomocą kompresji krawędzi, aby zwinąć wiele poziomów pośrednich na jednym poziomie. Oktty tego nie robią, ale nic nie stoi na przeszkodzie, byś kompresował oktree (ale nie sądzę, byś mógł nazwać wynik ósemką!).
Dla porównania rozważ specjalistyczny słownik kluczy ciągów, który jest reprezentowany jako trie. Pierwszy poziom trie rozgałęzia się na pierwszej postaci w kluczu. Drugi poziom drugiej postaci i tak dalej. Dowolny ciąg znaków można wyszukać, wyszukując pierwszy znak z klucza w słowniku, aby uzyskać drugi słownik, który służy do wyszukiwania drugiego znaku z klucza i tak dalej. Zestaw losowych ciągów kluczy byłby jednorodnym rozkładem. Zestaw ciągów kluczy, które mają ten sam przedrostek (np. Wszystkie słowa zaczynające się od „anty”) są heterogenicznedystrybucja. W tym drugim przypadku pierwszy słownik zawiera tylko jedno wiązanie dla „a”, drugi tylko dla „n” i tak dalej. Wyszukiwanie dowolnego mapowania w trie zawsze polega na przeszukiwaniu tych samych czterech słowników za pomocą tych samych czterech kluczy. Jest to nieefektywne i tak robią oktany, jeśli na przykład są one używane do przechowywania niejednorodnych rozkładów cząstek, w których ogromna większość cząstek znajduje się w niewielkiej objętości w przestrzeni wektorowej.