Каковы преимущества октод в пространственно-временном исполнении или нет, и в каких ситуациях они наиболее применимы (я слышал, программирование трехмерной графики)?
кД деревья сбалансированные бинарные деревья и octrees являются попытки так преимущества и недостатки, вероятно , унаследованные от этих более общих структур данных. В частности:
- Перебалансировка может быть дорогой (октравам не нужно перебалансировать).
- Балансировка лучше справляется с неоднородностью, потому что она адаптивна.
- Более высокий коэффициент ветвления в октреях означает более мелкие деревья (меньшее количество косвенных связей и распределений) для однородных распределений.
Кроме того, разделение пополам (как в октреях) поддается тривиальной реализации с точки зрения разбивки битов. Точно так же, я полагаю, что при выполнении поиска по дальности октавы могут значительно выиграть от предварительно вычисленных расстояний.
РЕДАКТИРОВАТЬ
Очевидно, мои ссылки на попытки и однородность нуждаются в уточнении.
Попытки представляют собой семейство структур данных, представленных деревьями словарей, и используются в качестве словарей для ключей, которые являются последовательностями (в первую очередь, строками, но также последовательностями ДНК и битами в значении хэша для хэш-попыток). Если каждый словарь отображает один бит каждой из координат x, y и z (старший значащий бит на первом уровне дерева, следующий значащий бит на втором уровне и т. Д.), То дерево представляет собой дерево, которое равномерно разделяет трехмерное пространство. Следовательно, октреи наследуют характеристики попыток, которые, как правило:
- Высокий коэффициент ветвления может означать, что мелкие деревья имеют мало косвенных указаний, поэтому поиск происходит быстро, например, 20 уровней двоичного дерева могут быть сохранены на 4 уровнях дерева с коэффициентом ветвления 256.
- Попытки не перебалансированы во время вставок и удалений, что экономит дорогостоящую операцию, необходимую для сбалансированных двоичных деревьев.
Недостатком является то, что неоднородность может привести к несбалансированным попыткам / октодам, поэтому поиск может потребовать много косвенных указаний. Эквивалентная проблема в попытках решается с помощью сжатия краев для объединения нескольких уровней косвенности в один уровень. Октреи не делают этого, но ничто не мешает вам сжать октри (но я не думаю, что вы могли бы назвать результат октреем!).
Для сравнения рассмотрим специализированный словарь для строковых ключей, который представлен в виде дерева. Первый уровень дерева ветвится на первом символе в ключе. Второй уровень на втором персонаже и тд. Любую строку можно найти, выполнив поиск первого символа в ключе словаря, чтобы получить второй словарь, который используется для поиска второго символа в ключе и так далее. Набор строк случайных ключей будет однородным распределением. Набор ключевых строк, которые имеют общий префикс (например, все слова, начинающиеся с «анти»), являются неоднороднымираспределение. В последнем случае первый словарь содержит только одну привязку для «a», второй - только одну для «n» и так далее. Поиск любого отображения в дереве всегда осуществляется путем поиска в тех же четырех словарях с теми же четырьмя ключами. Это неэффективно, и это то, что делают октреи, если, например, они используются для хранения гетерогенных распределений частиц, где подавляющее большинство частиц находится в крошечном объеме в векторном пространстве.