Алгоритм Балабана — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
Строка 1: Строка 1:
 
{{В разработке}}
 
{{В разработке}}
  
'''Алгоритм Балабана''' {{---}} детерминированный алгоритм, позволяющий по множеству отрезков на плоскости получить множество точек, в которых эти отрезки пересекаются <br>
+
'''Алгоритм Балабана''' {{---}} детерминированный алгоритм, позволяющий по множеству отрезков на плоскости получить множество точек, в которых эти отрезки пересекаются. <br>
  
 
==Введение==
 
==Введение==
  
Методы поиска пересечений отрезков разделяются на детерминированные и недетерминированные. Тривиальный детерминированный алгоритм имеет временную сложность <tex>O(n^2)</tex> и суть его заключается в проверке попарного пересечения отрезков.
+
Решение задачи по поиску множества пересечений отрезков является одной из главных задач вычислительной геометрии. Тривиальный детерминированный алгоритм имеет временную сложность <tex>O(n^2)</tex>, и его суть заключается в проверке попарного пересечения отрезков.
 +
Сложнее, но эффективнее алгоритм Бентли-Оттмана <ref>[http://neerc.ifmo.ru/wiki/index.php?title=Алгоритм_Бентли-Оттмана ''Алгоритм Бентли-Оттмана'']</ref> с оценкой сложности <tex>O((n + k)\ log(n)+k)</tex>, в основе которого лежит метод заметающей прямой.
 +
Алгоритм, предложенный Чазелле и Едельсбруннером <ref>[http://www.cs.princeton.edu/~chazelle/pubs/IntersectLineSegments.pdf ''An optimal algorithm for intersecting line segments in the plane'']</ref>, имеет лучшую оценку <tex>O(n\ log(n) + k)</tex>, но в отличие от предыдущих методов требует квадратичной памяти.
 +
Оптимальный детерминированный алгоритм был предложен Балабаном <ref>[http://www.cs.sfu.ca/~binay/813.2011/Balaban.pdf ''I.J. Balaban. An optimal algorithm for finding segments intersections. In Proceedings of the Eleventh Annual Symposium on Computational Geometry, ACM Press, New York, 1995. - pp. 211–219.'']</ref> с временной оценкой сложности <tex>O(n\ log(n) + k)</tex> и <tex>O(n)</tex> памяти, где К - число пересекающихся отрезков. При количестве отрезков равным 2000 и большому количеству пересечений целесообразно использовать алгоритм Балабана. Однако в результате громоздкости и высокой сложности реализации алгоритма в большинстве практических задач используется алгоритм заметающей прямой Бентли-Оттмана.
  
Сложнее, но эффективнее алгоритм Бентли-Отмена <ref>[http://neerc.ifmo.ru/wiki/index.php?title=Алгоритм_Бентли-Оттмана ''Алгоритм Бентли-Оттмана'']</ref> с оценкой сложности <tex>O((n + k)\ log(n)+k)</tex>, в основе которого лежит метод заметающей прямой.
+
==Основные понятия==
  
Алгоритм, предложенный Чазеле и Едельсбруннером <ref>[http://booksshare.net/books/math/preparata-f/1989/files/vichgeometr.pdf ''Ф.Препарата, М.Шеймос {{---}} Вычислительная геометрия (стр. 348 - 350)'']</ref>, имеет лучшую оценку <tex>O(n\ log(n) + k)</tex>, но в отличие от предыдущих методов требует квадратичной памяти.
+
Введем некоторые обозначения. Пусть <tex>Int(S)</tex> - множество всех точек пересечения отрезков из множества <tex>S</tex>, а <tex>K = |Int(S)|</tex> - количество таких пересечений ;<br>
 +
Через <tex>\langle b, e \rangle</tex> обозначим вертикальную полосу, которая ограничена прямыми <tex>x = b</tex> и <tex>x = e</tex>, а через <tex>s</tex> отрезок с концами абсцисс <tex>l</tex> и <tex>r</tex>.<br>
 +
Рассмотрим взаимное расположение вертикальной полосы <tex>\langle b, e \rangle</tex> и отрезка <tex>s</tex>.  
  
Оптимальный детерминированный алгоритм был предложен Балабаном <ref>[http://www.cs.sfu.ca/~binay/813.2011/Balaban.pdf ''I.J. Balaban. An optimal algorithm for finding segments intersections. In Proceedings of the Eleventh Annual Symposium on Computational Geometry, ACM Press, New York, 1995. - pp. 211–219.'']</ref> с временной оценкой сложности <tex>O(n\ log(n) + k)</tex> и <tex>O(n)</tex> памяти.
+
{{Определение
 +
|definition=
 +
Будем говорить, что отрезок <tex>s</tex>, с концами абсцисс <tex>l</tex> и <tex>r</tex> :
 +
- '''содержит'''(span) полосу <tex>\langle b, e \rangle</tex>, если <tex>l \le b \le e \le r</tex>; <br>
 +
- '''внутренний'''(inner) для полосы <tex>\langle b, e \rangle</tex>, если <tex>b < l < r < e</tex>; <br>
 +
- '''пересекает'''(cross) полосу <tex>\langle b, e \rangle</tex> в других случаях.
 +
}}
 +
 
 +
Два отрезка <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>.
  
 
==Алгоритм==
 
==Алгоритм==
Строка 23: Строка 37:
 
[http://www.graphicon.ru/proceedings/2010/conference/RU/Se4/021.pdf ''Т.Вознюк, В.Терещенко {{---}} К построению эффективного решения задачи пересечения отрезков'']<br>
 
[http://www.graphicon.ru/proceedings/2010/conference/RU/Se4/021.pdf ''Т.Вознюк, В.Терещенко {{---}} К построению эффективного решения задачи пересечения отрезков'']<br>
 
[http://booksshare.net/books/math/preparata-f/1989/files/vichgeometr.pdf ''Ф.Препарата, М.Шеймос {{---}} Вычислительная геометрия'']<br>
 
[http://booksshare.net/books/math/preparata-f/1989/files/vichgeometr.pdf ''Ф.Препарата, М.Шеймос {{---}} Вычислительная геометрия'']<br>
 +
  
 
[[Категория: Вычислительная геометрия]]
 
[[Категория: Вычислительная геометрия]]

Версия 16:08, 30 сентября 2013

Эта статья находится в разработке!

Алгоритм Балабана — детерминированный алгоритм, позволяющий по множеству отрезков на плоскости получить множество точек, в которых эти отрезки пересекаются.

Введение

Решение задачи по поиску множества пересечений отрезков является одной из главных задач вычислительной геометрии. Тривиальный детерминированный алгоритм имеет временную сложность [math]O(n^2)[/math], и его суть заключается в проверке попарного пересечения отрезков. Сложнее, но эффективнее алгоритм Бентли-Оттмана [1] с оценкой сложности [math]O((n + k)\ log(n)+k)[/math], в основе которого лежит метод заметающей прямой. Алгоритм, предложенный Чазелле и Едельсбруннером [2], имеет лучшую оценку [math]O(n\ log(n) + k)[/math], но в отличие от предыдущих методов требует квадратичной памяти. Оптимальный детерминированный алгоритм был предложен Балабаном [3] с временной оценкой сложности [math]O(n\ log(n) + k)[/math] и [math]O(n)[/math] памяти, где К - число пересекающихся отрезков. При количестве отрезков равным 2000 и большому количеству пересечений целесообразно использовать алгоритм Балабана. Однако в результате громоздкости и высокой сложности реализации алгоритма в большинстве практических задач используется алгоритм заметающей прямой Бентли-Оттмана.

Основные понятия

Введем некоторые обозначения. Пусть [math]Int(S)[/math] - множество всех точек пересечения отрезков из множества [math]S[/math], а [math]K = |Int(S)|[/math] - количество таких пересечений ;
Через [math]\langle b, e \rangle[/math] обозначим вертикальную полосу, которая ограничена прямыми [math]x = b[/math] и [math]x = e[/math], а через [math]s[/math] отрезок с концами абсцисс [math]l[/math] и [math]r[/math].
Рассмотрим взаимное расположение вертикальной полосы [math]\langle b, e \rangle[/math] и отрезка [math]s[/math].


Определение:
Будем говорить, что отрезок [math]s[/math], с концами абсцисс [math]l[/math] и [math]r[/math] :

- содержит(span) полосу [math]\langle b, e \rangle[/math], если [math]l \le b \le e \le r[/math];
- внутренний(inner) для полосы [math]\langle b, e \rangle[/math], если [math]b \lt l \lt r \lt e[/math];

- пересекает(cross) полосу [math]\langle b, e \rangle[/math] в других случаях.


Два отрезка [math]s_1[/math] и [math]s_2[/math] называются пересекающимися внутри полосы [math]\langle b, e \rangle[/math], если их точка пересечения лежит в пределах этой полосы.
Для двух множеств отрезков [math]S[/math] и [math]S'[/math] определим множество [math]Int(S, S')[/math] как [math]\{ {s, s'} | (s \in S, s' \in S') \& (s \ intersect \ s') \}[/math].

Алгоритм

Примечания

Литература

Т.Вознюк, В.Терещенко — К построению эффективного решения задачи пересечения отрезков
Ф.Препарата, М.Шеймос — Вычислительная геометрия