Grille recouverte de rectangles


15

Nous avons une grille N1×N2 . Nous avons une collection de rectangles sur cette grille, chaque rectangle peut être représenté en tant que N1 -by- N2 matrice binaire R . Nous voulons couvrir la grille avec ces rectangles.

La version de décision de cet ensemble de problèmes de couverture NP-complète?

  • Entrée: Collection C={R1,R2,,RL} de rectangles sur la grille (taille d'entrée: N1N2L ), et KN+
  • Sortie: sous-ensemble avec | S | K et S contenant pour chaque cellule au moins un rectangle la recouvrant.SC|S|KS

Exemple visuel du problème

J'ai trouvé que le cas 1D ( ) peut être résolu en temps polynomial par programmation dynamique: toute couverture optimale va être l'union deN2=1

  • une couverture optimale pour certains sous-problèmes de couverture des premières cellules .N1-n1
  • un rectangle 1D, c'est-à-dire un intervalle, couvrant les cellules restantes .n1

Je ne pense pas cependant que DP puisse fonctionner pour le problème 2D: pour le problème 1D, vous avez un sous-problème à résoudre, mais pour 2D vous avez ( N 1 + N 2N1sous-problèmes (nombre de trajets du réseau Nord-Est sur la grille).(N1+N2N2)

Je pense que le problème pourrait être NP, mais je ne suis pas sûr (bien qu'il semble plus difficile que P), et je n'ai pas réussi à trouver une réduction polynomiale d'un problème NP-complet (3-SAT, Vertex Cover, ...)

Toute aide ou indice est le bienvenu.


3
Astuce: recherchez une réduction de Vertex Cover, dans laquelle nous créons un par | V | grille de blocs, dont chacun est un bloc de 3 par 3 éléments de matrice. Chaque rangée de blocs correspond à une arête et contiendra 2 blocs spécialement conçus correspondant à ses sommets d'extrémité. Pour chaque sommet, il y aura une hauteur - 3 | E | , rectangle de largeur 1 qui traverse la colonne centrale de la colonne de blocs 3 par 3 correspondant à ce sommet. Comment pouvez-vous forcer le total d'une couverture k -vertex valide à coûter exactement | E | ( | V | + 3 )|E||V|3|E|k ? (Vous aurez besoin d'autres rectangles.)|E|(|V|+3)+k
j_random_hacker

Je pense que c'est probablement un exercice de devoirs, donc je suis un peu réticent à en dire beaucoup plus pour l'instant. La formule de coût que j'ai donnée contient quelques indices. Gardez à l'esprit que vous pouvez forcer au moins 1 de plusieurs rectangles en faisant d'eux les seuls rectangles qui couvrent un élément de la matrice (le cas spécial de 1 rectangle est également utile). FWIW, j'ai aussi essayé d'utiliser un -par- | V | grille d'abord, où le choix d'un sommet correspondrait à "barrer" une ligne et une colonne correspondante, mais n'a pas pu déterminer comment forcer la i- ème colonne à être choisie lorsque le|V||V|je ème ligne est choisie ou vice versa. je
j_random_hacker

J'ai eu le même problème avec -par- | V | la grille. Je pense que je vois quel type de solution vous avez en tête (je n'ai pas exactement la même formule de coût cependant), voir mon montage. Au fait, ce n'est pas un exercice de devoirs. C'est un problème combinatoire qui est apparu dans un problème d'ingénierie réel. Nous le résolvons avec MIP, mais je voulais être sûr que le problème était NP (et n'avait pas de solution polynomiale). Dans tous les cas, si vous confirmez que la solution est valide, vous pouvez mettre votre indice comme réponse et je le validerai (puisque j'ai trouvé la solution avec votre aide). |V||V|
Yann

1
Oui, c'est presque exactement la réduction que j'avais en tête! :) J'ai allongé légèrement vos rectangles de "type 4" à une extrémité: là où les vôtres occupent 2 cellules dans un bloc, les miennes occupent les 3. comme des rectangles de "type 2" pour . Enfin, j'ai un rectangle occupant les cellules centrale gauche et inférieure gauche dans chaque bloc d'extrémité gauche (inversé horizontalement pour chaque bloc d'extrémité droit). Vous pouvez donc couvrir les 2 rangées inférieures de tous les blocs, y compris entre les blocs d'extrémité, à l'aide d'un motif ou . une<j<b|==|
j_random_hacker

1
J'aime votre -par- 3 | V | idée de réduction. Avec cela, contrairement au 3 | E | -par- 3 | V | réduction, il peut y avoir des solutions à coût minimum qui ne correspondent pas aux couvertures des sommets - mais toutes ces solutions peuvent être transformées en solutions de coût égal (au minimum) en utilisant le même argument que dans votre dernier point, donc ce n'est pas un problème pour la réduction :)|E|3|V|3|E|3|V|
j_random_hacker

Réponses:


4

Grâce à l'indice de j_random_hacker, j'ai trouvé une solution pour réduire la couverture de sommet au problème de grille:

Nous faisons un -par- | V | grille de blocs 3 par 3, soit un 3 | E | -par- 3 | V | grille, avec des sommets classés en colonnes { v 1 , , v N 1 } et des bords classés en lignes { e 1 , , e|E||V|3|E|3|V|{v1,,vN1}. Nous allons construire des rectangles sur cette grille (le dessin ci-dessous aidera beaucoup à comprendre les différents rectangles utilisés){e1,,eN2}

entrez la description de l'image ici

|V|

Chaque bloc correspond à un couple unique , avec e i = ( v a(eje,vj)eje=(vune,vb)

  • j<uneb<j
  • j=unej=b
  • si une<j<b

|E||V|

(eje,vune)(eje,vb)

  • (eje,vune)(eje,vb)

Nous avons 2|E|

Maintenant, pour chaque arête, nous construisons des rectangles de type 4, entre les blocs d'extrémité, nous avons deux rectangles pour la deuxième ligne:

  • Un allant du carré central du premier bloc au carré central gauche du deuxième bloc.
  • Un allant du carré central droit du premier bloc au carré central du deuxième bloc.
  • Et les deux mêmes rectangles pour la troisième rangée.

4|E|

Alors maintenant, pour couvrir la grille:

  • |E|(|V|+2)|V|+4|E|

Pour recouvrir, pour un bord donné, la partie entre les blocs d'extrémité de bord non encore recouverte (deuxième et troisième rangées de la rangée de blocs), on peut soit utiliser:

  • les quatre rectangles de type 4.
  • un rectangle de type 1 et deux rectangles de type 4.

Notez que dans tous les cas, nous avons besoin d'au moins deux rectangles de type 4.

|E|(|V|+4)+k

  • |E|(|V|+2)

  • |E|(|V|+4)+k|E|(|V|+4)+k

|E|(|V|+6)+|V|9|V||E|

|E|3|V||V|+4|E|3|E|+k

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.