Particionar un rectángulo sin dañar los rectángulos internos

12

C es un rectángulo paralelo al eje.

C1,,Cn son rectángulos paralelos entre ejes pares tal que , así:C1CnC

ingrese la descripción de la imagen aquí

Una partición de C que preserva los rectángulosC es una partición C=E1EN , de modo que Nn , Ei son rectángulos paralelos en el interior de pares disjuntos, y para cada i=1,,n : CiEi , es decir, cada rectángulo existente está contenido en un nuevo rectángulo único, como este:

ingrese la descripción de la imagen aquí

¿Qué es un algoritmo para encontrar una partición de preservación de rectángulo con una pequeña ?N

En particular, ¿hay un algoritmo para encontrar una partición de preservación de rectángulo con partes?N=O(n)

Erel Segal-Halevi
fuente

Respuestas:

4

NUEVA RESPUESTA: el siguiente algoritmo simple es asintóticamente óptimo:

Estire cada uno de los rectángulos arbitrariamente, en la mayor medida posible de modo que los rectángulos permanezcan separados por pares.Ci

El número de agujeros es como máximo . Esto es asintóticamente óptimo, ya que hay configuraciones en las que el número de agujeros es al menos .k2kO(k)

Las pruebas están en este documento .


ANTIGUA RESPUESTA:

El siguiente algoritmo, aunque no es óptimo, es aparentemente suficiente para encontrar una partición de preservación de rectángulo con partes .N=O(n)

El algoritmo trabaja con un polígono rectilíneo , que se inicializa en el rectángulo .PC

Fase 1: Elija un rectángulo que esté adyacente a un límite occidental de (es decir, no hay otro rectángulo entre el lado occidental de y un límite occidental de ). Lugar dentro de y estirar hasta que toque el límite occidental de . Deje que (para ) sea la versión extendida de . Deje . Repita la fase 1 veces hasta que todasCiPCjCiPCiPPEii=1,,nCiP=PEinnLos rectángulos originales se colocan y se estiran. En la imagen a continuación, un posible orden de colocación de los rectángulos es :C1,C2,C4,C3

ingrese la descripción de la imagen aquí

Ahora, es un polígono rectilíneo (posiblemente desconectado), como este:P

ingrese la descripción de la imagen aquí

Afirmo que el número de vértices cóncavos en es como máximo . Esto se debe a que, cada vez que se elimina un rectángulo estirado de , hay 3 posibilidades:P2nP

  • Se agregan 2 nuevos vértices cóncavos (como al colocar );C1,C4
  • Se agregan 3 vértices cóncavos nuevos y se elimina 1 (como con );C3
  • Se agregan 4 vértices cóncavos nuevos y se eliminan 2 (como con ).C2

Fase 2: Partición en rectángulos paralelos al eje usando un algoritmo existente (ver Keil 2000, páginas 10-13 y Eppstein 2009, páginas 3-5 para una revisión).P

Keil cita un teorema que dice que el número de rectángulos en una partición mínima está limitado por 1 + el número de vértices cóncavos. Por lo tanto, en nuestro caso, el número es como máximo , y el número total de rectángulos en la partición es .2n+1N3n+1


Este algoritmo no es óptimo. Por ejemplo, en el ejemplo anterior da mientras que la solución óptima tiene . Entonces quedan dos preguntas:N=13N=5

A. ¿Es correcto este algoritmo?

B. ¿Existe un algoritmo de tiempo polinómico para encontrar el óptimo , o al menos una mejor aproximación?N

Erel Segal-Halevi
fuente
Bueno, en la fase 1, agrega celdas de partición, cada una de las cuales contiene exactamente un rectángulo inicial y no se superpone en otro. En la fase 2, divide el espacio restante, por lo que las celdas creadas en la fase 2 no se cruzan con ninguno de los rectángulos iniciales. La prueba de corrección parece bastante sencilla, ¿o me perdí algo?
Boson
@Boson, el punto en el que no estoy seguro es que el número de vértices cóncavos es como máximo . Parece "obvio" que solo hay 3 posibilidades como escribí, pero es posible que haya perdido alguna otra posibilidad. 2n
Erel Segal-Halevi