種を合成する際の注意点その3
正解は結婚させることができる。
20 | 23 | 11 | 12 |
10 | 13 | 21 | 22 |
03 | 00 | 32 | 31 |
33 | 30 | 02 | 01 |
2つが互いに直交するとは、次のように言い換えてもいい。
20を2と0の組み合わせ(2,0)で表したとき、重なる組み合わせが1個もなくて、すべての組み合わせがあること、と。
つまり、(0,0)(0,1)(0,2)(0,3)(1,0)(1,1)(1,2)(1,3)(2,0)(2,1)(2,2)(2,3)(3,0)(3,1)(3,2)(3,3)
のすべてがあること。
すべてがあれば、重なりの心配はない。
すべての組み合わせは、
4×4=16
だし、セル数も16個だからだ。
上にはすべての組み合わせがそろっているよね。
10進数に直して、すべての数字に1加えると、
9 |
12 | 6 | 7 |
5 | 8 | 10 | 11 |
4 | 1 | 15 | 14 |
16 | 13 | 3 | 2 |
4方陣の完成!
でも先生、合成して1から16までそろっていることを確認すればいいのではないですかって?
その通り。
ただ、魔方陣の作成プログラムを考える際、互いに直交しているかどうかの判定法がないと困るわけだ。
碁石が1箇所でも重なれば、もう直交していないのだからその種は結合できないので捨てていいわけだ。
実は、僕が作った4の倍数次魔方陣(中抜き法)高速版、一般次魔方陣高速版(新魔方陣HP参照)、偶数普遍超高速版、普遍超高速版当たりでは、2番目の種をコンピュータに作らせる際に、作成しつつあるその種が可能性がないと判定すると、それ以上の探索はやめて次の種の作成に取りかかるようになっている。
つまり、無駄な探索をしないようにしているわけだ。これによってプログラムの魔方陣作成スピードが大幅にアップしている。
この効果は、おそらく少なくても何万倍もある。
第5回へ |