Spécifier une grille arbitraire 9x9 nécessite de donner la position et la valeur de chaque carré. Un codage naïf pour cela pourrait donner 81 triplets (x, y, valeur), nécessitant 4 bits pour chaque x, y et valeur (1-9 = 9 valeurs = 4 bits) pour un total de 81x4x3 = 972 bits. En numérotant chaque carré, on peut réduire les informations de position à 7 bits, en laissant tomber un bit pour chaque carré et un total de 891 bits. En spécifiant un ordre prédéterminé, on peut le réduire de façon plus drastique à seulement 4 bits pour chaque valeur pour un total de 324 bits. Cependant, un sudoku peut avoir des numéros manquants. Cela permet de réduire le nombre de nombres qui doivent être spécifiés, mais peut nécessiter des bits supplémentaires pour indiquer les positions. En utilisant notre codage 11 bits de (position, valeur), nous pouvons spécifier un puzzle avec indices avec11 n 81 + 4 n n = 17 n bits, par exemple un puzzle minimal (17) nécessite 187 bits. Le meilleur encodage auquel j'ai pensé jusqu'à présent est d'utiliser un bit pour chaque espace pour indiquer s'il est rempli et, si c'est le cas, les 4 bits suivants codent le nombre. Cela nécessite bits, 149 pour un puzzle minimal ( ). Existe-t-il un encodage plus efficace, de préférence sans base de données de chaque configuration sudoku valide? (Points bonus pour aborder un général de N × N puzzle)
Il m'est venu à l'esprit que de nombreux puzzles seront une rotation d'un autre, ou auront une simple permutation de chiffres. Cela pourrait peut-être aider à réduire les bits requis.
Selon Wikipedia ,
Le nombre de grilles de solution Sudoku 9 × 9 classiques est de 6 670 903 752 021 022 936 960 (séquence A107739 dans OEIS), soit environ .
Si j'ai bien fait mes calculs ( ), ce qui donne 73 (72.498) bits d'information pour une table de correspondance.
Mais:
Le nombre de solutions essentiellement différentes, lorsque l'on tient compte des symétries telles que la rotation, la réflexion, la permutation et le réétiquetage, n'était que de 5 472 730 538 [15] (séquence A109741 dans OEIS).
Cela donne 33 (32,35) bits, il est donc possible qu'une méthode intelligente d'indiquer quelle permutation à utiliser puisse descendre en dessous des 73 bits.