オートマトン・形式言語の問題
アルファベット 上の決定性有限オートマトン を考える。状態の集合は 、初期状態は 、受理状態は と の 2 つであり、遷移関数 は次の表で与えられる。
| 状態 | 入力 | 入力 |
|---|---|---|
上の長さ の文字列(全部で 個)のうち、 に受理されるものの個数を求めよ。
この問題で使うもの
- 状態ごとの文字列数の漸化式(説明と入口の問題)
この問題を解けるようになるまで(5 技能)
読み込み中…
右端(太枠)がこの問題で使う技能です。左へドラッグすると、さらに前の前提をさかのぼれます。技能を押すと、そこまでの道筋が光ります。
ヒント
行き詰まったら、上から順に 1 つずつ開いてください。
ヒント 1
技能「状態ごとの文字列数の漸化式」を使う。長さ の文字列を読み終えたとき各状態にいる個数 を、 から 1 文字ずつ更新していこう。
ヒント 2
遷移表から各状態に入る矢印を集めると、, , となる。初期値は 。
ヒント 3
順に計算すると で 、 で となる。あと 2 回更新して、受理状態 の個数を足せばよい。
答えと解説
答えを見る
どこでつまずきましたか?(選ぶと、戻る場所を案内します)
解説を読む
長さ の文字列のうち、初期状態 から読み終えたときに状態 にいるものの個数を とおく。
手順 1: 初期値。 長さ の文字列は空文字列 1 個だけで、読み終えた状態は なので
手順 2: 漸化式を立てる。 長さ の文字列は、長さ の文字列の後ろに 1 文字 を付けたものである。 に従い、遷移表で「行き先が になる矢印」をすべて集める。
- に入る矢印: ,
- に入る矢印:
- に入る矢印: , ,
よって
手順 3: 順に計算する。 を並べると
| 合計 | ||||
|---|---|---|---|---|
| 0 | 1 | 0 | 0 | 1 |
| 1 | 1 | 1 | 0 | 2 |
| 2 | 2 | 1 | 1 | 4 |
| 3 | 3 | 2 | 3 | 8 |
| 4 | 5 | 3 | 8 | 16 |
| 5 | 8 | 5 | 19 | 32 |
| 6 | 13 | 8 | 43 | 64 |
| 7 | 21 | 13 | 94 | 128 |
| 8 | 34 | 21 | 201 | 256 |
例えば から では , , である。各行の合計が になっていることで計算を確かめられる。
手順 4: 受理状態の個数を足す。 受理状態は なので、求める個数は
(参考: この は「 が 2 つ続く部分を含まない文字列」を受理する。)
答え:
別解
状態 は入力に関わらず に留まり、受理状態ではない(行き止まりの状態)。したがって に受理される文字列は、 に一度も到達しない文字列である。
に入る遷移は だけである。 にいるのは「直前の文字が 1 で、それまでに に入っていない」ときに限られる( は初期状態か、直前が 0 の状態)。よって に到達することは、文字列に連続した部分列 が現れることと同値である。
したがって、受理される文字列は「 を含まない 0,1 列」である。
長さ の を含まない文字列の個数を とする。末尾が 0 なら前の 文字は自由に を含まない列で 通り。末尾が 1 なら直前は 0 でなければならず、その前の 文字が 通り。よって であり、 である。
。
検算:状態 にいる文字列の数を とする。漸化式は 、 である。初期値は 。これを繰り返すと となり、 で となって一致する。