En geometría , una cobertura de un polígono es un conjunto de unidades primitivas (por ejemplo, cuadrados) cuya unión es igual al polígono. Un problema de cobertura de polígono es un problema de encontrar una cobertura con un número menor de unidades para un polígono dado. Esta es una clase importante de problemas en geometría computacional . Hay muchos problemas de cobertura de polígonos diferentes, según el tipo de polígono que se esté cubriendo. Un ejemplo de problema de cobertura de polígono es: dado un polígono rectilíneo , encuentre el conjunto más pequeño de cuadrados cuya unión sea igual al polígono.
En algunos escenarios, no es necesario cubrir todo el polígono, sino solo sus bordes (esto se denomina cobertura de bordes de polígono ) o sus vértices (esto se denomina cobertura de vértices de polígono ).
En un problema de recubrimiento , las unidades en el recubrimiento pueden superponerse, siempre que su unión sea exactamente igual al polígono objetivo. Esto contrasta con un problema de empaquetamiento , en el que las unidades deben estar disjuntas y su unión puede ser más pequeña que el polígono objetivo, y con un problema de partición de polígonos , en el que las unidades deben estar disjuntas y su unión debe ser igual al polígono objetivo.
Un problema de cobertura de polígonos es un caso especial del problema de cobertura de conjuntos . En general, el problema de encontrar la cobertura de conjuntos más pequeña es NP-completo, pero para clases especiales de polígonos, la cobertura de polígonos más pequeña se puede encontrar en tiempo polinomial.
Una cubierta de un polígono P es una colección de unidades máximas, posiblemente superpuestas, cuya unión es igual a P.
Una cobertura mínima es una cobertura que no contiene ninguna otra cobertura (es decir, es un mínimo local).
Una cobertura mínima es una cobertura con el menor número de unidades (es decir, un mínimo global). Toda cobertura mínima es mínima, pero no al revés.
Un polígono rectilíneo siempre puede cubrirse con un número finito de vértices del polígono. [1] El algoritmo utiliza un enfoque de optimización local: construye la cobertura seleccionando iterativamente los cuadrados máximos que son esenciales para la cobertura (es decir, que contienen puntos descubiertos que no están cubiertos por otros cuadrados máximos) y luego eliminando del polígono los puntos que se vuelven innecesarios (es decir, innecesarios para soportar cuadrados futuros). Aquí hay un pseudocódigo simplificado del algoritmo:
Para los polígonos que pueden contener agujeros, encontrar un mínimo de dicha cobertura es NP-difícil . [2] Esta marcada diferencia entre polígonos sin agujeros y polígonos generales se puede explicar intuitivamente basándose en la siguiente analogía entre los cuadrados máximos en un polígono rectilíneo y los nodos en un gráfico no dirigido: [1]
En un polígono rectilíneo sin agujeros, todos los cuadrados máximos son continuadores o separadores; por lo tanto, un polígono de este tipo es análogo a un grafo de árbol . Un polígono general es análogo a un grafo general. Al igual que el problema de cobertura de vértices es polinómico para grafos de árbol pero NP-difícil para grafos generales, el problema de cobertura de cuadrados es lineal para polígonos sin agujeros pero NP-difícil para polígonos generales.
Es posible utilizar el algoritmo lineal para obtener una aproximación 2; es decir, una cobertura con como máximo 2 cuadrados opt , donde opt es el número de cuadrados en una cobertura mínima: [3]
El número de cuadrados en la cubierta resultante es como máximo opt + holes , donde holes es el número de agujeros. Es posible demostrar que opt ≥ holes . Por lo tanto, el número de cuadrados en la cubierta es como máximo 2 opt .
En el caso de polígonos rectilíneos generales, el problema de encontrar una cobertura mínima de rectángulos es NP-difícil, incluso cuando el polígono de destino no tiene agujeros. [4] Se han sugerido varias soluciones parciales para este problema:
Para un polígono rectilíneo que es semiortogonalmente convexo (es decir, solo en la dirección x ), se puede encontrar un recubrimiento mínimo por polígonos ortogonalmente convexos en tiempo O( n ^2), donde n es el número de vértices del polígono. Lo mismo es cierto para un recubrimiento por polígonos rectilíneos en estrella . [9]
El número de componentes ortogonalmente convexos en un recubrimiento mínimo se puede encontrar, en algunos casos, sin encontrar el recubrimiento mismo, en el tiempo O( n ). [10]
Un polígono estrellado rectilíneo es un polígono P que contiene un punto p , tal que para cada punto q en P , hay un polígono ortogonalmente convexo que contiene p y q .
El problema de cubrir un polígono con polígonos estrellados es una variante del problema de la galería de arte .
El gráfico de visibilidad para el problema de cubrir mínimamente polígonos rectilíneos sin agujeros con polígonos en estrella es un gráfico perfecto . Esta propiedad de perfección implica un algoritmo polinomial para encontrar una cobertura mínima de cualquier polígono rectilíneo con polígonos en estrella rectilíneos. [11]
La clase más general de polígonos para los que se pueden encontrar recubrimientos por cuadrados o rectángulos es la clase de polígonos sin ángulos agudos interiores. Esto se debe a que un ángulo agudo no puede ser cubierto por un número finito de rectángulos. Este problema es NP-hard, pero existen varios algoritmos de aproximación. [12]
En algunos casos, un polígono debe cubrirse no con rectángulos arbitrarios sino con rectángulos de una familia finita. [13]
Encontrar el conjunto más pequeño de triángulos que cubren un polígono dado es una tarea NP-difícil. También es difícil de aproximar: cualquier algoritmo de tiempo polinómico podría encontrar una cobertura con un tamaño de (1 + 1/19151) veces la cobertura mínima. [14]
Si el polígono está en posición general (es decir, no hay dos aristas colineales), entonces cada triángulo puede cubrir como máximo 3 aristas del polígono. Por lo tanto, cada triangulación de polígono es una aproximación 3-aproximada.
Si la cobertura está restringida a triángulos cuyos vértices son vértices del polígono (es decir, no se permiten puntos de Steiner ), entonces el problema es NP-completo.
Si no se permiten puntos de Steiner y el polígono está en posición general (es decir, no hay dos bordes colineales), entonces cada recubrimiento mínimo sin puntos de Steiner también es una partición mínima del polígono en triángulos (es decir, los triángulos en el recubrimiento mínimo no se superponen). [14] Por lo tanto, el problema de recubrimiento mínimo es idéntico al problema de triangulación de polígonos, que se puede resolver en tiempo O( n log n ). Nótese que si descartamos el supuesto de posición general, hay polígonos en los que los triángulos en el recubrimiento óptimo se superponen. Pensemos en la Estrella de David , por ejemplo.
El problema de cubrir sólo el límite de un polígono con triángulos es NP-completo, pero existe una aproximación 2 eficiente. [14]
Cubrir un polígono (que puede contener agujeros) con polígonos convexos es NP-difícil. [15] También se ha demostrado que es -completo. [16] Existe un algoritmo de aproximación O(log n ). [17]
Cubrir un polígono con polígonos convexos es NP-difícil incluso cuando el polígono objetivo no tiene agujeros . [4] También es APX-difícil , [17] pero hay un algoritmo de 6 aproximaciones para el caso sin agujeros. [18] El problema es NP-completo cuando el cubrimiento no debe introducir nuevos vértices (es decir, no se permiten puntos de Steiner ). [14]
Cubrir un polígono simple con polígonos estrellados es -completo , como lo es la versión en la que un punto en el núcleo de cada estrella debe estar contenido en un borde del polígono. [19]
Dado un conjunto S de puntos en el plano y un conjunto de cuadrados idénticos, el objetivo es encontrar el menor número de cuadrados que puedan cubrir todos los puntos en S.
Supongamos que, para cada punto p en S , ponemos un cuadrado centrado en p . Sea G S el gráfico de intersección de estos cuadrados. Nótese que dos puntos en S pueden ser cubiertos por un solo cuadrado, si y solo si los dos cuadrados centrados en ellos se superponen. Por lo tanto, una cobertura de cuadrados de los puntos en S es equivalente a una cobertura de clique de G S . Encontrar una cobertura de cuadrados más pequeña de S es NP-hard; la prueba es por reducción de 3SAT . [20]
Cubrir un polígono (que puede contener agujeros) con polígonos espirales es NP-difícil. [15]
También se ha estudiado el cubrimiento de un polígono con pseudotriángulos .
Información adicional se puede encontrar en. [21]