オートマトン・形式言語の問題
アルファベット 上の決定性有限オートマトン(DFA) を考える。状態の集合は 、初期状態は 、受理状態は と の 2 つである。遷移関数 は次の表で与えられる。
| 状態 | 入力 | 入力 |
|---|---|---|
が受理する言語と同じ言語を受理する DFA のうち、状態数が最小のもの(最小 DFA)の状態数を求めよ。ただし、DFA の遷移関数はすべての状態と入力文字について定義されているものとする。
この問題で使うもの
- DFA の最小化(区別可能な状態の対)(説明と入口の問題)
この問題を解けるようになるまで(2 技能)
読み込み中…
右端(太枠)がこの問題で使う技能です。左へドラッグすると、さらに前の前提をさかのぼれます。技能を押すと、そこまでの道筋が光ります。
一覧で見る(前提が先)
ヒント
行き詰まったら、上から順に 1 つずつ開いてください。
ヒント 1
DFA の最小化の技能を使います。まず初期状態から到達できない状態を取り除き、そのあと区別可能な状態の対に表で印をつけていきます。
ヒント 2
受理状態と非受理状態の対には、最初に印をつけます。印のない対 は、ある入力文字 で が印つきの対になるときに印をつけます。これを新しい印がつかなくなるまでくり返します。
ヒント 3
は到達不能なので除きます。受理状態 と、 のそれぞれとの対に印をつけます。次に入力 の遷移先を見ると、、、、 に印がつきます。残る対を確かめましょう。
答えと解説
答えを見る
どこでつまずきましたか?(選ぶと、戻る場所を案内します)
解説を読む
手順 1:到達不能な状態を除く。
初期状態 から遷移をたどる。
- から に行ける。
- から に行ける。
- から に行ける。
- から に行ける。
- からは にしか行けない。
よって到達可能な状態は である。 にはどの状態からも遷移が入ってこないので到達不能であり、取り除く。 は受理状態だが、どの入力でも到達しないので、取り除いても受理する言語は変わらない。
残る状態のうち受理状態は だけである。
手順 2:受理状態と非受理状態の対に印をつける。
空文字列 で区別できるので、次の 4 対に印をつける。
手順 3:印のない対を調べ、遷移先が印つきの対になるものに印をつける。
印のない対は、非受理状態 どうしの 6 対である。各対について、入力 での遷移先の対を調べる。
- : で に移る。これは印つきなので印をつける。
- : で 、 で に移る。どちらも印つきではないので保留する。
- : で に移る。印つきなので印をつける。
- : で に移る。印つきなので印をつける。
- : で 、 で に移る。どちらも印つきではないので保留する。
- : で に移る。印つきなので印をつける。
手順 4:新しい印がつかなくなるまでくり返す。
残った対を調べ直す。
- の遷移先は と (自分自身)である。
- の遷移先は (自分自身)と である。
どちらにも新しい印はつかないので、ここで終了する。
手順 5:同値類をまとめる。
印のつかなかった対 と は区別できない(同値な)状態の対である。よって同値類は
の 3 つになる。
(参考: は「 を部分文字列として含む文字列」を受理しており、3 つの同値類はそれぞれ「まだ を読んでいない」「直前が 」「 を読み終えた」に対応する。)
したがって、最小 DFA の状態数は である。
別解
初期状態 から到達できる状態を調べる。、、、 で、 は自分自身に戻る。よって到達可能な状態は で、 は到達不能なので除く。
受理状態は到達可能なものでは のみである。 は のどちらでも に戻る受理の吸収状態なので、他の状態とは区別できる。
残りの を分割する。
- と は、 でともに へ行き、 では互いに移り合う。区別できないので同値である。
- と は、 でともに へ行き、 では互いに移り合う。区別できないので同値である。
- と は、入力 で (非受理)と (受理)に分かれるので区別できる。
分割 は遷移について閉じていることを確認した。
- :、
- :、
- :
したがって最小 DFA の状態数は 3 である。