Многомерное дерево отрезков
Версия от 21:41, 15 июня 2011; Phil (обсуждение | вклад)
Дерево отрезков можно обобщить в многомерный случай для решения таких задач, как поиск суммы на прямоугольнике (или гиперпрямоугольной области).
Задача: |
Рассматривается задача регионального поиска. Задано множество точек в | -мерном евклидовом пространстве. Образцом для поиска является гиперпрямоугольная область. Найти сумму/минимум/максимум.
Построение
Пусть задано
-мерное пространство с координатными осями . Т.к. при построении одномерного дерева, индексы массива разбиваются на отрезки, тогда при построении многомерного дерева координаты будут обрабатываться сначала по , затем по и так далее... Далее дерево строится рекурсивно: далее координаты по обрабатываем по координатам , (по всем возможным координатам) и далее по аналогии... То есть получается, что основная идея построения многомерного дерева отрезков - вкладывание деревьев отрезка друг в друга.Пример задачи, в которой удобно использовать многомерное дерево отрезков
Пример двумерного дерева
Рассмотрим процесс построения предельного случая при
. Пусть задан массив элементов размера . Упорядочим массив по первой координате и построим на нем дерево отрезков. После этого для каждого узла дерева строим еще одно дерево отрезков по координате , которые находятся на том же отрезке.К примеру,двумерное дерево размером
Анализ и оценка структуры
Строится такое дерево за линейное время. Структура использует
памяти, и отвечает на запрос за , где -размерность дерева.Ответ на запрос в таком дереве будет производиться так же,как и построение: сначала по координате
, затем, когда дошли до какой-либо вершины по первой координате, вызвать запрос от этого же дерева по и так далее. Получается, что для мерного дерева запрос выполняется за (для рассмотренного двумерного дерева будет )Источники
- e-maxx.ru: Дерево отрезков
- F. P. Preparata, M.I. Shamos - Вычислительная геометрия Главы о региональном поиске