第1話 高速化のための工夫
第18講最終話で、
① 座標の工夫による高速化
②末項確定法による高速化
③マルチスレッド化による高速化
によって、魔方陣自動生成ソフトの数万倍から数億倍の高速化を
実現すると予告しました。
実は、3つの改良で最も劇的な結果を見せるのは、
第19講で扱う①です。
①の工夫だけで、6次魔方陣なら数万倍は速くなります。
①によって、6次魔方陣は数秒で100個を生産できるようになります。
第9講で学んだ魔方陣自動生成ソフトは、
数字を次の順で入れていました。
4次魔方陣の場合
1 | 2 | 3 | 4 |
5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 |
5次魔方陣の場合
1 | 2 | 3 | 4 | 5 |
6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 |
ですが、これは合理的ではありません。
なぜなら、セルの中で一番重要なのは、
対角線のセルです。
対角線のセルは、縦横の条件だけでなく、
対角線の条件を満たさなければならないからです。
条件が多い方から、難しい方からクリアしていくのが、
問題解決の基本的方針です。
時間割を作るというのは、
数独よりずっと難しいパズルです。
現在の高校では、選択・習熟があり、
体育では場所の制約が、家庭科では時間の制約があり、
さらに、非常勤の先生方への配慮など、
複雑な条件が絡んでくるからです。
時間割を作成するためのコツは、
制約の多い駒から入れて行くです。
フリーな駒を残しておかないと、
あっという間に動きが取れなくなるからです。
1 | 2 | 3 | 4 |
5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 |
1 | 2 | 3 | 4 | 5 |
6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 |
の入れ方だと、条件の緩い方から入れていることになります。
条件の厳しい方から、クリアするという難問解消の方法に従っていません。
そこで、数字を入れる順番を
1 | 9 | 10 | 5 |
11 | 2 | 6 | 12 |
13 | 7 | 3 | 14 |
8 | 15 | 16 | 4 |
1 | 10 | 11 | 12 | 6 |
13 | 2 | 14 | 7 | 15 |
16 | 17 | 3 | 18 | 19 |
20 | 8 | 21 | 4 | 22 |
9 | 23 | 24 | 25 | 5 |
と入れ替えようというのが、この講の狙いです。