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