技能一覧 › 大学数学 オートマトン・形式言語

決定性有限オートマトンの動作と受理判定

遷移表で与えられた DFA について、入力文字列を 1 文字ずつ読んで状態をたどり、最後の状態 が受理状態かどうかで が受理されるかを判定できる

前提

中学までに習ったことだけで始められます。

説明

決定性有限オートマトン(DFA)は、いつも状態を 1 つだけ持ち、文字を 1 つ読むたびに決まった規則で次の状態へ移る「機械」です。この技能を身につけると、遷移表で与えられた DFA に文字列を入力したとき、読み終えた時点でどの状態にいるかを求め、その文字列が受理されるかどうかを判定できます。パターン照合、字句解析、自動販売機のような制御の設計など、「入力を 1 文字ずつ見て判定する」処理を考えるときの基本になります。

なぜそうしてよいのか

DFA は 5 つの部品の組 で決まります。 は状態の有限集合、 は使う文字の有限集合(アルファベット)です。 は遷移関数で、状態 と文字 の組に、次の状態 をちょうど 1 つ対応させます。 は初期状態、 は受理状態の集合です。遷移表では、行が「今の状態」、列が「読む文字」を表し、行と列が交わるマスに次の状態が書かれています。

「決定性」とは、どの状態でどの文字を読んでも、行き先がちょうど 1 つに決まるという意味です。そのため、初期状態から文字列 を左から順に読むと、たどる状態の列 は迷うことなく 1 通りに決まります。この最後の状態 を と書きます。きちんと式で書くと、空文字列 (長さ 0 の文字列)に対しては とし、文字列 の後ろに文字 をつないだ に対しては と定めます。「ここまで読んだ後の状態」に「次の文字」を当てはめて 1 歩進む、という操作を繰り返しているだけです。

終点がただ 1 つに決まるので、「 なら を受理し、そうでなければ受理しない(拒否する)」という判定は、どの に対してもあいまいさなく決まります。途中でどの状態を通ったかは判定に関係しません。見るのは、読み終えた時点の状態だけです。

手順

  1. DFA の情報を確認する:状態の集合、アルファベット、遷移表、初期状態 、受理状態の集合 を読み取る。

  2. 現在の状態を初期状態 に置く。

  3. 入力文字列を左から 1 文字ずつ読む。読むたびに、遷移表の「現在の状態 」の行と「読んだ文字 」の列が交わるマスを見て、現在の状態をそこに書かれた に置き換える。

  4. すべての文字を読み終えたときの状態が である(空文字列なら )。

  5. なら は受理される、 なら受理されないと判定する。

例題

アルファベット 、状態 の DFA を次の遷移表で定める。初期状態は 、受理状態は のみとする。

状態01

入力 に対して となる を求めよ(あわせて、 が受理されるかどうかも判定せよ)。

例題の解答

手順 1:状態は 、アルファベットは 、初期状態は 、受理状態の集合は である。
手順 2:現在の状態を とする。
手順 3: を左から読む。
・1 文字目 : の行・ の列を見て 。
・2 文字目 :。
・3 文字目 :。
・4 文字目 :。
・5 文字目 :。
たどった状態の列は である。
手順 4:読み終えた時点の状態は なので、。
手順 5: なので、 は受理されない。
(参考:この DFA は、ここまで読んだ文字列を 2 進数とみたときの値を 3 で割った余りが のとき、状態 にいるように作られている。 は 10 進数で で、 より余りは 1 となり、結果と一致する。)

答え:

よくある誤り

この説明は AI が書き、別の AI が例題を独立に解いて答えを確かめ、説明を一歩ずつ査読しました。

入口の問題

この技能を使う問題

この技能の次に学べること