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

非決定性有限オートマトンと部分集合構成

NFA( 遷移なし)が文字列を受理するかを、到達しうる状態の集合をたどって判定でき、部分集合構成で得られる DFA の到達可能な状態(状態の部分集合)とその個数を求められる

前提

説明

非決定性有限オートマトン(NFA)は、ある状態である文字を読んだときの行き先が 1 つとは限らない(0 個や 2 個以上もありうる)オートマトンです。この技能では、NFA が文字列を受理するかを「今いる可能性のある状態の集合」をたどって判定します。さらに部分集合構成という方法で、同じ言語を受理する DFA を作ります。その DFA の初期状態から到達できる状態(元の NFA の状態の部分集合)を列挙し、その個数を求められるようになります。

なぜそうしてよいのか

NFA は、状態の有限集合 、アルファベット 、遷移関数 、初期状態 、受理状態の集合 で与えられます。DFA と違うのは、 が 1 つの状態ではなく の部分集合(空集合 でもよい)になる点です。NFA が文字列 を受理するとは、 から の文字に沿って遷移をたどる道筋のうち、少なくとも 1 つが受理状態で終わることをいいます。途中で行き先がなくなった道筋は、そこで消えます。

道筋を 1 本ずつ調べると枝分かれで数が増えてしまいます。そこで、「ここまで読んだ時点でいる可能性のある状態」を集合 にまとめます。次の文字 を読んだ後の集合は、 の各状態からの行き先をすべて合わせた です。どの道筋でどの状態にいるかの区別は、その後の動きに影響しません。影響するのは、どの状態にいるかだけです。そのため、集合だけ覚えておけば情報は失われません。読み終えたときの集合に受理状態が 1 つでも含まれれば、受理状態で終わる道筋があるので受理となります。

ここで、集合 と文字 から がただ 1 つに決まることに注目します。つまり「状態の集合」を 1 つの状態とみなせば、前提の技能で扱った DFA そのものになります。これが部分集合構成です。DFA の状態は の部分集合、初期状態は 、受理状態は と共通部分をもつ部分集合です。部分集合は全部で 個ありますが、実際に からたどり着けるものだけを作れば十分です。

手順

  1. 初期の集合を とする。

  2. 文字 を読むたびに、集合を に更新する。 の各状態の行き先をすべて合わせる。 なら である。

  3. 受理判定:文字列を読み終えた集合 が を満たせば受理、満たさなければ不受理とする。

  4. 部分集合構成: から始める。新しく現れた集合それぞれについて、すべての文字 での行き先の集合を手順 2 の式で計算する。まだ現れていない集合が出たらリストに加える。

  5. 新しい集合が出なくなったら終了する。現れた集合が到達可能な DFA の状態であり、その個数を数える( が現れた場合はそれも 1 個に数える)。 と共通部分をもつ集合が DFA の受理状態になる。

例題

アルファベット 上の NFA を考える。状態は で、初期状態は 、受理状態は のみとする。遷移は次の表のとおりである( は行き先がないことを表す)。

状態

この NFA に部分集合構成を行って得られる DFA について、初期状態 から到達可能な状態の個数を求めよ。

例題の解答

手順 1:初期状態は である。

手順 4( の遷移): では である。これは新しい集合なので とおく。 では となる。

手順 4( の遷移): では となり、これを新しい状態 とする。 では となり、これを新しい状態 とする。

手順 4( の遷移): では となる。 では となる。

手順 4( の遷移): では となる。 では となる。

手順 5:新しい集合はもう現れないので終了する。到達可能な状態は の 4 個である。 は現れない。部分集合は全部で 個あるが、到達できるのはこの 4 個だけである。なお、受理状態は を含む である。たとえば を読むと と進み、 が受理状態なので受理される。

答え:

よくある誤り

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

入口の問題

この技能を使う問題