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