実行ボタンを押すと,それぞれのプログラムが実行され,約15秒ほどで答えが戻ります
数独インデックスから解盤面へ
解盤面から数独インデックスへ
数独の解盤面は,大ざっぱにいうと,
約 60 垓個(6 の後ろに 0 が 21 個並ぶ)通りあることが知られています.
我々は,
その解盤面一つ一つに番号付け(数独インデックス)を与えました.
このページでは,
解盤面→数独インデックス,数独インデックス→解盤面の両方が,
約 10 秒程度で計算できます.
右のフォームから実行できるので,
試してみてください.
注釈:
質問等は watanabe(at)is.titech.ac.jp まで.
リンクをはる際の許可は不要ですので回答は省略させて頂きます.
ご自由にはって下さい.
解盤面から数独インデックスを求める際, 全部の解盤面を探索する方法では 5000 万年かかってしまいます. 一方, すべての解盤面を保存しておけば,数秒でできますが, そのためには 1億 Peta Byte の記憶領域が必要になります.
Felgenhauer と Jarvis は 2005 年の論文で, すべての解盤面を 71 通りに分類することに成功し, それにより,解盤面の総数を数えました. 我々も,この 71 通りのパターン各々ごとに, そのパターンに分類される解盤面をすべて探索する方法を前計算し, それを探索補助データとして用いることで計算の高速化に成功しました. 上記の,解盤面→数独インデックス,数独インデックス→解盤面,の計算は, その探索補助データ(圧縮形式で 4 GB)を用いた計算です.
補足:
基本的には,バックトラック法により 解盤面を次々に生成していくことによって番号付けを実現しています. 同型変換と名づけた変換を用いることにより,また, ある区間に対する解盤面の存在数を予めファイルに 保存しておくことにより,探索する範囲を狭くしています. 更に探索速度そのものを早くする試みとして, 先に述べた探索補助データを用いています.