与えられた与えられた言語のアルファベットセットが { a 、b }である。
私はそれを回り道で解決しようとしました:
- 正規表現を生成する
- 対応するNFAの作成
- パワーセット構造を使用してDFAを推定する
- DFAの状態の数を最小限に抑える
ステップ1: 与えられた問題の正規表現は(数えきれないほどの中で):
((aa|bb)(a|b)*)|((a|b)(a|b)*(aa|bb))
ステップ2: 指定された式の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
そして、図式的には次のようになります:
(ソース:livefilestore.com)
...これは必須のDFAではありません!結果をトリプルチェックしました。それで、私はどこで間違ったのですか?
注意:
- -> =初期状態
- ()=最終状態
3
これは、一連の考え全体を含めているため、よく出された基本的な質問の良い例です。
—
ラファエル
感謝されてとても嬉しいです、ありがとう!^^
—
アヌラーグカリア2013