
- •Геометрический поиск
- •Задача локализации точки
- •Задача локализации точки на планарном подразбиении
- •Представление пплг с помощью реберного списка с двойными связями
- •Техника плоского заметания
- •Методы локализации точки на планарном подразбиении
- •Метод полос
- •Метод цепей
- •Метод детализации триангуляции
- •Триангуляция с ограничениями
- •Алгоритм локализации точки
- •Метод трапеций
- •Реализация алгоритмов
- •Требования к реализации алгоритмов
- •Сравнительное исследование методов локализации
- •Визуализация работы алгоритмов
- •Результаты экспериментальных исследований
- •Анализ затрат времени на предобработку
- •Анализ затрат времени на запрос
- •Заключение
- •Список литературы
Методы локализации точки на планарном подразбиении
Метод полос
Пусть
задан ППЛГ
.
Проведем горизонтальные прямые через
каждую его вершину (см. Рис.2.1.). Если граф
содержит
вершин, то эти горизонтальные прямые
разделяют плоскость на
полосу.
Рис. 2.1.
Если
провести сортировку этих полос по
ординате, то появится возможность найти
ту полосу, в которой лежит пробная точка,
за время
.
Пересечение
одной из полос с графом
состоит из ребер этого графа или их
фрагментов, определяющих трапеции.
Такие трапеции, очевидно, могут вырождаться
в треугольники. Ключом к алгоритму
локализации точки является то, что ребра
графа внутри полосы не пересекаются
между собой. Поэтому их можно полностью
упорядочить слева направо и использовать
двоичный поиск для определения той
трапеции, которая содержит запрошенную
точку.
Итак, поиск состоит из двух последовательно выполняемых шагов:
Определение полосы содержащей точку.
Определение трапеции.
Оба
шага требуют в худшем случае
времени, а значит время запроса в худшем
случае равно
.
Теперь
оценим время, которое требуется для
предобработки, и память необходимую
для запоминания ППЛГ. При наивном подходе
кажется, что нужно сортировать все
фрагменты ребер в каждой полосе. Кроме
того, поскольку каждая полоса может
содержать
таких
фрагментов, то кажется, что должны
потребоваться затраты:
-
для времени предобработки и
- для памяти. Теперь покажем, как сократить
время до
,
однако сократить размер используемой
памяти в данном алгоритме нельзя, т.к.
существуют ППЛГ, требующие квадратичной
памяти (см. Рис.2.2).
Рис.2.2
Заметим, что если ребро ППЛГ проходит через несколько полос, то эти полосы следуют одна за другой. Это наблюдение позволяет сократить время предобработки, поскольку можно воспользоваться методом заметания плоскости.
Будем проводить плоское заметание, например, сверху вниз. В этом случае список точек событий – это просто перечисленные сверху вниз вершины ППЛГ. Моментальным статусом заметающей прямой будет упорядоченная слева направо последовательность ребер графа, пересекающих ту полосу, где находится заметающая прямая. Эта последовательность, т.е. порядок ребер слева направо, не изменяется внутри данной полосы, но изменяется на границе со следующей полосой, когда достигается новая вершина ППЛГ. Ясно, что в этой точке ребра, оканчивающиеся в ней, удаляются и заменяются теми, которые начинаются в ней (см. Рис. 2.3.). Статус заметающей прямой можно хранить в форме дерева сбалансированного по высоте (например, АВЛ или 2-3-4 дерева), которое допускает реализацию операций вставки и удаления за время пропорциональное логарифму его размера. В каждой точке события статус заметающей прямой корректируется и запоминается.
Рис. 2.3.
Запишем алгоритм предобработки в форме процедуры:
//ВЕРШИНА – массив вершин ППЛГ упорядоченных по убыванию ординаты.
//В[i] – множество ребер инцидентных ВЕРШИНЕ[i] сверху (входящие ребра).
//А[i] – множество ребер инцидентных ВЕРШИНЕ[i] снизу (исходящие ребра).
ProcedureПредобработкаДляМетодаПолос
Begin
СозданиеСбалансированногоДерева ( Т );
For i = 2 to N do
Т.Удалить( В[i] );
Т.Вставить(A[i] );
Запомнить Т;
End
End.
Теперь оценим затраты
времени и памяти. Основная работа
проводится в цикле For:
коррекция статуса и его запоминание.
Первое потребуетвремени, т.к. ППЛГ содержит
ребер, каждое из которых единожды
вставляется и удаляется из дерева, а
стоимость этих операций равна
.
Запоминание статуса потребует времени
,
и также
памяти.
Резюмируем:
Локализацию точки на
-
вершинном планарном подразбиении можно
реализовать с помощью метода полос за
время
с использованием
памяти, если
времени ушло на предобработку.
Отметим, что данный метод обладает оптимальной оценкой времени запроса, однако его время предобработки и в еще большей степени – его затраты памяти чрезмерны.