NOVA RESPOSTA: o seguinte algoritmo simples é assintoticamente ideal:
Estique cada um dos retângulos arbitrariamente, na extensão máxima possível, de modo que os retângulos permaneçam separados por pares.Ci
O número de furos é no máximo . Isso é assintoticamente ideal, pois há configurações nas quais o número de furos é pelo menos .k−2k−O(k−−√)
As provas estão neste artigo .
RESPOSTA ANTIGA:
O algoritmo a seguir, embora não seja o ideal, aparentemente é suficiente para encontrar uma partição de preservação de retângulo com partes .N=O(n)
O algoritmo funciona com um polígono rectilíneo , que é inicializado para o rectângulo .PC
Fase 1: Escolha um retângulo adjacente a um limite ocidental de (ou seja, não há outro retângulo entre o lado oeste de e um limite ocidental de ). Lugar dentro e esticá-lo até que ele toca a fronteira ocidental da . Seja (para ) a versão esticada de . Seja . Repita a Fase 1 vezes até que todos osCiPCjCiPCiPPEii=1,…,nCiP=P∖Einnretângulos originais são colocados e esticados. Na imagem abaixo, uma possível ordem de colocação dos retângulos é :C1,C2,C4,C3
Agora, é um polígono retilíneo (possivelmente desconectado), assim:P
Afirmo que o número de vértices côncavos em é no máximo . Isso ocorre porque, sempre que um retângulo esticado é removido de , há 3 possibilidades:P2nP
- 2 novos vértices côncavos são adicionados (como ao colocar );C1,C4
- 3 novos vértices côncavos são adicionados e 1 é removido (como em );C3
- 4 novos vértices côncavos são adicionados e 2 são removidos (como em ).C2
Fase 2: Partição em retângulos paralelos ao eixo usando um algoritmo existente (consulte Keil 2000, páginas 10-13 e Eppstein 2009, páginas 3-5 para uma revisão).P
Keil cita um teorema que diz que o número de retângulos em uma partição mínima é limitado por 1 + o número de vértices côncavos. Portanto, no nosso caso, o número é no máximo e o número total de retângulos na partição é .2n+1N≤3n+1
Este algoritmo não é ideal. Por exemplo, no exemplo acima, fornece enquanto a solução ideal tem . Portanto, restam duas perguntas:N=13N=5
A. Este algoritmo está correto?
B. Existe um algoritmo de tempo polinomial para encontrar o ideal , ou pelo menos uma melhor aproximação?N