Hinweis: Hierbei handelt es sich um das Standard-9x9-Sudoku-Puzzle. Die Lösung muss nur gelöste, rechtliche Rätsel unterstützen . Eine Lösung muss also keine leeren Zellen unterstützen und kann sich auf die Eigenschaften eines gelösten Sudoku-Puzzles verlassen.
Ich fragte mich, aber mir fiel keine Antwort ein, mit der ich zufrieden war. Eine naive Lösung würde ein Byte für jede Zelle (81 Zellen) verwenden, was insgesamt 648 Bits entspricht. Eine komplexere Lösung würde das gesamte Sudoku-Puzzle in einer Zahl zur Basis 9 (eine Ziffer pro Zelle) und ⌈ log 2 ( 9 81 ) ) ) = 257 Bits erfordern .
Es kann jedoch noch verbessert werden. Wenn Sie beispielsweise 8 der 9 Zahlen in einem 3x3-Subgrid kennen, können Sie trivial auf die 9. schließen. Sie können diese Überlegungen bis zu dem Punkt fortsetzen, an dem diese Frage auf die Anzahl der eindeutigen gelösten Sudokus hinausläuft. Jetzt können Sie eine große Nachschlagetabelle verwenden, die jede Binärzahl einem Sudoku-Puzzle zuordnet, aber das wäre keine brauchbare Lösung.
Also meine Frage:
Antworten:
Entspricht der Antwort von Ratchet Freak, wenn Sie die nicht mit einem Stern versehenen Zellen in der folgenden Matrix jeweils in einem 3x3-Feld ausfüllen und immer das nächste Feld auswählen, das Zeilen oder Spalten mit einem Feld teilt, in dem Sie sich befinden Haben Sie bereits ausgefüllt, erhalten Sie ein Muster wie das folgende für die Anzahl der Auswahlmöglichkeiten pro Schritt (Füllen Sie zuerst das obere mittlere Feld, dann das obere rechte Feld usw.).
In jedem 3x3-Feld nach dem ersten werden drei der verbleibenden sechs Ziffern in einer einzelnen Zeile lokalisiert, sobald Sie eine Zeile oder Spalte des Felds ausgefüllt haben. Wählen Sie zuerst ihre Positionen aus und füllen Sie dann die verbleibenden drei Zellen aus. (Die tatsächliche Reihenfolge der auszufüllenden Zellen hängt davon ab, was Sie bereits wissen. Die Anzahl der Auswahlmöglichkeiten ist jedoch nie größer als die von mir angegebene.)
Nachdem Sie diese Felder ausgefüllt haben, werden alle Sterne bestimmt.
Wenn ich richtig gerechnet habe, ergibt das 87 Bit. Laut Peter Shors Kommentar sind im letzten 3x3-Block einige zusätzliche Einsparungen zu verzeichnen: Jeder Wert ist in einer von vier Zellen lokalisiert, und jede Zeile enthält mindestens eine Zelle mit nur vier möglichen Werten, also mit Sicherheit die Faktoren dafür Block sollte mit 4, nicht mit 6 beginnen, aber ich verstehe die verbleibenden Faktoren in Shors Antwort nicht.
quelle
6 5 4 4 3 2 3 2 1
meiner Meinung nach6 5 4 6 5 4 3 2 1
für den schlimmsten Fall sein.Wenn Sie mit der Antwort von @ Peter fortfahren, finden Sie hier eine Liste der Worst-Case-Möglichkeiten für jede Zelle, während Sie sie von oben links ausfüllen
Dies ergibt 4.24559E + 29 Möglichkeiten oder 99 Bits
edit: habe vergessen, dass das letzte Quadrat vollständig von allen anderen bestimmt wird
quelle
Sie benötigen keine vollständige Nachschlagetabelle, um eine optimale Komprimierbarkeit zu erzielen. Ich glaube, dass moderne Computer, die eine sehr vernünftige Nachschlagetabelle verwenden, in der Lage sind, die Anzahl der beschränkten Sudokus zu zählen, die Sudokus sind, bei denen einige Ziffern bereits vorhanden sind. Hier erfahren Sie, wie Sie kodieren (Dekodierung ist ähnlich).
Legen Sie eine Reihenfolge der Quadrate fest. Angenommen, die Zahl auf dem ersten Quadrat ist . Setzen Sie N 1 als Anzahl der Sudokus, deren erstes Quadrat kleiner als d 1 ist . Sei nun d 2 die Nummer des zweiten Quadrats. Setzen Sie N 2 als die Anzahl der Sudokus, deren erstes Quadrat d 1 und deren zweites Quadrat kleiner als d 2 ist . Und so weiter. Die codierte Zahl ist N = ∑ i N i .d1 N1 d1 d2 N2 d1 d2 N=∑iNi
Diese Codierungsmethode ist in der Literatur als Binomialcodierung bekannt . Sie sollten es Ihnen ermöglichen, den Index eines gegebenen Sudoku effektiv (im realen Sinne) zu berechnen und umgekehrt. Sie benötigen dann , wie oben erwähnt, nur Bits (dies bedeutet, dass Sie mehrere davon mit dieser durchschnittlichen Anzahl von Bits codieren können).72.4
Bearbeiten: Die Wikipedia-Seite über die Mathematik von Sudoku hilft uns, das Bild zu klären. Hilfreich ist auch eine von Ed Russell zusammengestellte Tabelle .
Es stellt sich heraus, dass, wenn Sie nur die obersten drei Zeilen berücksichtigen, im Wesentlichen nur 44 verschiedene Konfigurationen zu berücksichtigen sind. In der Tabelle finden Sie die Gesamtzahl der Konfigurationen, die den jeweiligen Konfigurationen entsprechen (vorausgesetzt, die oberste Zeile ist 123456789), sowie die Gesamtzahl der Abschlüsse für jede Konfiguration. Bei einem Sudoku berechnen wir die Ordnungszahl wie folgt:
Dieser Vorgang ist reversibel und generiert ein Sudoku aus einer Ordnungszahl. Beachten Sie, dass die Sudoku-Aufzählung auf einige Minuten (im Jahr 2006; siehe Diskussionsseite des Wikipedia-Artikels) oder weniger reduziert wurde. Daher erwarte ich, dass dieser Ansatz auf einem modernen Computer sehr praktisch ist und einige Sekunden oder weniger dauert.
quelle
Hier ist ein Algorithmus, von dem ich vermute, dass er eine ziemlich gute Kodierung liefert. Sie haben das fertige Sudoku, das Sie komprimieren möchten, und nehmen an, Sie haben bereits einige Zellen davon codiert. Es gibt also ein partielles Sudoku (nicht unbedingt mit einer eindeutigen Lösung), in dem einige Zellen ausgefüllt sind.
Verwenden Sie einen festen Algorithmus, um zu zählen, wie viele Zahlen in jede leere Zelle eingefügt werden können. Suchen Sie die lexikografisch erste Zelle, in die die kleinste Anzahl verschiedener Zahlen eingefügt werden kann, und kodieren Sie, welche dieser Zahlen darin enthalten ist. Wenn eine Zelle also nur eine 3, 7 oder 9 enthalten kann, wird die 3 mit "0" kodiert ", die 7 von" 1 "und die 9 von" 2 "). Codieren Sie die resultierende Sequenz mit einer arithmetischen Codierung (die die Anzahl der möglichen Zahlen berücksichtigt, die eine Zelle enthalten kann).
Ich weiß nicht, wie lang die resultierende Binärsequenz sein wird, aber ich vermute, dass sie ziemlich kurz ist, besonders wenn Ihr Algorithmus zum Zählen, wie viele Zahlen in eine Zelle gesetzt werden können, einigermaßen ausgefeilt ist.
Wenn Sie einen guten Algorithmus hätten, mit dem die Wahrscheinlichkeit geschätzt wird, dass jede Zelle eine bestimmte Zahl enthält, könnten Sie noch bessere Ergebnisse erzielen.
quelle
Kommentare und Kritik sind willkommen
1.) Das Speichern des Puzzles impliziert das Speichern der Lösung (Information theoretisch).
In your case,α=3 and t(α) =3 and 2kt(α)α2logα=69.96k bits to 85.86k bits. k=2 , the minumum required provides roughly 139.92 bits to 171.72bits roughly as a lower bound for the average case.
Note that I have hand-waived some assumptions such as sizes of entries ofMP and number of entries one has on average in the puzzle.
A comment: May be a multi-user arbitrarily correlated Slepian-Wolf model will help make the entries independent while still respecting the atmostt(α)α2 non-zero entries criterion. However, if one could use it, one need not have gone through the compressed sensing route. So applicability of Slepian-Wolf might be hard.
It would be interesting to see if2k can be made equal or less than 2 using A.) , B.) , C.) and D.) . This would be better than 89 bits (which is the best so far in other answers) and for the best case better than the absolute minimum for all puzzles which is around 73 bits.
quelle
This is to report an implementation of completed-sudoku compact encoding (similar to suggestion by Zurui Wang 9/14/11).
The input is the top row and 1st 3 digits of the 2nd row. These are reduced to 1-9! and 1-120 and combined to <= 4.4x10^7. These are used as givens to count lexicographically all the partial sukokus of 30 digits up to the matching sequence. Then the final count up to the entire 81 digits is done the same way. These 3 sequences are stored as 32-bit integers of max 26 bits, so can be compressed further. The entire process takes about 3 minutes, with the 1st 30 digits taking most of the time. The decoding is similar--except matching counts instead of sudokus.
Coming soon--Revision includes 1st 3 digits of 2nd row in enumeration of 30 digit completions (2nd 32-bit code), comparisons with Jarvis enumeration (Jscott, 3/1615)
quelle
I would go with the following simple analysis:
Each value could be stored in 4 bits (ranges from 1-9, these three bits even allow for 0-16)
If we considered to store the WHOLE solution (not optimal), having9×9=81 values. 3 bits each = 243 bits.
However, as the rules that the solved sudoku has to follow, storing every bit is in fact redundant. However, since the order is important, you need to store the first 8 values in each row (thus determining the 9th value), for 8 rows (thus determining the last row). This reduces the sudoku to8×8 for 3 bits, 192 bits (24 bytes).
I guess I could reduce it to:
where
Edit: Neo Style: I know Latex.
quelle
That number is different for each Sudoku. One of the rules for Sudoku is that it has exactly one solution.
So if you look at an example, that's the minimum amount of data that you must store.
If you work from the opposite side, you can remove digit by digit and run a solver on the result to see if it still has exactly one solution. If so, you can delete another digit. If not, you must restore this digit and try another. If you can't, you have found a minimum.
Since most puzzles start mostly empty, a run length encoding will probably yield good results.
quelle