La specifica di qualsiasi griglia 9x9 arbitraria richiede di indicare la posizione e il valore di ciascun quadrato. Una codifica ingenua per questo potrebbe dare 81 triplette (x, y, valore), che richiedono 4 bit per ogni x, y e valore (1-9 = 9 valori = 4 bit) per un totale di 81x4x3 = 972 bit. Numerando ogni quadrato, è possibile ridurre le informazioni sulla posizione a 7 bit, facendo cadere un bit per ogni quadrato e un totale di 891 bit. Specificando un ordine predeterminato, è possibile ridurlo in modo più drastico a soli 4 bit per ciascun valore per un totale di 324 bit. Tuttavia, un sudoku può avere numeri mancanti. Ciò fornisce il potenziale per ridurre il numero di numeri che devono essere specificati, ma può richiedere bit aggiuntivi per indicare le posizioni. Usando la nostra codifica a 11 bit di (posizione, valore), possiamo specificare un puzzle con indizi con bit, ad esempio un puzzle minimo (17) richiede 187 bit. La migliore codifica a cui ho pensato finora è usare un bit per ogni spazio per indicare se è pieno e, in tal caso, i 4 bit seguenti codificano il numero. Ciò richiede bit, 149 per un puzzle minimo ( ). Esiste una codifica più efficiente, preferibilmente senza un database di ciascuna configurazione di sudoku valida? (Punti bonus per affrontare un puzzle generale da )
Mi è appena venuto in mente che molti enigmi saranno una rotazione di un altro o avranno una semplice permutazione delle cifre. Forse questo potrebbe aiutare a ridurre i bit richiesti.
Secondo Wikipedia ,
Il numero di griglie classiche della soluzione Sudoku 9 × 9 è 6.670.903.752.021.072.936.960 (sequenza A107739 in OEIS), o circa .
Se avessi fatto bene la mia matematica ( ), ciò avrebbe prodotto 73 (72.498) bit di informazioni per una tabella di ricerca.
Ma:
Il numero di soluzioni essenzialmente diverse, quando si tiene conto delle simmetrie come rotazione, riflessione, permutazione e rietichettatura, è stato mostrato essere solo 5.472.730.538 [15] (sequenza A109741 in OEIS).
Ciò fornisce 33 (32.35) bit, quindi è possibile che un metodo intelligente per indicare quale permutazione usare possa scendere sotto i 73 bit completi.