第18講 対角線法による魔方陣自動生成速度の1万倍加へ

第1話 対角線法とは何か?
ちょっとした工夫で第10講の魔方陣自動生成アプリは、
次数にもよりますが、
作成速度は、1万倍から数億倍にもなります。

その工夫とは、
入力順番号の付け替えです。

例えば、4次魔方陣を自動生成させるときに、

0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15

の順で入力していましたが、
この入力順を

0 8 9 4
10 1 5 11
12 6 2 13
7 14 15 3

と変更すれば良いのです。
こんなちょっとした工夫で、
おそらく4次の段階で20倍
5次なら1万倍以上速くなります。
なぜでしょうか。
答えは30行ほど下。




























答え

a b c d
e f g h
i j k l
m n o p

各セルの中で条件が強いセルを考えてください。

a b c d
e f g h
i j k l
m n o p

例えば

b

のセルは
a+b+c+d=34
とb+f+j+k=34の2条件を満たせば良いのに対して、


k

のセルは
c+g+k+o=34
i+j+k+l=34
a+f+k+p=34
の3条件を満たす必要があります。
つまり、
対角線上のセルはすべて3つの条件を見たさなければならないのに対して、
対角線以外のセルは2つの条件を満たせば良いのです。

私たち高校教諭は、
毎年春休みに時間割を組まなければなりません。
これが年々大変になってきています。
習熟・選択・合同などいろいろな
授業形態が取られるようになっているからです。
実は、時間割を組むコツは条件の厳しい枠から埋めていくです。
分割・合同で複数のクラスに渡り、
教室が制限されていて、
しかも、非常勤の場合時間も制約されている授業があります。
最初に単位数が多く1人で持っている授業を先に入れてしまうと、
条件の厳しい駒が身動きできなくなってしまいます。
条件の厳しい駒を先に入れて、
単位数の多い単駒(1人で1教室の授業)を後から入れるのが、
ミソです。
行き詰まったとき、
単駒は比較的自由に動かせるからです。

条件の厳しいところからクリアする!
これは時間割だけでなく、
どんな問題にも適応できる絶対原則です。
厳しいところから埋めていくと場合の数が、
1/1000にも1/10000にもなるからです。
ですから、セル番号を

0 8 9 4
10 1 5 11
12 6 2 13
7 14 15 3

と付け替えるだけで生成時間が
20倍ぐらいから1万倍ぐらいになったりする訳です。

さて、問題はその番号振り直しをどのようにするかです。
これは、難問ですよ。
というのは、

n=3のとき

0 5 3
6 1 7
4 8 2

n=4のとき

0 8 9 4
10 1 5 11
12 6 2 13
7 14 15 3

n=5のとき

0 9 10 11 5
12 1 13 6 14
15 16 2 17 18
19 7 20 3 21
8 22 23 24 4

n=6のとき

0 12 13 14 15 6
16 1 17 18 7 19
20 21 2 8 22 23
24 25 9 3 26 27
28 10 29 30 4 31
11 32 33 34 35 5

n=7のとき

0 13 14 15 16 17 7
18 1 19 20 21 8 22
23 24 2 25 9 26 27
28 29 30 3 31 32 33
34 35 10 36 4 37 38
39 11 40 41 42 5 43
12 44 45 46 47 48 6

いう複雑な動きをするからです。

第17講第8話へ 第2話へ

a


初心者のための excel 2016 マクロ VBA 入門講義 基礎から応用まで
vc++ c言語 c++ 入門 初心者 基礎から応用まで
eclipse c++ 入門
魔方陣 数独で学ぶ VBA 入門

数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座

初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
本サイトトップへ