Projet Stage C - Détails 1 Méthode simple Cette méthode consiste à partir d’un coin du plan (dans notre cas coin haut gauche) et à poser les carreaux ligne par ligne, avec toujours contrainte que deux carreaux adjacents aient leurs arêtes communes de même couleur. Les carreaux sont testés un par un. Trois cas peuvent produire : le la la se 1. le carreau courant respecte la contrainte, alors on le pose et on passe à la position suivante 2. le carreau courant ne respecte pas la contrainte, on teste un nouveau carreau 3. si tous les carreaux ont été testés sans succés sur la position actuelle, alors on retourne à la position précédente, on enlève le carreau déjà posée et on recommence ces différentes étapes Cet algorithme prend fin lorsque l’étape 3 se produit alors que l’on est dans la position initiale. Le temps que prend cet algorithme ainsi que de ceux reposant sur le même principe est proportionnel au nombre de retours en arrière (backtrack) effectués. Examinons le jeu de carreaux de la figure 1. Figure 1 – Un nouveau jeu de carreaux Pour réaliser un pavage 5 × 5, l’algorithme débutera naïvement avec le premier carreau, celui comportant une arête rouge au sud. Il fera de même 1 jusqu’à la fin de la ligne. Pour la deuxième ligne, il n’a pas d’autre choix que de prendre le carreau comportant une arête rouge au nord, le répétant ainsi sur toute cette ligne. Pour la troisième ligne, il devra prendre obligatoirement le carreau comportant une arête bleue au nord. On aboutit donc à la situation de la figure 2. Figure 2 – Etat du carrelage au bout de 3 lignes Or pour débuter une nouvelle ligne, il faudrait un carreau comportant une arête noire au nord, ce qui n’est pas le cas dans ce jeu. L’algorithme va alors devoir effectuer plusieurs retours en arrière pour retourner à son point de départ sans aucun carreau. Nouvel essai cette fois, l’algorithme va poser sur les trois premières lignes respectivement le deuxième carreau avec une arête verte au sud, la cinquième carreau arête verte au nord, bleue au sud et enfin le quatrième carreau, bleue au nord, noire au sud, voir la figure 3. Figure 3 – Les 3 nouvelles lignes Et l’on se retrouve alors avec le même soucis que dans la figure 2, à savoir la nécessité de disposer d’un carreau avec une arête noire au nord. Finalement après 53920 retours en arrière, l’algorithme parvient au résultat de la figure 4. Pour être complet ajoutons qu’à partir de 10 × 10 le temps de carrelage devient absolument insupportable. 2 Figure 4 – Un carrelage 5 × 5 utilisant le jeu de la figure 1 On peut s’étonner qu’un si grand nombre de retours en arrière soient nécessaires pour un si petit carrelage. Cet algorithme n’a qu’une vision limitée du carrelage pour placer chaque tuile. En effet, l’ordre adopté étant de gauche à droite et de haut en bas, seuls le carreau de gauche et le carreau du dessus sont examinés avant d’en ajouter un nouveau. Ce sont les seules contraintes locales. On ne sait pas si le choix actuel nécessitera un lourd retour en arrière par la suite. 2 Méthode avec ligne de prévision Dans la section précédente, nous sommes arrivés à la conclusion que la méthode basique manquait de vision sur les choix qu’elle fait localement. Partant de ce constat, on va essayer d’examiner si le choix actuel aura des répercussions dans le futur. Plus concrétement, lorsque l’on examine la possibilité de poser un carreaux t, on va regarder comme précédemment le carreau de gauche et le carreau de droite, mais aussi regarder si le choix de t permettra de poser un carreau ou plusieurs carreaux en dessous, sur la ligne suivante donc. Si c’est le cas, alors le carreau t est posé, sinon on teste un autre carreau. Et si aucun carreau ne convient on revient en arrière comme dans l’algorithme précédent. On augmente ainsi les contraintes sur le choix d’un carreay t, puisque maintenant on doit tenir compte, en plus du carreau de gauche et du haut, de la possibilité de mettre un carreau en dessous, qui dépendent quant à lui des carreaux pouvant être mis sur leur gauche. 3 Figure 5 – Les contraintes avec la ligne de prévision Dans la figure 5, on a représenté en pointillé les ensembles de carreaux possibles sur la ligne suivante, et en rouge les différentes contraintes. Comme on le constate, chaque nouveau carreau posé rajoute des contraintes sur les carreaux possibles de la ligne de prévision. Au fur et à mesure de l’avancement du carrelage, on peut donc se retrouver rapidement avec aucun carreau possible, et on effectuera ainsi beaucoup plus tôt un retour en arrière. Dans l’exemple précédent, on détecterait une impossibilité dés le début de la troisième ligne, avant même de poser un carreau. Le carrelage de la figure 4 ne nécessiterait alors plus que 13475 retours en arrière. Bien que cette réduction d’un quart ne semble pas spectaculaire, on peut se convaincre de son efficacité avec le jeu de carreau de la figure 6. Alors que l’algorithme basique nécessite environ 800 millions de retours en arrière pour réaliser un carrelage de dimensions 40 × 40, l’algorithme avec ligne de prévision ne nécessite que 9 retour en arrière pour parvenir au même résultat. Figure 6 – Un jeu de carreaux pénible pour la méthode basique 4