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