完全にランダムな数独を生成したい。
数独グリッドの定義間の整数のグリッドといくつかの要素を省略することができます。グリッドは、数独の制約(各行、列、整列された正方形に繰り返し要素がない)に一致する独自の方法があれば有効なパズルであり、その点で最小です(つまり、これ以上省略した場合)要素にはパズルに複数の解決策があります)。
すべての数独パズルが同等になるように、ランダムな数独パズルを生成するにはどうすればよいですか?
完全にランダムな数独を生成したい。
数独グリッドの定義間の整数のグリッドといくつかの要素を省略することができます。グリッドは、数独の制約(各行、列、整列された正方形に繰り返し要素がない)に一致する独自の方法があれば有効なパズルであり、その点で最小です(つまり、これ以上省略した場合)要素にはパズルに複数の解決策があります)。
すべての数独パズルが同等になるように、ランダムな数独パズルを生成するにはどうすればよいですか?
回答:
すべての数独パズルの正確な均一分布の生成は、そのようにして行うことができます。9x9グリッドをランダムに生成し、それが正しい数独グリッドである場合にのみ保持し、そうでない場合は再試行します。
このブルートフォースアプローチは、均一な分布を保証しますが、ランダムな8x8グリッドを生成し、残りの2行を埋めるだけで、グリッドが正しい確率を倍にすることができるため、明らかに効率的ではありません。これはまだランダムな分布ですが、それでも非効率的です。
あなたがまたあることを最初の行を強制することができます、グリッドの残りをランダムに生成し、すべての数字の順列をランダムに選択します。それでも同じ確率ですべてのグリッドを選択しますが、9 !もっと早く。
多分あなたは私がどこに向かっているのかを見るでしょう:この問題に賢明な方法で答えると、おそらく数独グリッドの基礎となる対称性について疑問に思うでしょう。多くの作業は、17数独の手がかりの最小数(であるという事実を証明するために、この方向で行われたこの記事を参照してください)、あなたが行くことができ、ここでこれらを使用しています3359232の類似したグリッドの5472730538クラスのこの正確な列挙を、見ることを対称性:
このフレームワークを使用すると、5,472,730,538クラス(実際には6 GBに圧縮できます)の1つをランダムに選択し、各対称性の代表( 1つ)を選択できます!、6 4、6 4、2。
編集:これを不完全なパズルに適合させるために、グリッドのサブセットをランダムに選択し、解が数独ソルバーと一意であるかどうかを確認し、そうでない場合は再試行できます。ユニークなソリューションを備えた不完全なパズルの数は2つのグリッドで異なる可能性があるため、これは均一な分布ではありません。(そうでなければ私は非常に驚くでしょう)