Especificar cualquier cuadrícula arbitraria de 9x9 requiere dar la posición y el valor de cada cuadrado. Una codificación ingenua para esto podría dar 81 tripletes (x, y, valor), que requieren 4 bits para cada x, y, y valor (1-9 = 9 valores = 4 bits) para un total de 81x4x3 = 972 bits. Al numerar cada cuadrado, se puede reducir la información posicional a 7 bits, dejando caer un bit por cada cuadrado y un total de 891 bits. Al especificar un orden predeterminado, se puede reducir esto más drásticamente a solo 4 bits para cada valor para un total de 324 bits. Sin embargo, un sudoku puede tener números faltantes. Esto proporciona el potencial para reducir el número de números que deben especificarse, pero puede requerir bits adicionales para indicar posiciones. Usando nuestra codificación de 11 bits de (posición, valor), podemos especificar un rompecabezas con pistas con 11 bits, por ejemplo, un rompecabezas mínimo (17) requiere 187 bits. La mejor codificación que he pensado hasta ahora es usar un bit para cada espacio para indicar si está lleno y, de ser así, los siguientes 4 bits codifican el número. Esto requiere 81 + 4 n bits, 149 para un rompecabezas mínimo ( n = 17 ). ¿Existe una codificación más eficiente, preferiblemente sin una base de datos de cada configuración de sudoku válida? (Puntos de bonificación por abordar un n generaldelrompecabezas N × N )
Se me ocurrió que muchos acertijos serán una rotación de otro, o tendrán una simple permutación de dígitos. Quizás eso podría ayudar a reducir los bits necesarios.
De acuerdo con Wikipedia ,
El número de rejillas de solución Sudoku 9 × 9 clásicas es 6.670.903.752.021.072.936.960 (secuencia A107739 en OEIS), o aproximadamente .
Si hice mis cálculos correctamente ( ), que sale a 73 (72.498) bits de información para una tabla de búsqueda.
Pero:
Se demostró que el número de soluciones esencialmente diferentes, cuando se tienen en cuenta simetrías como la rotación, la reflexión, la permutación y el reencadenamiento, era solo de 5.472.730.538 [15] (secuencia A109741 en OEIS).
Eso da 33 (32.35) bits, por lo que es posible que un método inteligente para indicar qué permutación usar pueda llegar a estar por debajo de los 73 bits completos.