logo

NFAの例

例 1:

以下に示すように、遷移テーブルの NFA を設計します。

現状 0 1
→q0 q0、q1 q0、q2
q1 q3 e
q2 q2、q3 q3
→q3 q3 q3

解決:

遷移図は、表に示すマッピング関数を使用して描画できます。

NFAの例

ここ、

 δ(q0, 0) = {q0, q1} δ(q0, 1) = {q0, q2} Then, δ(q1, 0) = {q3} Then, δ(q2, 0) = {q2, q3} δ(q2, 1) = {q3} Then, δ(q3, 0) = {q3} δ(q3, 1) = {q3} 

例 2:

∑ = {0, 1} で NFA を設計すると、01 で終わるすべての文字列が受け入れられます。

.tostring java

解決:

NFAの例

したがって、NFA は次のようになります。

NFAの例

例 3:

∑ = {0, 1} で 2 つの '1' の後に 2 つの '0' が続く NFA を設計します。

解決:

ダブル 1 の FA は次のとおりです。

NFAの例

直後に 2 つの 0 が続く必要があります。

それから、

NFAの例

double 1 の前には、0 と 1 の任意の文字列を含めることができます。同様に、double 0 の後には、0 と 1 の任意の文字列を含めることができます。

したがって、NFA は次のようになります。

NFAの例

ここで文字列 01100011 を考えます。

 q0 → q1 → q2 → q3 → q4 → q4 → q4 → q4 

例 4:

すべての文字列に部分文字列 1110 が含まれる NFA を設計します。

解決:

この言語は、部分文字列 1010 を含むすべての文字列で構成されます。部分的な遷移図は次のようになります。

NFAの例

1010 が部分文字列になる可能性があります。したがって、言語の部分文字列 1010 を維持できるように、入力 0 と 1 を追加します。したがって、NFA は次のようになります。

git すべて追加
NFAの例

上記の遷移図の遷移表は次のようになります。

現状 0 1
→q1 q1 q1、q2
q2 q3
q3 q4
q4 q5
*q5 q5 q5

文字列 111010 を考えてみましょう。

 δ(q1, 111010) = δ(q1, 1100) = δ(q1, 100) = δ(q2, 00) 

捕まってしまった!入力シンボル 0 には q2 からのパスがないため、別の方法で文字列 111010 を処理できます。

 δ(q1, 111010) = δ(q2, 1100) = δ(q3, 100) = δ(q4, 00) = δ(q5, 0) = δ(q5, ε) 

状態 q5 は受け入れ状態です。全体をスキャンし、最終状態に到達しました。

例 5:

∑ = {0, 1} で NFA を設計すると、右端から 3 番目の記号が常に 0 であるすべての文字列が受け入れられます。

解決:

NFAの例

したがって、右端から 3 番目のシンボルは常に「0」として取得されます。 NFA には次のようなものがあります。

NFAの例

上の画像は NFA です。入力 0 の状態 q0 では、状態 q0 または q1 に進むことができます。