第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 |
という複雑な動きをするからです。
初心者のための excel 2016 マクロ VBA 入門講義 基礎から応用まで
vc++ c言語 c++ 入門 初心者 基礎から応用まで
eclipse c++ 入門
魔方陣 数独で学ぶ VBA 入門
数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
本サイトトップへ