Разбиение прямоугольника без ущерба для внутренних прямоугольников


12

C - параллельный оси прямоугольник.

C1,,CnC1CnC

введите описание изображения здесь

Прямоугольник , сохраняющее разбиение на разбиение C = E_1 \ чашка \ ДоТы \ чашка E_N , таким образом, что N \ GEQ п , то e_i попарно-салона непересекающейся оси параллельных прямоугольников, и для каждого I = 1, \ точек , n : C_i \ subseteq E_i , то есть каждый существующий прямоугольник содержится в уникальном новом прямоугольнике, например:C N n E i i = 1 , , n C iE iC=E1ENNnEii=1,,nCiEi

введите описание изображения здесь

Что такое алгоритм для поиска сохраняющего прямоугольник раздела с небольшим N ?

В частности, существует ли алгоритм для нахождения сохраняющего прямоугольник разбиения с N=O(n) частями?

Ответы:


4

НОВЫЙ ОТВЕТ: следующий простой алгоритм асимптотически оптимален:

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

Количество отверстий не более . Это асимптотически оптимально, поскольку существуют конфигурации, в которых число отверстий составляет не менее .k2kO(k)

Доказательства в этой статье .


СТАРЫЙ ОТВЕТ:

Следующий алгоритм, хотя и не является оптимальным, по-видимому, достаточен для нахождения сохраняющего прямоугольник разбиения с частями.N=O(n)

Алгоритм работает с прямолинейным многоугольником , который инициализирован в прямоугольнике .PC

Фаза 1: Выберите прямоугольник который примыкает к западной границе (то есть, нет другого прямоугольника между западной стороной и западной границей ). Место в и растягивать его , пока он не коснется западная границы . Пусть (для ) - растянутая версия . Пусть . Repeate Фаза 1 раз , пока всеCiPCjCiPCiPPEii=1,,nCiP=PEinnОригинальные прямоугольники размещаются и растягиваются. На изображении ниже возможный порядок размещения прямоугольников: :C1,C2,C4,C3

введите описание изображения здесь

Теперь является прямолинейным многоугольником (возможно, отключенным), например так:P

введите описание изображения здесь

Я утверждаю, что число вогнутых вершин в не больше . Это потому, что всякий раз, когда вытянутый прямоугольник удаляется из , есть 3 варианта:P2nP

  • Добавлены 2 новые вогнутые вершины (как при размещении );C1,C4
  • 3 новые вогнутые вершины добавлены и 1 удалена (как с );C3
  • Добавлены 4 новые вогнутые вершины и 2 удалены (как с ).C2

Этап 2. Разделение на прямоугольные оси, используя существующий алгоритм (см. Обзор Keil 2000, страницы 10-13 и Eppstein 2009, страницы 3-5 ).P

Кейл приводит теорему, которая гласит, что число прямоугольников в минимальном разбиении ограничено 1 + количеством вогнутых вершин. Следовательно, в нашем случае число не больше , а общее количество прямоугольников в разбиении равно .2n+1N3n+1


Этот алгоритм не является оптимальным. Например, в приведенном выше примере это дает то время как оптимальное решение имеет . Таким образом, остаются два вопроса:N=13N=5

А. Является ли этот алгоритм правильным?

B. Существует ли алгоритм полиномиального времени для нахождения оптимального или хотя бы лучшего приближения?N


Итак, в фазе 1 вы добавляете ячейки разделов, каждая из которых содержит ровно один начальный прямоугольник и не перекрывается с другим. На этапе 2 вы разделяете оставшееся пространство, поэтому ячейки, созданные на этапе 2, не пересекаются ни с одним из начальных прямоугольников. Доказательство правильности кажется довольно простым, или я что-то упустил?
бозон

@ Босон в том, что я не уверен, что количество вогнутых вершин не более . Кажется «очевидным», что, как я писал, существует только 3 возможности, но я, возможно, упустил еще одну возможность. 2n
Эрель Сегал-Халеви
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.