НОВЫЙ ОТВЕТ: следующий простой алгоритм асимптотически оптимален:
Растяните каждый из прямоугольников произвольно, насколько это возможно, чтобы прямоугольники оставались попарно непересекающимися.Ci
Количество отверстий не более . Это асимптотически оптимально, поскольку существуют конфигурации, в которых число отверстий составляет не менее .k−2k−O(k−−√)
Доказательства в этой статье .
СТАРЫЙ ОТВЕТ:
Следующий алгоритм, хотя и не является оптимальным, по-видимому, достаточен для нахождения сохраняющего прямоугольник разбиения с частями.N=O(n)
Алгоритм работает с прямолинейным многоугольником , который инициализирован в прямоугольнике .PC
Фаза 1: Выберите прямоугольник который примыкает к западной границе (то есть, нет другого прямоугольника между западной стороной и западной границей ). Место в и растягивать его , пока он не коснется западная границы . Пусть (для ) - растянутая версия . Пусть . Repeate Фаза 1 раз , пока всеCiPCjCiPCiPPEii=1,…,nCiP=P∖EinnОригинальные прямоугольники размещаются и растягиваются. На изображении ниже возможный порядок размещения прямоугольников: :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+1N≤3n+1
Этот алгоритм не является оптимальным. Например, в приведенном выше примере это дает то время как оптимальное решение имеет . Таким образом, остаются два вопроса:N=13N=5
А. Является ли этот алгоритм правильным?
B. Существует ли алгоритм полиномиального времени для нахождения оптимального или хотя бы лучшего приближения?N