Coloriage de cartes et sudoku
Transcription
Coloriage de cartes et sudoku
Coloriage de cartes et sudoku 1 Problème de coloriage de cartes On se donne le problème suivant : étant donnée une carte géographique, on souhaite en colorier les pays en imposant que deux pays voisins aient toujours des couleurs différentes. On sait depuis le théorème des quatre couleurs (1976, Appel, Haken) qu’il est toujours possible de réaliser un tel coloriage avec seulement quatre couleurs (à condition que les pays soient connexes). On souhaite trouver un moyen algorithmique de colorier une carte de cette façon. L’idée est la suivante : on traduit la configuration géographique en un système polynomial où le nombre de variables est le nombre de pays de la carte, et on veut attribuer à chacune de ces variables une valeur (parmi quatre valeurs possibles) de sorte que le coloriage respecte la règle sur les voisins. Cette règle se traduit en contrainte sur le système polynomial. Soit n le nombre de pays apparaissant sur la carte, on numérote les pays de 1 à n. Soit A = C[X1 , . . . , Xn ] l’anneau des polynômes en n variables à coefficients dans C. On considère le système polynomial défini par les équations suivantes : {Xi4 − 1 = 0 / 1 ≤ i ≤ n} ∪ {Xi3 + Xi2 Xj + Xi Xj2 + Xj3 / les pays i et j sont voisins}. 1. Expliquer pourquoi une solution (a1 , . . . an ) à ce système fournit un coloriage de la carte. 2. Écrire un algorithme permettant de colorier une carte. On pourra utiliser un algorithme de bases de Gröbner. 3. Évaluer la complexité de l’algorithme proposé en fonction du nombre de pays. 2 Sudoku On veut écrire un algorithme du même type pour résoudre un sudoku. Le sudoku est un jeu datant de la 1979 inspiré du carré latin. Soit n ≥ 1 un entier, on se donne un carré à n2 lignes et n2 colonnes, et un ensemble de n symboles distincts. Ce carré est naturellement découpé en n2 carrés ayant chacun n lignes et n colonnes (les carrés dont les lignes sont numérotées de kn + 1 à (k + 1)n et les colonnes de ln + 1 à (l + 1)n, pour 0 ≤ k, l ≤ n − 1). Il s’agit ensuite de placer des symboles dans le carré de telle sorte que dans chaque ligne, chaque colonne et chacun des sous-carrés naturels, chaque symbole apparaisse une et une seule fois. En général, n = 3, et on peut prendre comme symboles les entiers de 1 à 9. Dans un premier temps, on pourra se contenter de s’intéresser à ce problème, bien que le cas général ne soit pas plus difficile (hormis la puissance de calcul nécessaire). Pour plus de simplicité, on choisira de toute façon comme « symboles »les entiers de 1 à n. On note Xij la variable correspondant à la case (i, j) du tableau. La première contrainte pour tous les éléments aij du tableau sera donc d’être racines du polynôme 1 (Xij − 1) . . . (Xij − n). Il sera bon de connaître le lemme suivant : Lemme 1. Soient K un corps, P ∈ K[T ] un polynôme à coefficients dans K. Alors, dans l’anneau K[X, Y ], X − Y divise P (X) − P (Y ). 1. Déterminer les équations correspondant à la contrainte « tous les éléments d’une même colonne sont distincts ». Faire de même pour les lignes. 2. Déterminer les équations correspondant à la contrainte « tous les éléments d’un même sous-carré naturel sont distincts ». 3. Expliquer comment faire pour résoudre un sudoku donné à l’aide de ces équations. 4. Programmer la résolution et l’appliquer à l’exemple suivant : 8 4 3 1 8 7 4 1 7 1 2 4 8 6 1 2 6 8 5 7 2 3 9 3 2 8 5 2 5. Cet algorithme permet-il de tester l’unicité d’une solution ? Expliquer. 2