Алгоритм массовой загрузки для дерева квадрантов MX-CIF

Мое приложение загружает набор из примерно 100 тыс. элементов (прямоугольников) из файла карты, а затем строит дерево квадрантов MX-CIF в качестве индекса для быстрого поиска. Дерево квадрантов создается при запуске, и его содержимое не меняется во время выполнения.

(В дереве квадрантов MX-CIF элементы хранятся в наименьшем узле, который полностью их содержит... как внутренние, так и конечные узлы могут содержать элементы)

При первом проходе я нахожу внешние экстенты коллекции, поэтому я знаю, насколько велик корневой узел.

Во втором проходе я добавляю каждый элемент в наименьший узел, который полностью его содержит. Как только узел проходит определенное количество элементов, он разделяется, а дочерние узлы перераспределяются между новым родительским и 4 дочерними узлами.

Учитывая, что у меня есть все элементы заранее, как я могу построить дерево более эффективно?


person lnmx    schedule 05.08.2011    source источник
comment
Не могли бы вы заранее извлечь пространственный ключ из каждого объекта эффективным способом на основе MBR, а затем построить индекс из ключей?   -  person Angst    schedule 04.04.2014


Ответы (1)


Вам действительно нужно дерево MX-CIF? Для прямоугольников я бы предложил использовать либо X-дерево, либо PH-дерево.

X-деревья являются производными от R-деревьев и имеют отличное время вставки, если вы заранее знаете весь набор данных (массовая загрузка). Они также имеют очень хорошую производительность запросов диапазона. Пример реализации можно найти здесь: Библиотека XXL.

PH-дерево немного медленнее при массовой загрузке, но намного быстрее, если объекты впоследствии обновляются/перемещаются. Производительность запроса диапазона аналогична X-дереву, но PH-дерево быстрее при извлечении небольших наборов результатов (основные затраты заключаются в извлечении значений, тогда как для X-дерева основные затраты заключаются в обработке запроса (поиске первого узла). , ...)). Реализация PH-дерева доступна здесь: PH-дерево

Отказ от ответственности: я участвовал в разработке PH-дерева.

person TilmannZ    schedule 06.02.2015