Je suis intéressé par une légère variante du carrelage, le puzzle: chaque bord d'une tuile (carrée) est étiqueté avec un symbole de , et deux tuiles peuvent être placées l'une à côté de l'autre si le symbole sur le bord opposé d'une tuile est et le symbole sur le bord opposé de l'autre tuile est , pour certains . Puis, étant donné un ensemble de tuiles, peuvent-elles être placées dans un carré de (rotation mais pas retournement des tuiles) avec tous les bords correspondant correctement? (Il existe également une variante de ce problème dans laquelle quatre bords de cadrage de sont fournis et les pièces doivent s'insérer correctement dans ce cadre).k ˉ k k ∈ { 1 … n } m 2 m × m 1 × m
Je sais que ce problème est NP-complet pour suffisamment grand , mais les limites que j'ai vues sur semblent être assez grandes; Je m'intéresse au problème pour les petites valeurs de et en particulier pour , le cas «zéro-un» (où chaque bord est étiqueté soit ou et les bords avec un doivent être mis en correspondance avec les bords avec un ). Ici, il n'y a (avec une symétrie de rotation) que six types de tuiles (la tuile tout-zéros, la tuile tout-un, la tuile avec trois zéros et un, la tuile avec trois uns et un zéro, et deux tuiles distinctes avec deux zéros et deux, '0011' et '0101'), donc une instance de problème n'est qu'une spécification den n n = 1 0 1 0 1 met un ensemble de cinq nombres , , , , et (représentant le nombre de chaque type de tuile) avec . Le problème est évidemment en NP (avec donné en unaire) puisqu'une solution peut simplement être présentée puis vérifiée en polynôme (en m), mais est-il connu pour être NP-complet, ou existe-t-il un algorithme de programmation dynamique qui peut être appliqué ici? Qu'en est-il du cas «encadré» où la spécification du problème comprend également les quatre bords du carré qui doivent être appariés? (Évidemment, si le boîtier sans cadre est NP-complet, le boîtier encadré l'est presque certainement aussi)
la source
Réponses:
Puisque vous avez mentionné que vous souhaitez résoudre ce problème pour de petites valeurs de , je vous suggère d'essayer de l'implémenter dans un solveur SAT ou en tant que programme linéaire entier (ILP). Soit on pourra encoder les contraintes, mais de manière légèrement différente:n
Pour SAT, il y a un encodage très propre du choix de la tuile qui va dans chaque carré, et un encodage légèrement moins net de la contrainte concernant le nombre de chaque type de tuile (en utilisant l'arithmétique des bits).
Pour ILP, il y a un encodage très net de la contrainte concernant le nombre de chaque type de tuile disponible, et un encodage un peu moins net des contraintes sur lesquelles les tuiles peuvent être adjacentes les unes aux autres (mais elle est toujours exprimable, puisque vous pouvez exprimer des formules booléennes arbitraires dans ILP).
J'attendre à ce que pour les petites ou moyennes entreprises , cette approche pourrait fonctionner efficacement.n
la source