Алгоритм Балабана — различия между версиями
| Строка 26: | Строка 26: | ||
Два отрезка <tex>s_1</tex> и <tex>s_2</tex> называются пересекающимися внутри полосы <tex>\langle b, e \rangle</tex>, если их точка пересечения лежит в пределах этой полосы. <br> | Два отрезка <tex>s_1</tex> и <tex>s_2</tex> называются пересекающимися внутри полосы <tex>\langle b, e \rangle</tex>, если их точка пересечения лежит в пределах этой полосы. <br> | ||
Для двух множеств отрезков <tex>S</tex> и <tex>S'</tex> определим множество <tex>Int(S, S')</tex> как <tex>\{ {s, s'} | (s \in S, s' \in S') \& (s \ intersect \ s') \}</tex>. | Для двух множеств отрезков <tex>S</tex> и <tex>S'</tex> определим множество <tex>Int(S, S')</tex> как <tex>\{ {s, s'} | (s \in S, s' \in S') \& (s \ intersect \ s') \}</tex>. | ||
| + | |||
| + | Обозначения <tex>Int_{b, e}(S)</tex> и <tex>Int_{b, e}(S, S')</tex> будут использоваться для описания подмножеств <tex>Int(S)</tex> и <tex>Int(S, S')</tex>, состоящих из пересекающихся пар отрезков в пределах полосы <tex>\langle b, e \rangle</tex>. Далее скобки <tex>\{\}</tex> используются для определения неупорядоченных наборов, а скобки <tex>()</tex> используются для определения упорядоченных множеств. | ||
| + | |||
==Алгоритм== | ==Алгоритм== | ||
Версия 16:47, 30 сентября 2013
Алгоритм Балабана — детерминированный алгоритм, позволяющий по множеству отрезков на плоскости получить множество точек, в которых эти отрезки пересекаются.
Введение
Решение задачи по поиску множества пересечений отрезков является одной из главных задач вычислительной геометрии. Тривиальный детерминированный алгоритм имеет временную сложность , и его суть заключается в проверке попарного пересечения отрезков. Сложнее, но эффективнее алгоритм Бентли-Оттмана [1] с оценкой сложности , в основе которого лежит метод заметающей прямой. Алгоритм, предложенный Чазелле и Едельсбруннером [2], имеет лучшую оценку , но в отличие от предыдущих методов требует квадратичной памяти. Оптимальный детерминированный алгоритм был предложен Балабаном [3] с временной оценкой сложности и памяти, где К - число пересекающихся отрезков. При количестве отрезков равным 2000 и большому количеству пересечений целесообразно использовать алгоритм Балабана. Однако в результате громоздкости и высокой сложности реализации алгоритма в большинстве практических задач используется алгоритм заметающей прямой Бентли-Оттмана.
Основные понятия
Введем некоторые обозначения. Пусть - множество всех точек пересечения отрезков из множества , а - количество таких пересечений ;
Через обозначим вертикальную полосу, которая ограничена прямыми и , а через отрезок с концами абсцисс и .
Рассмотрим взаимное расположение вертикальной полосы и отрезка .
| Определение: |
| Будем говорить, что отрезок , с концами абсцисс и :
- содержит(span) полосу , если ; |
Два отрезка и называются пересекающимися внутри полосы , если их точка пересечения лежит в пределах этой полосы.
Для двух множеств отрезков и определим множество как .
Обозначения и будут использоваться для описания подмножеств и , состоящих из пересекающихся пар отрезков в пределах полосы . Далее скобки используются для определения неупорядоченных наборов, а скобки используются для определения упорядоченных множеств.
Алгоритм
Примечания
Литература
Т.Вознюк, В.Терещенко — К построению эффективного решения задачи пересечения отрезков
Ф.Препарата, М.Шеймос — Вычислительная геометрия