MathLabs

第5問

列 0,1,…,n0, 1, \ldots, n の順列 (a0,a1,…,an)(a_0, a_1, \ldots, a_n) が与えられている。aia_i と aja_j の互換は、i>0i > 0 に対して ai=0a_i = 0 であり、かつ ai−1+1=aja_{i-1} + 1 = a_j を満たすとき正当(legal)と呼ばれる。順列 (a0,a1,…,an)(a_0, a_1, \ldots, a_n) は、何回かの正当な互換の後に (1,2,…,n,0)(1, 2, \ldots, n, 0) になるとき正則(regular)と呼ばれる。順列 (1,n,n−1,…,3,2,0)(1, n, n-1, \ldots, 3, 2, 0) が正則となるような数 nn をすべて求めよ。
ステップ 4/5: 帰納的な遷移 Pr→Pr+1P_r \to P_{r+1} を示し、n=2k−1n = 2^k - 1 が正則であることを導く
ざっくり言うと

Pr→Pr+1P_r \to P_{r+1} の遷移はその場でのマージソートのようなものである。RR 回の左移動パスによって1つおきの長さ RR のブロックから要素を1つずつ剥がし、隣のブロックに継ぎ足して長さ 2R2R のブロックへと倍加させる。

Pr→u=0,1,…,R−1Pr+1  ⟹  Pk=[1:2k−1],(0) for n=2k−1P_r \xrightarrow{u = 0, 1, \ldots, R-1} P_{r+1} \implies P_k = [1 : 2^k-1], (0) \text{ for } n = 2^k - 1
詳しい解説

2R∣N2R \mid N とし、順列が PrP_r の状態にあるとする。u=0,1,…,R−1u = 0, 1, \ldots, R-1 の順に、00 は R+u−1R + u - 1 の直後から出発して左移動パスを行い、(0)(0) 以降の奇数番目のブロックの先頭要素である R+u,3R+u,…,N−R+uR+u, 3R+u, \ldots, N-R+u と次々に入れ替わる。1回のパスごとに先頭ブロック [1:R+u−1][1 : R+u-1] の末尾に R+uR+u が加わり、各奇数番目ブロックの先頭要素が直前の偶数番目ブロックの末尾へ移って、奇数番目ブロックの長さが 11 ずつ減る。RR 回のパス(u=0,…,R−1u = 0, \ldots, R-1)を終えると奇数番目ブロックは消滅し、偶数番目ブロックの長さが 2R2R に倍加して Pr+1P_{r+1} となる。n=2k−1n = 2^k - 1 のとき N=2kN = 2^k であるから、帰納的に Pk=[1:n],(0)=(1,2,…,n,0)P_k = [1 : n], (0) = (1, 2, \ldots, n, 0) に到達する。