Mosaïque d'un polygone orthogonal avec des carrés


12

É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:

Je recherche un algorithme pour un carrelage minimal avec des carrés .


mmm je peux imaginer que ce soit NP-dur. Je vais essayer de formuler quelque chose.
Realz Slaw

1
La version de minimisation avec trous autorisés est NP-Hard, mais pour les polygones orthogonaux simplement connectés (c'est-à-dire sans trous), elle dispose d'un algorithme polynomial. Cependant, si dans votre problème les tailles sont entières et que vous voulez vraiment dire une couverture minimale et non une couverture minimale, alors dans ce cas un algorithme polynomial est possible.
Parham

Mmm, j'ai besoin d'une preuve que les carrés minimaux seront positionnés rationnellement et auront des tailles rationnelles; ou encore plus, que si l'entrée est de taille entière et positionnée en entier, alors les carrés minimums le seront aussi (pour la réduire à SAT). Intuitivement, je suppose que c'est vrai, avez-vous des idées pour le prouver?
Realz Slaw

@MahmoudAlimohamadi: pouvez-vous fournir les titres / auteurs des articles où le problème du carrelage des polygones rectilignes (avec ou sans trous) avec des carrés est étudié (et résolu).
Vor

2
btw, je suppose que vous vouliez dire minim um au lieu de minim al .
Realz Slaw

Réponses:


15

Je vais essayer de montrer que ce problème est NP-difficile, par réduction de .Planar-3-SAT


Réduction de Planar-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 :

entrez la description de l'image ici         entrez la description de l'image ici         entrez la description de l'image ici

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.

entrez la description de l'image ici         entrez la description de l'image ici         entrez la description de l'image ici

Gauche Un gadget 5X4 . Au milieu et à droite: Deux états de partition carré minimal possibles .

gadget de point de terminaison

TF

entrez la description de l'image ici

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:

  • 22
  • 3

Exemple:

entrez la description de l'image ici

72

Voici comment il est utilisé:

entrez la description de l'image ici         entrez la description de l'image ici

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:

entrez la description de l'image ici         entrez la description de l'image ici

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".

A¬BAB

Cependant, cela laisse le cas sans contrainte:

entrez la description de l'image ici

Si nous combinons deux i-fils , nous pouvons obtenir une implication bidirectionnelle, essentiellement une égalité booléenne (in):

entrez la description de l'image ici         entrez la description de l'image ici

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 .

l12+2

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é.

  • Les fils i sont de couleur rouge et verte.
  • 3
  • Chaque broche de porte aura un contact vert et rouge; un fil doit se connecter correctement.
  • Règle invariante: un i-wire doit être poussé dans la direction opposée à l'autre i-wire , chaque porte le suppose et s'en assure (sauf indication contraire).
  • Étant donné que chaque fil contient une implication bidirectionnelle, il transporte les valeurs de porte à porte comme un fil dans un circuit.
  • Chaque fil doit être connecté à une porte aux deux extrémités. . À défaut, cela peut ruiner les hypothèses de certaines portes que je décris et la règle invariante ci-dessus; cependant, les portes qui ont des points de terminaison à travers les fils sont sûres - vous pouvez connecter des fils parasites à ces points de terminaison sans vous soucier de la ruine de la porte.
  • les fils doivent être de longueur impaire, y compris les fils de tout circuit auquel ils se connectent; Cependant, je décrirai ci - dessous une porte à sauts impairs qui permet à un fil de longueur paire de devenir de longueur impaire.

Images :

entrez la description de l'image ici

Ci-dessus: un fil .

entrez la description de l'image ici        entrez la description de l'image ici

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

entrez la description de l'image ici       entrez la description de l'image ici

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:

entrez la description de l'image ici         entrez la description de l'image ici

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:

entrez la description de l'image ici

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:

entrez la description de l'image ici

odd-skip-gate : Odd sautant un fil

Parfois, il n'est pas pratique d'avoir uniquement des fils de longueur impaire. Par exemple:

entrez la description de l'image ici

Comme vous pouvez le voir, cette petite extension est un peu ennuyeuse. Voici une solution correspondante, utilisant la porte 4X3 :

entrez la description de l'image ici

Donc, en transformant cela en une porte, nous obtenons la porte impaire (en filaire):

entrez la description de l'image ici

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:

entrez la description de l'image ici

Convainquez-vous que cela fonctionne:

entrez la description de l'image ici         entrez la description de l'image ici

A

La porte peut être orientée selon les besoins.

split-gate : Fractionnement d'un fil

Fractionnement d'un fil, filaire:

entrez la description de l'image ici

Convainquez-vous que cela fonctionne:

entrez la description de l'image ici

A

entrez la description de l'image ici

A

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:

entrez la description de l'image ici

Et une vue des deux états possibles:

entrez la description de l'image ici         entrez la description de l'image ici

La porte peut être orientée selon les besoins.

clause-gate

Pour la clause-gate , nous introduisons d'abord le clause-gadget :

entrez la description de l'image ici

3

Voici à quoi ressemble la porte:

3

Explication:

  1. Commencez par le gadget de clause et suivez les flèches.
  2. Les lignes sans flèche signifient qu'il fait partie d'un circuit, mais il n'est pas forcé dans un état par la porte.
  3. L'état du gadget-clause oblige l'un des noeuds finaux à être évalué comme vrai .

3-CNF

La porte peut être orientée selon les besoins.

Réduction

Φ(x)Planar-3-SAT

Φ(x)=inCi,C={(xjxkxl)}

Une aide visuelle (source originale: Terrain Guarding is NP-Hard (PDF) , reproduit en tikz):

entrez la description de l'image ici

Alors:

  1. xixxi¬xi
  2. Connectez les portes les unes aux autres avec une non-porte , de sorte qu'elles nient logiquement les valeurs des autres.
  3. Placez les polygones de portes des variables à leur emplacement dans l'incorporation planaire.
  4. Pour chaque clause, placez une porte de clause à l'emplacement de la clause dans l'incorporation planaire.
  5. En utilisant les portes décrites ci-dessus, connectez toutes les variables à leurs clauses.
  6. Exécutez un algorithme de parition carré minimal sur l'union résultante de tous les polygones de la porte (le circuit entier).
  7. Si l'algorithme retourne la somme de toutes les tailles d' état de partition carrée minimale (soustrayant pour les coins partagés), alors il est satisfaisable. S'il n'est pas satisfaisable, il forcera un gadget contraint à se diviser en carrés plus petits, augmentant ainsi le nombre de carrés nécessaires pour partitionner le circuit.

Pourquoi ça marche

  • Chaque gadget a une taille d' état de partition carrée minimale ; c'est-à-dire qu'une partition carrée minimale de ce gadget a une certaine taille.
  • Certains gadgets ont plusieurs états avec cette taille; chacun de ces états est une partition minimale carrée valide .
  • Lorsque les gadgets sont combinés uniquement dans les coins, la somme des états de partition carrée minimale des gadgets est * toujours l' état de partition carrée minimUM de leur union; vous pouvez le voir intuitivement: se joindre au coin ne donne pas suffisamment d'espace pour qu'un carré se développe / se connecte avec un carré d'un autre gadget.
  • En combinant gadgets à l'angle ne diminue pas la taille minimale partition surface totale , il ne se rapporte et contraignent les gadgets à chaque-autre.
  • Avec les portes illustrées ci-dessus, vous pouvez contraindre suffisamment les états, de sorte que si la formule logique n'est pas satisfaisante, un ou plusieurs gadgets devront se diviser en carrés encore plus petits et augmenter la taille minimale de la partition carrée .

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.


3
Wow, c'est absolument impressionnant. Malheureusement, je ne suis pas assez intelligent pour vérifier la réduction, mais je vous crois sur parole :) Merci!
Erel Segal-Halevi

1
Ainsi, la situation en carrelage est l'opposé de la situation en revêtement: en revêtement, le revêtement carré est polynomial et le revêtement rectangulaire est NP-dur, tandis qu'en carrelage, le revêtement carré est NP-dur et le revêtement rectangulaire est polynomial.
Erel Segal-Halevi


8

NO(N3/2)

"Couvrant des polygones orthogonaux avec des carrés." LJ Aupperle et SE Conn et JM Keil et Joseph O'Rourke. Proc. 26th Allerton Conf. Commun. Control Comput. , pp. 97-106, 1988. ( lien pour télécharger le scan PDF )

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.


lol J'étais à mi-chemin d'une formulation :(. Très intéressant quand même! Bienvenue sur cs.SE.
Realz Slaw

2
Si je comprends bien, ce document permet aux carrés de se chevaucher (c'est-à-dire qu'il s'agit d'un problème de couverture). Je m'intéresse au cas où les carrés ne sont pas autorisés à se chevaucher (c'est-à-dire qu'il s'agit d'un problème de partition / tuilage).
Erel Segal-Halevi

@ErelSegalHalevi: Oh, je suis désolé, je n'ai pas lu votre question attentivement.
Joseph O'Rourke

2
Oh alors je vais continuer: D
Realz Slaw
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.