オートマトン・形式言語の問題
アルファベット 上の正規表現
を考え、 が表す言語を とします( は和集合、 はクリーネ閉包を表します)。 に属する長さ の文字列の個数を求めなさい。
この問題で使うもの
- 正規言語に属する長さ n の文字列の数え上げ(説明と入口の問題)
この問題を解けるようになるまで(7 技能)
読み込み中…
右端(太枠)がこの問題で使う技能です。左へドラッグすると、さらに前の前提をさかのぼれます。技能を押すと、そこまでの道筋が光ります。
ヒント
行き詰まったら、上から順に 1 つずつ開いてください。
ヒント 1
正規言語に属する長さ の文字列の数え上げの技能を使います。 の文字列を、ブロック 、、 への分解として見てみましょう。
ヒント 2
長さ の文字列の個数を とし、最初のブロックが 、、 のどれかで場合分けすると、 を と で表せます。分解が一通りに決まることも確かめましょう。
ヒント 3
、、 です。、 と順に計算していきましょう。
答えと解説
答えを見る
どこでつまずきましたか?(選ぶと、戻る場所を案内します)
解説を読む
方針 の文字列は、ブロック (長さ )、(長さ )、(長さ )を 個以上並べたものです。ブロックへの分解を使って、長さ の文字列の個数 の漸化式を作ります。
分解が一通りであること 文字列の先頭の文字を見ると、最初のブロックが決まります。先頭が ならブロック 、 ならブロック 、 ならブロック です( で始まるブロックは だけ)。残りの部分にも同じことがくり返せるので、 の文字列のブロック分解はただ一通りです。したがって、文字列の個数はブロックの並べ方の個数と一致します。
漸化式 を に属する長さ の文字列の個数とします。 のとき、最初のブロックで場合分けします(和の法則)。
- 最初のブロックが :残りは に属する長さ の文字列で、 個。
- 最初のブロックが :同様に 個。
- 最初のブロックが :残りは長さ の文字列で、 個。
よって
初期値 長さ は空列(ブロック 個)の 個なので 。長さ は の 個なので ( 単独は に属しません)。
計算
(確認: の 個)
したがって、求める個数は 個です。
別解
は、、、 を並べてできる文字列全体である。 は必ず連続した偶数個で現れ、 の連続部分(ラン)の長さが偶数であれば、その部分は の列に一意に分解できる。よって、 の長さ の文字列の個数 は、ブロック 、(長さ1)と (長さ2)の並べ方の数に等しい。ブロックへの分解は一意なので重複は生じない。
漸化式は 、、 である。
検算として、 の個数 で場合分けする。長さ6では が 個、 が 個で、ブロック総数は である。 の位置の選び方は 、 の割り当ては 通りである。
- :
- :
- :
- :
合計は となり、漸化式の結果と一致する。