NFAからDFAに変換できません


11

与えられたΣ={a,b}与えられた言語のアルファベットセットが { a b }である。

私はそれを回り道で解決しようとしました:

  1. 正規表現を生成する
  2. 対応するNFAの作成
  3. パワーセット構造を使用してDFAを推定する
  4. DFAの状態の数を最小限に抑える

ステップ1: 与えられた問題の正規表現は(数えきれないほどの中で):

((aa|bb)(a|b)*)|((a|b)(a|b)*(aa|bb))

ステップ2: 指定された式のNFAは次のとおりです。

NFA
(ソース:livefilestore.com

表形式では、NFAは次のとおりです。

State    Input:a     Input:b
->1        2,5         3,5
  2        4           -
  3        -           4
 (4)       4           4
  5        5,7         5,6
  6        -           8
  7        8           -
 (8)       -           -

ステップ3:パワーセット構造を使用してDFAに変換します。

Symbol, State       +   Symbol, State (Input:a) +   Symbol, State (Input:b)
   ->A, {1}         |        B, {2,5}           |        C, {3,5}
     B, {2,5}       |        D, {4,5,7}         |        E, {5,6}
     C, {3,5}       |        F, {5,7}           |        G, {4,5,6}
   (D), {4,5,7}     |        H, {4,5,7,8}       |        G, {4,5,6}
     E, {5,6}       |        F, {5,7}           |        I, {5,6,8}
     F, {5,7}       |        J, {5,7,8}         |        E, {5,6}
   (G), {4,5,6}     |        D, {4,5,7}         |        K, {4,5,6,8}
   (H), {4,5,7,8}   |        H, {4,5,7,8}       |        G, {4,5,6}
   (I), {5,6,8}     |        F, {5,7}           |        I, {5,6,8}
   (J), {5,7,8}     |        J, {5,7,8}         |        E, {5,6}
   (K), {4,5,6,8}   +        D, {4,5,7}         +        K, {4,5,6,8}

ステップ4: DFAを最小化します。

最初にK-> G、J-> F、I-> Eを変更しました。次の反復では、H-> DおよびE-> F。したがって、最終的なテーブルは次のとおりです。

  State    +   Input:a     +   Input:b
   ->A     |      B        |      C
     B     |      D        |      E
     C     |      E        |      D
    (D)    |      D        |      D
    (E)    |      E        |      E

そして、図式的には次のようになります:

最終DFA
(ソース:livefilestore.com

...これは必須のDFAではありません!結果をトリプルチェックしました。それで、私はどこで間違ったのですか?

注意:

  • -> =初期状態
  • ()=最終状態

3
これは、一連の考え全体を含めているため、よく出された基本的な質問の良い例です。
ラファエル

感謝されてとても嬉しいです、ありがとう!^^
アヌラーグカリア2013

回答:


5

ステップ3(DFA)までは問題ありませんが、最小化は正しくありません。

入力baab(元の言語ではなく、ステップ3のDFAで受け入れられない)入力の両方が最終状態になるため、最小化されたDFAが正しくないことは明らかですEです。

最小化手順を見ると、最終状態と非最終状態が統一されているようです。たとえば、J(最終)-> F(最終ではない)およびI(最終)-> E(最終ではない)。最終状態と非最終状態をマージすると、オートマトンが受け入れる言語が変わり、上記のように誤った文字列が受け入れられます。


1
ああ。それが、ここで問題を引き起こしているものです。私が覚えているように、この方法を最後に使用したとき、表には特定の受け入れ状態がまったくありませんでした。
Anurag Kalia 2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.