アルファベット 上の決定性有限オートマトン を考える。状態の集合は 、初期状態は 、受理状態は のみであり、遷移関数 は次の表で与えられる(行が現在の状態、列が読む文字、表の中身が次の状態)。
| 状態 | ||
|---|---|---|
次の つの文字列のうち、 が受理するものの番号の集合を求めよ。
遷移表で与えられた DFA について、入力文字列を 1 文字ずつ読んで状態をたどり、最後の状態 が受理状態かどうかで が受理されるかを判定できる
中学までに習ったことだけで始められます。
決定性有限オートマトン(DFA)は、いつも状態を 1 つだけ持ち、文字を 1 つ読むたびに決まった規則で次の状態へ移る「機械」です。この技能を身につけると、遷移表で与えられた DFA に文字列を入力したとき、読み終えた時点でどの状態にいるかを求め、その文字列が受理されるかどうかを判定できます。パターン照合、字句解析、自動販売機のような制御の設計など、「入力を 1 文字ずつ見て判定する」処理を考えるときの基本になります。
DFA は 5 つの部品の組 で決まります。 は状態の有限集合、 は使う文字の有限集合(アルファベット)です。 は遷移関数で、状態 と文字 の組に、次の状態 をちょうど 1 つ対応させます。 は初期状態、 は受理状態の集合です。遷移表では、行が「今の状態」、列が「読む文字」を表し、行と列が交わるマスに次の状態が書かれています。
「決定性」とは、どの状態でどの文字を読んでも、行き先がちょうど 1 つに決まるという意味です。そのため、初期状態から文字列 を左から順に読むと、たどる状態の列 は迷うことなく 1 通りに決まります。この最後の状態 を と書きます。きちんと式で書くと、空文字列 (長さ 0 の文字列)に対しては とし、文字列 の後ろに文字 をつないだ に対しては と定めます。「ここまで読んだ後の状態」に「次の文字」を当てはめて 1 歩進む、という操作を繰り返しているだけです。
終点がただ 1 つに決まるので、「 なら を受理し、そうでなければ受理しない(拒否する)」という判定は、どの に対してもあいまいさなく決まります。途中でどの状態を通ったかは判定に関係しません。見るのは、読み終えた時点の状態だけです。
DFA の情報を確認する:状態の集合、アルファベット、遷移表、初期状態 、受理状態の集合 を読み取る。
現在の状態を初期状態 に置く。
入力文字列を左から 1 文字ずつ読む。読むたびに、遷移表の「現在の状態 」の行と「読んだ文字 」の列が交わるマスを見て、現在の状態をそこに書かれた に置き換える。
すべての文字を読み終えたときの状態が である(空文字列なら )。
なら は受理される、 なら受理されないと判定する。
アルファベット 、状態 の DFA を次の遷移表で定める。初期状態は 、受理状態は のみとする。
| 状態 | 0 | 1 |
|---|---|---|
入力 に対して となる を求めよ(あわせて、 が受理されるかどうかも判定せよ)。
手順 1:状態は 、アルファベットは 、初期状態は 、受理状態の集合は である。
手順 2:現在の状態を とする。
手順 3: を左から読む。
・1 文字目 : の行・ の列を見て 。
・2 文字目 :。
・3 文字目 :。
・4 文字目 :。
・5 文字目 :。
たどった状態の列は である。
手順 4:読み終えた時点の状態は なので、。
手順 5: なので、 は受理されない。
(参考:この DFA は、ここまで読んだ文字列を 2 進数とみたときの値を 3 で割った余りが のとき、状態 にいるように作られている。 は 10 進数で で、 より余りは 1 となり、結果と一致する。)
答え:
途中で受理状態を通ったから受理と判定してしまう誤り。正しくは読み終えた最後の状態だけで判定する。例:上の DFA で を読むと となる。途中(2 文字目・3 文字目の後)で受理状態 を通っているが、最後の状態は なので、 は受理されない(拒否)。
文字列を右から読んでしまう誤り。正しくは左端の文字から順に読む。例:上の DFA で を右から読むと となってしまうが、正しくは で、。
遷移表の行と列を取り違える誤り(読んだ文字の行や、状態の列を見てしまうなど)。正しくは「今の状態」の行と「読んだ文字」の列の交点を見る。例: は の行・ の列のマスで である。 の行・ の列のマス()と混同しない。
空文字列 の扱いを忘れる誤り。正しくは 1 文字も読まないので であり、初期状態が受理状態のときは は受理される。上の DFA では なので は受理される。
この説明は AI が書き、別の AI が例題を独立に解いて答えを確かめ、説明を一歩ずつ査読しました。
アルファベット 上の文字列 について、 に含まれる の個数を と書く。言語 を
と定める(たとえば 、、、)。 を受理する決定性有限オートマトン(DFA)のうち状態数が最小のものの状態数を求めよ。ただし、DFA の遷移関数はすべての状態とすべての入力記号に対して定義されている(全域的である)ものとし、状態数には到達可能な状態だけを数える。
アルファベット 上の決定性有限オートマトン を考える。状態の集合は 、初期状態は 、受理状態は と の 2 つであり、遷移関数 は次の表で与えられる。
| 状態 | |||
|---|---|---|---|
を正の整数とする。 が受理する長さ の文字列の個数を の式で表せ。