Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СКТ - 5,6сем.doc
Скачиваний:
5
Добавлен:
01.05.2025
Размер:
8.67 Mб
Скачать

Метод заметающей прямой

Задача: на плоскости заданы N отрезков координатами своих вершин. Найти все пары взаимопересекающихся отрезков.

При наиболее грубом подходе проверяются все возможные пары отрезков. Это занимает время (N2), поскольку имеется пар, а каждая проверка выполняется за фиксированное время. Рассмотрим алгоритм позволяющий сократить время поиска до O(logN).

Сделаем несколько допущений.

  1. ни один из отрезков прямой линии не должен быть вертикальным (такой ситуации можно избежать путем некоторого поворота плоскости);

  2. любые два отрезка прямой линии могут пересекаться только в одной точке;

  3. никакие три отрезка прямой линии не пересекаются в одной и той же точке.

Проведем через произвольную абсциссу (х) вертикальную прямую L (без ограничений общности можно считать, сто слева и справа от L есть решения нашей задачи и общее решение есть сумма решений для каждой полуплоскости).

Проведем прямую L через точку являющуюся концом отрезка, имеющую наименьшую абсциссу и поставим в соответствие L список отрезков, пересекаемых прямой L в порядке возрастания ординат точек пересечения. Аналогичные действия проведем для всех концов заданных отрезков. Тем самым мы разобьем плоскость на 2N+1 полосу, причем решение задачи в каждой полосе независимо.

Будем считать, что множество вертикальных линий есть результат движения вертикальной прямой L слева на право. Отсюда название метода: заметание плоскости.

В силу независимости решений в полосах сосредоточим внимание на поиске решения в одной полосе. На левой и правой границе полосы имеем два списка, сформированных ранее и состоящих из “имен” отрезков.

Изменение порядка отрезков в списке при переходе от левой полосы к правой говорит о наличии пересечения данных отрезков внутри полосы. Объединив решения для каждой полосы получим решение задачи.

Структуру, поставленную в соответствие прямой L называют статусом заметающей прямой. Точки, в которых статус формируется или модифицируется называются точками останова заметающей прямой.

Идея метода заметающей прямой является одной из основных в вычислительной геометрии, наряду с дихотомией, методом “разделяй и властвуй” и т.д.

Метод локусов. Задачи геометрического поиска

Пусть имеется набор геометрических данных и требуется узнать обладают ли они некоторым свойством (например, выпуклостью). Если этот вопрос возникает единожды, то запрос такого типа называют уникальным. Но если запросы и их обработка повторяются многократно, то такой запрос называется массовым.

Задача. На плоскости даны N точек. Сколько из них лежит внутри заданного прямоугольника, стороны которого параллельны координатным осям? То есть сколько точек (x,y) удовлетворяют неравенствам a<=x<=b, c<=y<=d для заданных a, b, c, d?

Уникальный запрос в этом случае будет обработан за линейное время. Необходимо проверить каждую точку из N, удовлетворяет ли она неравенствам. На память потребуется 2N. Для массового запроса необходимо использовать метод локусов: запросу ставится в соответствие точка в удобном для поиска пространстве, а это пространство разбивается на области (локусы), в пределах которых ответ не изменяется.

Будем говорить, что точка V доминирует над W, тогда и только тогда, когда для всех индексов i верно условие Vi>=Wi. На плоскости точка V доминирует над W тогда и только тогда, когда W лежит в левом нижнем квадранте, определяемом V. Итак, Q(p) – число точек, над которыми доминирует p. Число точек N(p1p2p3p4) в прямоугольнике p1p2p3p4 определяется следующим образом:

N(p1p2p3p4)=Q(p1)-Q(p2)-Q(p4)+Q(p3) см. рис.1.

Над всеми точками прямоугольника доминирует вершина р1. Нужно исключить такие точки, над которыми доминируют р2 и р4, но это приведет к тому, что часть точек будет исключена дважды, а именно те, над которыми доминируют и р2, и р4, но как раз эти точки лежат в левом нижнем квадранте вершины р3.

Итак, задача регионального поиска сведена к задаче обработки запросов о доминировании для четырех точек.

Предположим, что из точек на оси x и y опущены перпендикуляры, а полученные линии продолжены в бесконечность. Они создают решетку из (N+1)2 прямоугольников (см. рис.2).

Для всех точек р в любом из таких прямоугольников Q(р) константа. Это означает, что доминантный поиск это ответ на вопрос: в какой ячейке лежит заданная точка? После упорядочивания исходных точек по обеим координатам необходимо выполнить два двоичных поиска (для каждой оси), чтобы найти ячейку, содержащую точку. Время запроса равно O(logN). Память O(N2).

Вообще, можно говорить о двух главных моделях для задач геометрического поиска:

  1. Задачи локализации, когда файл представляет собой разбиение геометрического пространства на области, а запрос является точкой. Локализация состоит в определении области, содержащей запрошенную точку.

  2. Задачи регионального поиска, когда файл содержит набор точек пространства, а запрос есть некая стандартная геометрическая фигура (в 3D шар или брус), произвольно перемещаемая в этом пространстве. Региональный поиск состоит в извлечении или подсчете числа всех точек внутри запросного региона.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]