Wenn Sie ein beliebiges 9x9-Raster angeben möchten, müssen Sie die Position und den Wert jedes Quadrats angeben. Eine naive Codierung könnte dazu 81 (x, y, value) Triplets ergeben, die 4 Bits für jedes x, y und einen Wert (1-9 = 9 Werte = 4 Bits) für insgesamt 81x4x3 = 972 Bits erfordern. Durch Nummerieren jedes Quadrats kann die Positionsinformation auf 7 Bits reduziert werden, wobei für jedes Quadrat ein Bit und insgesamt 891 Bits verworfen werden. Durch Angabe einer vorgegebenen Reihenfolge kann diese drastischer auf nur die 4 Bits für jeden Wert von insgesamt 324 Bits reduziert werden. In einem Sudoku können jedoch Zahlen fehlen. Dies bietet die Möglichkeit, die Anzahl der Nummern zu verringern, die angegeben werden müssen, erfordert jedoch möglicherweise zusätzliche Bits zum Anzeigen von Positionen. Mit unserer 11-Bit-Codierung von (Position, Wert) können wir ein Puzzle mit Hinweisen mit angeben Bits, zB ein minimales (17) Puzzle benötigt 187 Bits. Die beste Kodierung, an die ich bisher gedacht habe, ist die Verwendung eines Bits für jedes Leerzeichen, um anzuzeigen, ob es gefüllt ist, und, falls ja, die folgenden 4 Bits, um die Zahl zu kodieren. Dies erfordert Bits, 149 für ein minimales Puzzle ( ). Gibt es eine effizientere Codierung, vorzugsweise ohne eine Datenbank für jedes gültige Sudoku-Setup? (Bonuspunkte für das Adressieren eines allgemeinen aus Rätseln)
Mir ist gerade eingefallen, dass viele Puzzles eine Rotation einer anderen sein oder eine einfache Permutation von Ziffern haben. Vielleicht könnte das helfen, die benötigten Bits zu reduzieren.
Laut Wikipedia ,
Die Anzahl der klassischen 9 × 9-Sudoku-Lösungsgitter beträgt 6.670.903.752.021.072.936.960 (Sequenz A107739 in OEIS) oder ungefähr .
Wenn ich meine Rechnung richtig gemacht habe ( ), ergibt das 73 (72,498) Bits an Informationen für eine Nachschlagetabelle.
Aber:
Die Anzahl der wesentlich unterschiedlichen Lösungen unter Berücksichtigung von Symmetrien wie Rotation, Reflexion, Permutation und Relabelling betrug lediglich 5.472.730.538 [15] (Sequenz A109741 in OEIS).
Das ergibt 33 (32,35) Bits, so dass es möglich ist, dass eine clevere Methode zum Anzeigen der zu verwendenden Permutation unter die vollen 73 Bits fällt.