Étant donné un polygone orthogonal (un polygone dont les côtés sont parallèles aux axes), je veux trouver le plus petit ensemble de carrés intérieurs disjoints, dont l'union est égale au polygone.
J'ai trouvé plusieurs références à des problèmes légèrement différents, tels que:
- Couvrir un polygone orthogonal avec des carrés - similaire à mon problème, mais les carrés couvrant peuvent se chevaucher. Ce problème a une solution polynomiale ( Aupperle, Conn, Keil et O'Rourke, 1988 ; Bar-Yehuda et Ben-Hanoch, 1996 ).
- Mosaïque / décomposition / partitionnement d'un polygone orthogonal en rectangles . Ce problème a une solution polynomiale ( Keil, 2000 ; Eppstein, 2009 ).
- Couvrir un polygone orthogonal avec des rectangles - ce problème est connu pour être NP-complet ( Culberson et Reckhow, 1988 ).
Je recherche un algorithme pour un carrelage minimal avec des carrés .
algorithms
computational-geometry
tiling
Erel Segal-Halevi
la source
la source
Réponses:
Je vais essayer de montrer que ce problème est NP-difficile, par réduction de .Planar- 3 -SAT
Réduction dePlanar- 3 -SAT
Quelques gadgets de base
Les gadgets sont des configurations internes de géométrie qui nous permettront de construire des portes pour une utilisation dans un circuit, auquel nous réduirons .Planar- 3 -SAT
4X3-gadget
Ce gadget a deux états de partition minimal-carré valides :
Gauche Un gadget 4X3 . Au milieu et à droite: Deux états de partition carré minimal possibles .
5X4-gadget
Ce gadget est exactement comme un gadget 4X3 , juste avec des dimensions plus grandes.
Gauche Un gadget 5X4 . Au milieu et à droite: Deux états de partition carré minimal possibles .
gadget de point de terminaison
Gauche: filaire du gadget de point de terminaison . Centre: point final à valeur réelle. Droite: point final à valeur fausse.
gadget i-wire
Un gadget i-wire est l'abréviation de fil d'implication .
Règles:
Exemple:
Voici comment il est utilisé:
Figure 8,9 , à gauche: filaire i-wire sur deux points d'extrémité . À droite: Union.
Maintenant, si un point d'extrémité est dans le bon état, il force l'autre point d' extrémité dans une position poussée. Exemple:
Gauche: Diagramme de séparation carré; l'interrupteur gauche est baissé, "pousse" tous les carrés sur le fil i et enfin, pousse l'autre interrupteur ( point final ). À droite: schéma de séparation carré; le point d'extrémité gauche est plein, "pousse" tous les carrés vers le bas sur l' i-wire et force le point d' extrémité gauche à être "vers le haut".
Cependant, cela laisse le cas sans contrainte:
Si nous combinons deux i-fils , nous pouvons obtenir une implication bidirectionnelle, essentiellement une égalité booléenne (in):
Ainsi, deux i-fils peuvent transporter une relation pleine d'égalité, tout comme un circuit - en fait, il est un circuit. Nous utiliserons ces paires pour construire un fil utilisable .
les fils i peuvent être orientés selon les besoins.
câble
Un fil se compose d'une paire de fils i qui sont connectés aux mêmes portes à chaque extrémité.
Images :
Ci-dessus: un fil .
Gauche et droite: Deux états de partition carrés minimaux possibles d'un fil . Notez que si le fil n'a que cette longueur, il ne pourra pas se déplacer vers la droite ou la gauche et devra casser un carré en morceaux plus petits.
les fils peuvent être orientés selon les besoins.
bend-gate : Plier un fil
Gauche: vue filaire. À droite: vue de l'Union.
Notez l'utilisation du gadget 4X3 . Il est utilisé pour fixer le fil rouge à une longueur impaire.
Voici les deux états de partition carré minimal possibles du virage:
Gauche et droite: Deux états de partition minimale-carré-carré possibles d'un fil de flexion.
La porte peut être orientée selon les besoins. De toute évidence, cette porte peut être mise en miroir pour fonctionner dans l'autre sens.
Incliner un fil
Il est facile de déplacer un fil. Illustration filaire:
porte-valeur-nommée
Une porte de valeur nommée est essentiellement un point d'extrémité en tant que porte avec un contact filaire:
odd-skip-gate : Odd sautant un fil
Parfois, il n'est pas pratique d'avoir uniquement des fils de longueur impaire. Par exemple:
Comme vous pouvez le voir, cette petite extension est un peu ennuyeuse. Voici une solution correspondante, utilisant la porte 4X3 :
Donc, en transformant cela en une porte, nous obtenons la porte impaire (en filaire):
La porte peut être orientée selon les besoins.
twist-gate : torsion d'un fil
Parfois, vous obtenez les fils i rouges et noirs sur les mauvais côtés pour une utilisation avec une porte . Dans ce cas, une porte torsadée est fournie pour tordre les fils i rouges et noirs sur les côtés opposés.
Illustration filaire:
Convainquez-vous que cela fonctionne:
La porte peut être orientée selon les besoins.
split-gate : Fractionnement d'un fil
Fractionnement d'un fil, filaire:
Convainquez-vous que cela fonctionne:
Remarque: Chaque fil entrant et sortant du séparateur doit absolument se connecter à un point d'extrémité quelque part, afin de maintenir l'invariant. Vous pouvez également ajouter des points de terminaison à chacune des paires de fils du séparateur.
La porte peut être orientée selon les besoins.
pas de porte
La porte non prend un fil et sort un fil qui a les implications inverses. Il s'agit essentiellement d'une porte torsadée, sauf qu'elle réétiquette les colorations des fils. Le not-gate ressemble à ceci:
Et une vue des deux états possibles:
La porte peut être orientée selon les besoins.
clause-gate
Pour la clause-gate , nous introduisons d'abord le clause-gadget :
Voici à quoi ressemble la porte:
Explication:
La porte peut être orientée selon les besoins.
Réduction
Une aide visuelle (source originale: Terrain Guarding is NP-Hard (PDF) , reproduit en tikz):
Alors:
Pourquoi ça marche
sources de graphe
Vous pouvez également voir des images plus grandes en supprimant les suffixes "s", "m", "l" des URL imgur. Par exemple, vous pouvez voir une image plus grande de ceci: http://i.stack.imgur.com/6CKlGs.jpg en allant sur http://i.stack.imgur.com/6CKlG.jpg . Remarquez les «s» manquants avant le
.jpg
.la source
Cependant, le revêtement résultant peut inclure des carrés qui se chevauchent. Vous recherchez un carrelage, où les carrés ne sont pas autorisés à se chevaucher, donc votre problème n'est pas tout à fait le même.
la source