Temos uma grade . Nós temos uma coleção de retângulos nessa grade, cada retângulo pode ser representado como um -by- binário matriz . Queremos cobrir a grade com esses retângulos.
A versão de decisão deste conjunto cobre o problema NP-complete?
- Entrada: coleção de retângulos na grade (tamanho da entrada: ) e
- Saída: Subconjunto com e contendo para cada célula pelo menos um retângulo que a cobre.
Descobri que o caso 1D ( ) pode ser resolvido em tempo polinomial por meio de programação dinâmica: qualquer cobertura ideal será a união de
- uma cobertura ideal para alguns subproblemas de cobrir as primeiras células .
- um retângulo 1D, ou seja, um intervalo, cobrindo as células restantes 1 .
Não acho que o DP possa funcionar para o problema 2D: para o problema 1D, você tem um subproblema a ser resolvido, mas para o 2D você tem subproblemas (número de Nordeste) caminhos de rede na grade).
Acho que o problema pode ser NP, mas não tenho certeza (embora pareça mais difícil que P), e não consegui encontrar uma redução polinomial de um problema NP-completo (3-SAT, Vertex Cover, ...)
Qualquer ajuda ou dica é bem-vinda.
|=
=|
Respostas:
Graças à dica de j_random_hacker, encontrei uma solução para reduzir a cobertura de vértices ao problema de grade:
Nós fazemos um -por- | V | grade de 3 por 3 blocos, ou seja, um 3 | E | -por- 3 | V | grade, com vértices ordenados como colunas { v 1 , … , v N 1 } e arestas ordenadas como linhas { e 1 , … , e N 2 } . Vamos construir retângulos nesta grade (o desenho abaixo ajudará muito a entender os diferentes retângulos usados)| E| | V| 3 | E| 3 | V| { v1 1, … , VN1 1} { e1 1, … , EN2}
Para cada vértice, criamos um retângulo do tipo 1, que cobre a coluna central da coluna de blocos correspondente a esse vértice, então temos retângulos do tipo 1.| V|
Cada bloco corresponde a um casal único , com e i = ( v a , v b ) para cada bloco, adicionamos um retângulo do tipo 2:( eEu, vj) eEu= ( vuma, vb)
Agora, para cada aresta, construímos retângulos do tipo 4, entre os blocos finais, temos dois retângulos para a segunda linha:
Então agora, para cobrir a grade:
Para cobrir, para uma determinada aresta, a parte entre os blocos finais da aresta ainda não cobertos (segunda e terceira linhas da linha de blocos), podemos usar:
Observe que, em qualquer caso, precisamos de pelo menos dois retângulos do tipo 4.
fonte