A especificação de qualquer grade 9x9 arbitrária requer a posição e o valor de cada quadrado. Uma codificação ingênua para isso pode fornecer 81 (x, y, valor) trigêmeos, exigindo 4 bits para cada x, y e valor (1-9 = 9 valores = 4 bits) para um total de 81x4x3 = 972 bits. Ao numerar cada quadrado, é possível reduzir as informações posicionais para 7 bits, diminuindo um pouco para cada quadrado e um total de 891 bits. Ao especificar uma ordem predeterminada, pode-se reduzir drasticamente isso para apenas os 4 bits de cada valor, totalizando 324 bits. No entanto, um sudoku pode ter números ausentes. Isso fornece o potencial de reduzir o número de números que precisam ser especificados, mas pode exigir bits adicionais para indicar posições. Usando nossa codificação de 11 bits de (posição, valor), podemos especificar um quebra-cabeça com pistas com bits, por exemplo, um quebra-cabeça mínimo (17) requer 187 bits. A melhor codificação que eu pensei até agora é usar um bit para cada espaço para indicar se ele está preenchido e, se houver, os 4 bits a seguir codificam o número. Isso requer bits, 149 para um quebra-cabeça mínimo ( ). Existe uma codificação mais eficiente, preferencialmente sem um banco de dados de cada configuração válida do sudoku? (Pontos de bônus por abordar um geral do quebra-cabeça )
Apenas me ocorreu que muitos quebra-cabeças serão uma rotação de outro ou terão uma permutação simples de dígitos. Talvez isso ajude a reduzir os bits necessários.
Segundo a Wikipedia ,
O número de grades de solução 9 × 9 Sudoku clássicas é 6.670.903.752.021.072.936.960 (sequência A107739 em OEIS) ou aproximadamente .
Se eu fiz minha matemática corretamente ( ), isso resulta em 73 (72,498) bits de informações para uma tabela de pesquisa.
Mas:
O número de soluções essencialmente diferentes, quando são consideradas simetrias como rotação, reflexão, permutação e nova rotulagem, mostrou ser apenas 5.472.730.538 [15] (sequência A109741 em OEIS).
Isso fornece 33 (32,35) bits, portanto, é possível que um método inteligente de indicar qual permutação usar possa ficar abaixo dos 73 bits completos.