Покрытие прямоугольника Sweep Line


9

Мне дали упражнение, к сожалению, я сам не справился.

Существует множество прямоугольников и прямоугольник R 0 . Используя алгоритм подметания плоскости, определите, полностью ли покрыто R 0 набором R 1 . , R n .R1..RnR0R0R1..Rn

Более подробную информацию о принципе алгоритмов стреловидной линии смотрите здесь .

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

  • набор точек событий (он хранит конечные точки сегментов и точек пересечений)Q
  • состояние (динамическая структура для множества сегментов, пересекающих линию развертки)T

Общая идея: предположим, что линия развертки - это вертикальная линия, которая начинает приближаться к набору прямоугольников слева. Сортируйте все координаты x прямоугольников и сохраняйте их в Q в возрастающем порядке - нужно взять O ( n log n ) . Начните с первой точки события, для каждой точки определите набор прямоугольников, которые пересекаются с заданной координатой x , идентифицируйте непрерывные сегменты прямоугольников пересечения и проверьте, полностью ли они покрывают R 0 в текущей координате x . С T в качестве двоичного дерева это займет O ( журналlxQO(nlog⁡n)xR0xT . Если какая-либо часть R 0 остается открытой, то R 0 не полностью покрыта.O(log⁡n)R0R0

Детали: Идея алгоритма пересечения сегментов заключалась в том, что пересекаются только смежные сегменты. Основываясь на этом факте, мы создали статус и поддерживали его в течение всего алгоритма. Я попытался найти аналогичную идею в этом случае, и пока безуспешно, единственное, что я могу сказать, это то, что два прямоугольника пересекаются, если их соответствующие координаты x и y перекрываются.Txy

TT

T


1
Это выровненные по оси прямоугольники или нет? (Вы можете сделать это в любом случае, но это легче, если они есть.)
— Луи,

@ Луис, давайте немного упростим это, давайте предположим, что есть прямоугольники, выровненные по оси, но, конечно, общий случай более интересен
— ком

Какие точки прямоугольника являются точками событий? Все углы, левый верхний ...?
— Рафаэль

@Raphael, только x - это точки события
— ком

Ответы:


6

nRii≥1

  • RiRi
  • RiRi

O(log⁡n)

R0R0O(nlog⁡n)O(n)

В общем случае очевидный трюк не такой быстрый. Используйте стандартный алгоритм линии развертки, чтобы вычислить все плоское подразделение, индуцированное прямоугольниками.

F′R0R0O(1)O(n2log⁡n)Ω(n2) по размеру, поэтому мы используем столько места в худшем случае, поэтому время является «экзистенциально оптимальным», но не «чувствительным к выходу».

R0F′RifRiffRiffRi

O(nlog⁡n)O(n2log⁡n)


QxTxiRRi,i≥1R0R0

RiRi
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.