Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Локализация точки / Локализация точки.doc
Скачиваний:
94
Добавлен:
01.05.2014
Размер:
16.82 Mб
Скачать
  1. Методы локализации точки на планарном подразбиении

    1. Метод полос

Пусть задан ППЛГ . Проведем горизонтальные прямые через каждую его вершину (см. Рис.2.1.). Если граф содержитвершин, то эти горизонтальные прямые разделяют плоскость наполосу.

Рис. 2.1.

Если провести сортировку этих полос по ординате, то появится возможность найти ту полосу, в которой лежит пробная точка, за время .

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

Итак, поиск состоит из двух последовательно выполняемых шагов:

  1. Определение полосы содержащей точку.

  2. Определение трапеции.

Оба шага требуют в худшем случае времени, а значит время запроса в худшем случае равно.

Теперь оценим время, которое требуется для предобработки, и память необходимую для запоминания ППЛГ. При наивном подходе кажется, что нужно сортировать все фрагменты ребер в каждой полосе. Кроме того, поскольку каждая полоса может содержать таких фрагментов, то кажется, что должны потребоваться затраты:- для времени предобработки и- для памяти. Теперь покажем, как сократить время до, однако сократить размер используемой памяти в данном алгоритме нельзя, т.к. существуют ППЛГ, требующие квадратичной памяти (см. Рис.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: коррекция статуса и его запоминание. Первое потребуетвремени, т.к. ППЛГ содержитребер, каждое из которых единожды вставляется и удаляется из дерева, а стоимость этих операций равна. Запоминание статуса потребует времени, и такжепамяти.

Резюмируем:

Локализацию точки на - вершинном планарном подразбиении можно реализовать с помощью метода полос за времяс использованиемпамяти, есливремени ушло на предобработку.

Отметим, что данный метод обладает оптимальной оценкой времени запроса, однако его время предобработки и в еще большей степени – его затраты памяти чрезмерны.

Соседние файлы в папке Локализация точки