第19講 座標の工夫による魔方陣自動生成ソフトの高速化

第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


と入れ替えようというのが、この講の狙いです。


第18講第8話へ 第2話へ

a

eclipse c++ 入門講義第1部へ

魔方陣 数独で学ぶ VBA 入門
数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
VC++ C言語 C++ 入門 初心者 基礎から応用まで
本サイトトップへ