組み合わせ論による q-二項係数の定義

定理

qq-整数,qq-階乗,qq-二項係数を順に [n]q=1qn1q[n]q!=[n]q[n1]q[2]q[1]q(nk)q=[n]q![k]q![nk]q!\begin{aligned} [n]_q &= \dfrac{1-q^n}{1-q}\\ [n]_q! &= [n]_q [n-1]_q \cdots [2]_q [1]_q\\ \binom{n}{k}_q &= \dfrac{[n]_q!}{[k]_q! [n-k]_q!} \end{aligned} と定義されていた。

この記事では整数の qq 類似が組み合わせ論的にも定義できることを示します。

qq-類似については q-二項係数とq-二項定理 もご覧ください。

転倒数

準備

数列 a1,a2,,ana_1, a_2, \cdots , a_n に対して,転倒数とは ai>aj を満たす (i,j) の数 a_i > a_j \ \text{を満たす} \ (i,j) \ \text{の数} をいう。

例えば 1,0,1,0,0,1,2,0,1,2,2,2 1,0,1,0,0,1,2,0,1,2,2,2 の転倒数を数えましょう。

ai>aja_i > a_j となっているのは

  • a1=1a_1 = 1 に対して j=2,4,5,8j=2,4,5,8
  • a3=1a_3 = 1 に対して j=4,5,8j=4,5,8
  • a6=1a_6 = 1 に対して j=8j=8
  • a7=2a_7 = 2 に対して j=8,9j=8,9

であるため,転倒数は 1010 です。

qq-階乗

定義

1,2,,n1,2,\cdots , n を並べ替えた数字の列のうち,転倒数 ii のものの個数を An(i)A_{n} (i) とおく。

[n]q!=i=0nAn(i)qi [n]_q ! = \sum_{i=0}^{n} A_{n} (i) q^i と定義する。

[n]q![n]_q!11 から nn の順列で転倒数 ii であるものの個数の母関数であるともいえる。

計算例

[3]q![3]_q! を計算する。

  • 転倒数 00123123
  • 転倒数 11213,132213,132
  • 転倒数 22312,231312,231
  • 転倒数 33321321

よって [3]q!=1+2q+2q2+q3 [3]_q! = 1+2q+2q^2+q^3

証明

実際に冒頭の定義と一致することを示しましょう。

証明

帰納的に証明する。

n=1n=1 のときは明らかである。

n=kn=k で成立することを仮定する。

1,2,,k1 , 2 , \cdots , k の順列 a1a2aka_1 a_2 \cdots a_{k}k+1k+1 を挿入する方法は k+1k+1 通りあり,各操作で増える転置数をまとめると次のようになる。

  • a1a_1 の手前に挿入:転置数が kk 増える。
  • a2a_2 の手前に挿入:転置数が k1k-1 増える。
  • ……
  • aka_k の手前に挿入:転置数が 11 増える。
  • aka_k の後ろに挿入:転置数が 00 増える。

よって k+1k+1 を挿入することで

i=1k+1Ak+1(i)=[k]q!(1+q+q2++qk) \sum_{i=1}^{k+1} A_{k+1} (i) = [k]_q! (1+q+q^2+ \cdots + q^k) となる。

1+q++qk1+q+\cdots + q^k[k+1]q[k+1]_q そのものである。こうして i=1k+1Ak+1(i)=[k+1]q! \sum_{i=1}^{k+1} A_{k+1} (i) = [k+1]_q! であるため,命題が従う。

qq-二項係数

定理

00kk 個,11nkn-k 個並べた数字の列のうち,転倒数が ii のものの個数を Bn,k(i)B_{n,k} (i) とおく。

qq-二項係数 (nk)q\binom{n}{k}_q を次のように定義する。

(nk)q=i=0nBn,k(i)qi \binom{n}{k}_q = \sum_{i=0}^n B_{n,k} (i) q^i

計算してみましょう。

(52)q\binom{5}{2}_q を計算する。

  • 転倒数 000011100111
  • 転倒数 110101101011
  • 転倒数 2201101,1001101101,10011
  • 転倒数 3301110,1010101110,10101
  • 転倒数 4410110,1100110110,11001
  • 転倒数 551101011010
  • 転倒数 661110011100

よって (52)q=1+q+2q2+2q3+2q4+q5+q6 \binom{5}{2}_q = 1+q+2q^2+2q^3+2q^4+q^5+q^6 である。

図による解釈

二項係数 (nk)\binom{n}{k}k×(nk)k \times (n-k) の格子状の道を左下から右上まで最短経路で進むときの場合の数でした。

qq-二項係数も格子状の道の経路を数えることで計算することができます。

定理

k×(nk)k \times (n-k) マスの格子を左下から右上まで最短経路で進む際,下側のマスの個数が ii 個であるような経路の個数を Bn,k(i)B'_{n,k} (i) とする。

(nk)q=i=0nBn,k(i)qi \binom{n}{k}_q = \sum_{i=0}^n B'_{n,k} (i) q^i と計算できる。

この方法で計算してみましょう。

  • マスが 00pic00
  • マスが 11pic01
  • マスが 22pic02
  • マスが 33pic03
  • マスが 44pic04
  • マスが 55pic05
  • マスが 66pic06

よって (52)q=1+q+2q2+2q3+2q4+q5+q6 \binom{5}{2}_q = 1+q+2q^2+2q^3+2q^4+q^5+q^6 である。

証明

定義が一致することを確認しましょう。

証明

1,2,,n1,2,\cdots , n の順列の転倒数を数える。前の定理からこの転倒数の母関数は [n]q![n]_q! である。

1,2,,k1,2, \cdots , k が配置されている箇所を 00 に,k+1,k+2,,nk+1,k+2,\cdots ,n が配置されている箇所を 11 に取り換える。この 0011 からなる数字の列の転倒数は (nk)q\binom{n}{k}_q であった。

こうしてできた順列の転倒数は次の3つの和である。

  1. 0011 に置き換えた数列の転倒数
  2. 元の順列から 11 から kk だけを取り出した際の転倒数
  3. 元の順列から n+1n+1 から nn だけを取り出した際の転倒数

よって An(i)=i1+i2+i3=iBn,k(i1)Ak(i2)Ank(i3) A_n (i) = \sum_{i_1+i_2+i_3=i} B_{n,k} (i_1) A_{k} (i_2) A_{n-k} (i_3) と表すことができる。

母関数の考え方から (nk)q[k]q![nk]q!=[n]q! \binom{n}{k}_q [k]_q! [n-k]_q! = [n]_q ! が従う。つまり (nk)q=[n]q![k]q![nk]q! \binom{n}{k}_q = \dfrac{[n]_q!}{[k]_q! [n-k]_q!} が示された。

qq-二項定理の証明

定理

(1+x)(1+qx)(1+qn1x)=k=0n(nk)qqk(k1)2xk (1+x)(1+qx)\cdots(1+q^{n-1}x)= \sum_{k=0}^n \binom{n}{k}_q q^{\frac{k(k-1)}{2}}x^k

q-二項係数とq-二項定理 では,特殊な関数を用いて証明をしました。

この記事では組み合わせ論的に証明を試みましょう。

組み合わせ論による証明

証明

kk の係数を求める。

1,q,q2,,qn11,q,q^2 , \cdots , q^{n-1} のうちから kk 個を選んだものを qa1,qa2,,qakq^{a_1} , q^{a_2} , \cdots , q^{a_k} とおく。このとき a1<<aka_1 < \cdots < a_k である。

ここで bi=aiib_i = a_i - i とおく。このとき 0bink0 \leqq b_i \leqq n-k で,b1bkb_1 \leqq \cdots \leqq b_k である。

b1,b2,,bkb_1,b_2,\cdots , b_kk×(nk)k \times (n-k) マスの格子を左下から右上まで進む経路を次のように対応付ける。

  • 11 列目で b1b_1 マス目まで上がる。
  • 22 列目で b2b_2 マス目まで上がる。
  • \cdots
  • kk 列目で bkb_k マス目まで上がる。

このとき,経路の下側のマスの個数は b1+b2++bkb_1 + b_2 + \cdots + b_k である。

ゆえに b1++bk=iqb1qb2qbk=Bn,k(i)qi \sum_{b_1 + \cdots + b_k = i} q^{b_1} q^{b_2} \cdots q^{b_k} = B'_{n,k} (i) q^i となるため, 0b1bknkqb1qb2qbk=i=0nBn,k(i)qi \sum_{0 \leqq b_1 \leqq \cdots \leqq b_k \leqq n-k} q^{b_1} q^{b_2} \cdots q^{b_k} = \sum_{i=0}^{n} B'_{n,k} (i) q^i を得る。

qa1qak=qb1qbkq1+2++k=qb1qbkqk(k+1)2\begin{aligned} q^{a_1} \cdots q^{a_k} &= q^{b_1} \cdots q^{b_k} \cdot q^{1+2+ \cdots + k}\\ &= q^{b_1} \cdots q^{b_k} \cdot q^{\frac{k(k+1)}{2}} \end{aligned} であるため,xkx^k の係数は qk(k+1)2i=0nBn,k(i)qi=(nk)qqk(k+1)2 q^{\frac{k(k+1)}{2}}\sum_{i=0}^{n} B'_{n,k} (i) q^i = \binom{n}{k}_q q^{\frac{k(k+1)}{2}} である。

競技プログラミングでしばしば活用することがあるそうです。