頭の整理

頭の中を整えるために,色々と書き綴ります

De Bruijn 数列

De Bruijn 数列に関する問題です.解答は下部に載せました.

 

問題

 { \displaystyle k } 種の文字から作れる文字列を長さ  { \displaystyle n } の読み枠で左から順に読んでいくとき,同じ文字列が読まれない最長の文字列の長さを  { \displaystyle L \left( k , n \right) } と表す.また, { \displaystyle k } 種の文字から作れる長さ  { \displaystyle n } の文字列の種類の数を  { \displaystyle R \left( k , n \right) } と表す.また, { \displaystyle k } 種の文字から作れる文字列を長さ  { \displaystyle n } の読み枠で左から順に読んでいくとき,同じ文字列が読まれない最長の文字列の長さ  { \displaystyle L \left( k , n \right) } となる文字列の種類の数を  { \displaystyle S \left( k , n \right) } と表す.このとき,次の問に答えよ.

1. { \displaystyle R \left( k , n \right) = k^n } を示せ.

2. { \displaystyle L \left( k , n \right) = k^n + n - 1 } を示せ.

3. { \displaystyle S \left( k , n \right) } は  { \displaystyle k^n } の倍数であることを示せ.

 

 

 

 

 

 

 

 

 

 

 

 

 

解答

1.長さ  { \displaystyle n } の文字列のどの位置にも  { \displaystyle k } 種類の文字の置き方があるから,

 { \displaystyle R \left( k , n \right) = k^n \ \ldots \left( 1 \right) }

2. { \displaystyle k } 種の文字  { \displaystyle x_1 , x_2 , \ldots , x_k } から作れる長さ  { \displaystyle n } の文字列には, { \displaystyle x_{i_{1}} x_{i_{2}} \cdots x_{i_{n-1}} \ \ \left( 1 \leq i_p \leq n  \right) } で始まる文字列と終わる文字列が同数含まれる.よって, { \displaystyle x_{j_{1}} x_{j_{2}} \cdots x_{j_{n-1}} \ \ \left( 1 \leq j_p \leq n  \right) } で始まる文字列から始めて順々に文字列をつないでいき,最後は  { \displaystyle x_{j_{1}} x_{j_{2}} \cdots x_{j_{n-1}} \ \ \left( 1 \leq j_p \leq n  \right) } で終わる文字列とすれば, { \displaystyle k } 種の文字  { \displaystyle x_1 , x_2 , \ldots , x_k } から作れる長さ  { \displaystyle n } の文字列をすべてつないだ文字列が作れる.この文字列を  { \displaystyle A } とおき, { \displaystyle A } の右端に  { \displaystyle x_1 , x_2 , \ldots , x_k } のいずれかの文字をつなげると,右端の長さ  { \displaystyle n } の文字列は文字列の中に2つある.よって, { \displaystyle A } は同じ文字列が読まれない最長の文字列の長さを持つ.そして, { \displaystyle \left( 1 \right) } より,長さ  { \displaystyle n } の文字列をすべてつないだ文字列は右端に注意すると, { \displaystyle  k^n + n - 1 } の長さを持つ.よって,

 { \displaystyle L \left( k , n \right) = k^n + n - 1 \ \ldots \left( 2 \right) }

3. { \displaystyle k } 種の文字から作れる文字列を長さ  { \displaystyle n } の読み枠で左から順に読んでいくとき,同じ文字列が読まれない最長の文字列の長さを持つ文字列は  { \displaystyle x_{i_{1}} x_{i_{2}} \cdots x_{i_{k^n}} x_{i_{k^n + 1}} \cdots x_{i_{k^n + n - 1}} \ \ \left( 1 \leq i_p \leq n  \right) } と表せる.この文字列の  { \displaystyle x_{i_{k^n + 1}} } 以降の文字列を切り取って,始めと終わりの文字列をつなげた  { \displaystyle x_{i_{1}} x_{i_{2}} \cdots x_{i_{k^n}} } からなる輪を作る.この輪を右回り(あるいは左回り)に長さ  { \displaystyle n } の読み枠で読むとき,どこから読み始めても,1周する間に同じ文字列は読まれない.また,読み始めの文字が異なれば,1周読んだ文字列は異なる文字列となる.ゆえに,この輪を右回りに長さ  { \displaystyle n } の読み枠で読むとき, { \displaystyle k^n } 通りの異なる文字列が読まれることになる.従って, { \displaystyle k } 種の文字から作れる文字列を長さ  { \displaystyle n } の読み枠で左から順に読んでいくとき,同じ文字列が読まれない最長の文字列の長さを持つ文字列を勝手に一つ取ってくると,それと同じ長さを持つ文字列が勝手に取ってきた文字列も含めて  { \displaystyle k^n } 通り存在する.よって, { \displaystyle S \left( k , n \right) } は  { \displaystyle k^n } の倍数である.

 

補足: { \displaystyle B \left( k , n \right) = \frac{S \left( k , n \right)}{k^n} } を異なる De Bruijn 数列の数といいます.

 { \displaystyle B \left( k , n \right) = \frac{ \left( k! \right) ^{k^{n-1}}}{k^n} }

であることが知られています.

 

 

「Amazon.co.jpアソシエイト」