Алгоритм Балабана — различия между версиями
(add definition) |
|||
| Строка 31: | Строка 31: | ||
Введем отношение порядка на множестве отрезков <tex>s_1 <_b s_2</tex> если оба отрезка пересекают вертикальную линию <tex>x = a</tex> и | Введем отношение порядка на множестве отрезков <tex>s_1 <_b s_2</tex> если оба отрезка пересекают вертикальную линию <tex>x = a</tex> и | ||
точка пересечения этой прямой с отрезком <tex>s_1</tex> лежит ниже точки пересечения с <tex>s_2</tex>. | точка пересечения этой прямой с отрезком <tex>s_1</tex> лежит ниже точки пересечения с <tex>s_2</tex>. | ||
| + | |||
| + | {{Определение | ||
| + | |definition= | ||
| + | ''Лестница'' <tex>D</tex> — это пара <tex>(Q, \langle a, b \rangle)</tex>, в которой отрезки <tex>Q</tex> удовлетворяют следующим условиям : | ||
| + | − любой отрезок из <tex>Q</tex> содержит полосу <tex>\langle a, b \rangle</tex>; <br> | ||
| + | − нет пересечений отрезков внутри лестницы; <br> | ||
| + | − <tex>Q</tex> упорядочена по отношению <tex><_a</tex>. | ||
| + | }} | ||
| + | |||
| + | Часть отрезков лестницы внутри полосы будем называть '''ступеньками'''. | ||
==Алгоритм== | ==Алгоритм== | ||
Версия 17:35, 30 сентября 2013
Алгоритм Балабана — детерминированный алгоритм, позволяющий по множеству отрезков на плоскости получить множество точек, в которых эти отрезки пересекаются.
Введение
Решение задачи по поиску множества пересечений отрезков является одной из главных задач вычислительной геометрии. Тривиальный детерминированный алгоритм имеет временную сложность , и его суть заключается в проверке попарного пересечения отрезков. Сложнее, но эффективнее алгоритм Бентли-Оттмана [1] с оценкой сложности , в основе которого лежит метод заметающей прямой. Алгоритм, предложенный Чазелле и Едельсбруннером [2], имеет лучшую оценку , но в отличие от предыдущих методов требует квадратичной памяти. Оптимальный детерминированный алгоритм был предложен Балабаном [3] с временной оценкой сложности и памяти, где К - число пересекающихся отрезков. При количестве отрезков равным 2000 и большому количеству пересечений целесообразно использовать алгоритм Балабана. Однако в результате громоздкости и высокой сложности реализации алгоритма в большинстве практических задач используется алгоритм заметающей прямой Бентли-Оттмана.
Основные понятия
Введем некоторые обозначения. Пусть - множество всех точек пересечения отрезков из множества , а - количество таких пересечений ;
Через обозначим вертикальную полосу, которая ограничена прямыми и , а через отрезок с концами абсцисс и .
Рассмотрим взаимное расположение вертикальной полосы и отрезка .
| Определение: |
| Будем говорить, что отрезок , с концами абсцисс и :
- содержит(span) полосу , если ; |
Два отрезка и называются пересекающимися внутри полосы , если их точка пересечения лежит в пределах этой полосы.
Для двух множеств отрезков и определим множество как .
Обозначения и будут использоваться для описания подмножеств и , состоящих из пересекающихся пар отрезков в пределах полосы . Далее скобки используются для определения неупорядоченных наборов, а скобки используются для определения упорядоченных множеств.
Введем отношение порядка на множестве отрезков если оба отрезка пересекают вертикальную линию и точка пересечения этой прямой с отрезком лежит ниже точки пересечения с .
| Определение: |
| Лестница — это пара , в которой отрезки удовлетворяют следующим условиям :
− любой отрезок из содержит полосу ; |
Часть отрезков лестницы внутри полосы будем называть ступеньками.
Алгоритм
Примечания
Литература
Т.Вознюк, В.Терещенко — К построению эффективного решения задачи пересечения отрезков
Ф.Препарата, М.Шеймос — Вычислительная геометрия