◆新潟県 加藤 英晴 さんからの解答。
【問題1】
(1)
☆ | ◆ |
◆ | ☆ |
◆ | ☆ |
☆ | ◆ |
(2)
a | b | c |
b | c | a |
c | a | b |
a | b | c |
c | a | b |
b | c | a |
a | c | b |
b | a | c |
c | b | a |
a | c | b |
c | b | a |
b | a | c |
b | a | c |
a | c | b |
c | b | a |
b | a | c |
c | b | a |
a | c | b |
b | c | a |
a | b | c |
c | a | b |
b | c | a |
c | a | b |
a | b | c |
c | a | b |
a | b | c |
b | c | a |
c | a | b |
b | c | a |
a | b | c |
c | b | a |
a | c | b |
b | a | c |
c | b | a |
b | a | c |
a | c | b |
(3)
1 | 2 | 3 | 4 |
2 | 1 | 4 | 3 |
3 | 4 | 1 | 2 |
4 | 3 | 2 | 1 |
1 | 2 | 3 | 4 |
2 | 1 | 4 | 3 |
3 | 4 | 2 | 1 |
4 | 3 | 1 | 2 |
1 | 2 | 3 | 4 |
2 | 1 | 4 | 3 |
4 | 3 | 1 | 2 |
3 | 4 | 2 | 1 |
1 | 2 | 3 | 4 |
2 | 1 | 4 | 3 |
4 | 3 | 2 | 1 |
3 | 4 | 1 | 2 |
1 | 2 | 3 | 4 |
2 | 3 | 4 | 1 |
3 | 4 | 1 | 2 |
4 | 1 | 2 | 3 |
1 | 2 | 3 | 4 |
2 | 3 | 4 | 1 |
4 | 1 | 2 | 3 |
3 | 4 | 1 | 2 |
1 | 2 | 3 | 4 |
2 | 4 | 1 | 3 |
3 | 1 | 4 | 2 |
4 | 3 | 2 | 1 |
1 | 2 | 3 | 4 |
2 | 4 | 1 | 3 |
4 | 3 | 2 | 1 |
3 | 1 | 4 | 2 |
1 | 2 | 3 | 4 |
3 | 1 | 4 | 2 |
2 | 4 | 1 | 3 |
4 | 3 | 2 | 1 |
1 | 2 | 3 | 4 |
3 | 1 | 4 | 2 |
4 | 3 | 2 | 1 |
2 | 4 | 1 | 3 |
1 | 2 | 3 | 4 |
3 | 4 | 1 | 2 |
2 | 1 | 4 | 3 |
4 | 3 | 2 | 1 |
1 | 2 | 3 | 4 |
3 | 4 | 1 | 2 |
2 | 3 | 4 | 1 |
4 | 1 | 2 | 3 |
1 | 2 | 3 | 4 |
3 | 4 | 1 | 2 |
4 | 1 | 2 | 3 |
2 | 3 | 4 | 1 |
1 | 2 | 3 | 4 |
3 | 4 | 1 | 2 |
4 | 3 | 2 | 1 |
2 | 1 | 4 | 3 |
1 | 2 | 3 | 4 |
3 | 4 | 2 | 1 |
2 | 1 | 4 | 3 |
4 | 3 | 1 | 2 |
1 | 2 | 3 | 4 |
3 | 4 | 2 | 1 |
4 | 3 | 1 | 2 |
2 | 1 | 4 | 3 |
1 | 2 | 3 | 4 |
3 | 4 | 2 | 1 |
2 | 1 | 4 | 3 |
4 | 3 | 1 | 2 |
1 | 2 | 3 | 4 |
3 | 4 | 2 | 1 |
4 | 3 | 1 | 2 |
2 | 1 | 4 | 3 |
1 | 2 | 3 | 4 |
4 | 1 | 2 | 3 |
2 | 3 | 4 | 1 |
3 | 4 | 1 | 2 |
1 | 2 | 3 | 4 |
4 | 1 | 2 | 3 |
3 | 4 | 1 | 2 |
2 | 3 | 4 | 1 |
1 | 2 | 3 | 4 |
4 | 3 | 1 | 2 |
2 | 1 | 4 | 3 |
3 | 4 | 2 | 1 |
1 | 2 | 3 | 4 |
4 | 3 | 1 | 2 |
3 | 4 | 2 | 1 |
2 | 1 | 4 | 3 |
1 | 2 | 3 | 4 |
4 | 3 | 2 | 1 |
2 | 1 | 4 | 3 |
3 | 4 | 1 | 2 |
1 | 2 | 3 | 4 |
4 | 3 | 2 | 1 |
3 | 4 | 1 | 2 |
2 | 1 | 4 | 3 |
1行目の他の配列(あと4!−1)に対しても,それぞれこれと同じ数(24)だけ種類があることは明らか(実際に挙げません(略))です。
【問題2】の解答
(1)
【問題1】の(2)の解答より,
|L(3)|=12
(2)
【問題1】の(3)の解答より,
|L(4)|=4!×24=576
(3)
一般は,未解決の問題だったと思います。
|L(n)|=n!(n−1)!Inと表せ,
I1=I2=I3=1,
I4=4
I5=56
I6=9408
I7=16942080 だそうですが,
一般の Inについては,知られていないそうです。
【問題3】の解答
任意のnに対して,L(n)は生成可能です。
1行目が1 2 3 ・・・・ n のものだけ生成すれば,
1行目の他の配列(あとn!−1)に対しても,文字の置換で,
それぞれ同じ数((n−1)!In)ずつ生成できる。
n次正方行列
a11 | a12 | ・・・ | a1n |
a21 | a22 | ・・・ | a2n |
: | : | … | : |
an1 | an2 | ・・・ | ann |
を用意する。
(1)
1行目の1列目2列目・・・n列目 2行目の1列目2列目・・・n列目 ・・・ n行目の1列目2列目・・・n列目の順で決定する。
(2)
a11=1 | a12=2 | ・・・ | a1n=n |
(3)a21は,a11と異なるように決める。
a22は,a12とa21と異なるように決める。
という具合に,各要素を決めるときは,その以左のどれとも,以上のどれとも同じにならないように選ぶ。
そう選べないときは,一つ前の要素の選び方を変える。
それでも選べないときは、その前の要素の選び方を変える。
各要素を決めるとき,以左のどれとも,以上のどれとも同じにならない数は何通りかあり,その選び方の違いが,生成される方陣の違いになる。
これで しらみつぶせます。
(感想)
何だか,定義を言い換えただけのようなアルゴリズムで,無意味な気もします。
◆東京都 ぽこぺん さんからのコメント。
【加藤英晴さんの生成アルゴリズムに関するコメント】
(1) 第1行に対しては
a1j = j (1≦j≦n)
のように決めますが,同時に,第1列に対しても
ai1 = i (1≦i≦n)
と決めるべきです。
この二つの条件を満たす Latin 方陣の個数が,
問題2(3)の解答に書かれた In となります。
この条件を満たす各 Latin 方陣に対して,
その第2行〜第n行を入れ替え ((n-1)!通り),
さらに第1列〜第n列を入れ替える (n!通り) ことにより,すべての Latin 方陣が漏れなく重複なく得られることはすぐわかります。
(2) 上記の二条件を満たす Latin 方陣を求めるには,単純なシラミ潰しではなく,攪乱順列(=完全順列)を使うべきです。
すなわち,与えられた n に対して,
p(j) ≠ j (1≦j≦n)
を満たす攪乱順列 {p(j)} のすべての組をあらかじめ求めておきます。
この個数が
a(n) = n! ( | 1 2! |
- | 1 3! |
+ | 1 4! |
- | 1 5! |
+- …+ | (-1)n n! |
) |
であり, | a(n) n! |
→ | 1 e |
となることはよく知られています。 |
ここで,このすべての組を
Pk = {{p(j)} | p(1) = k} (2≦k≦n)
に分割しておき,Latin 方陣の第k行(2≦k≦n)を Pk から選ぶようにすれば,シラミ潰しの範囲を非常に狭めることができます。
明らかに |P2| = ... = |Pn| ですから,
第k行(2≦k≦n)の選択肢は | a(n) n-1 |
通りずつあります。 |
したがって,
{ | a(n) n-1 |
} | n-1 | 通り |
だけを調べればいいというわけです。