数独パズルの効率的なエンコード
任意の9x9グリッドを指定するには、各正方形の位置と値を指定する必要があります。この単純なエンコーディングでは、81(x、y、value)トリプレットが得られ、x、y、および値ごとに4ビット(1-9 = 9値= 4ビット)が必要で、合計81x4x3 = 972ビットです。各正方形に番号を付けることにより、位置情報を7ビットに減らし、各正方形のビットと合計891ビットをドロップできます。所定の順序を指定することにより、合計324ビットの各値に対して、これを大幅に4ビットに減らすことができます。ただし、数独には数字が欠けている場合があります。これにより、指定する必要のある数字の数を減らすことができますが、位置を示すために追加のビットが必要になる場合があります。(位置、値)の11ビットエンコードを使用して、手がかりを持つパズルを指定できます。nnn11n11n11nビット、例えば最小(17)パズルには187ビットが必要です。私がこれまで考えた中で最良のエンコードは、各スペースに1ビットを使用して、それが満たされているかどうかを示し、そうであれば、次の4ビットが数値をエンコードすることです。これにはビットが必要で、最小パズルの場合は149()です。できれば有効な各数独セットアップのデータベースなしで、より効率的なエンコードがありますか?(パズルから一般的なに対処するためのボーナスポイント)81+4n81+4n81+4nn=17n=17n=17nnnN×NN×NN \times N 多くのパズルは別のパズルを回転させたり、数字の単純な並べ替えをしたりするということを思いつきました。おそらくそれは必要なビットを減らすのに役立つ可能性があります。 ウィキペディアによると、 古典的な9×9数独ソリューショングリッドの数は6,670,903,752,021,072,936,960(OEISのシーケンスA107739)、または約です。6.67×10216.67×10216.67×10^{21} 計算を正しく行った場合()、ルックアップテーブルの情報は73(72.498)ビットになります。ln(6,670,903,752,021,072,936,960)ln(2)ln(6,670,903,752,021,072,936,960)ln(2)\frac{ln{(6,670,903,752,021,072,936,960)}}{ln{(2)}} だが: 回転、反射、順列、再ラベル付けなどの対称性を考慮すると、本質的に異なるソリューションの数は、5,472,730,538 [15](OEISのシーケンスA109741)であることが示されました。 これにより33(32.35)ビットが得られるため、使用する順列を示す巧妙な方法で73ビット全体を下回る可能性があります。