J'ai un problème simple de créer un DFA qui accepte toutes les entrées commençant par des lettres doubles (aa, bb) ou se terminant par des lettres doubles (aa, bb), étant donné que est l'ensemble alphabétique du langue donnée.
J'ai essayé de le résoudre de manière détournée en:
- Génération d'une expression régulière
- Faire son NFA correspondant
- Utilisation de la construction du jeu de puissance pour déduire un DFA
- Minimiser le nombre d'états dans DFA
Étape 1: L'expression régulière d'un problème donné est (parmi d'innombrables autres):
((aa|bb)(a|b)*)|((a|b)(a|b)*(aa|bb))
Étape 2: NFA pour une expression donnée est:
(source: livefilestore.com )
Sous forme de tableau, NFA est:
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) - -
Étape 3: conversion en DFA à l'aide de la construction du jeu de puissance:
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}
Étape 4: minimisez le DFA:
J'ai changé K-> G, J-> F, I-> E en premier. Dans l'itération suivante, H-> D et E-> F. Ainsi, le tableau final est:
State + Input:a + Input:b
->A | B | C
B | D | E
C | E | D
(D) | D | D
(E) | E | E
Et schématiquement, cela ressemble à:
(source: livefilestore.com )
... qui n'est pas le DFA requis! J'ai revérifié mon résultat. Alors, où je me suis trompé?
Remarque:
- -> = état initial
- () = état final
la source
Réponses:
Vous êtes bien jusqu'à l'étape 3 (le DFA) mais votre minimisation est incorrecte.
Il est clair que le DFA minimisé n'est pas correct, car les entrées
ba
etab
(qui ne sont pas dans la langue d'origine, ni acceptées par le DFA à l'étape 3) conduisent à l'état finalE
.En regardant vos étapes de minimisation, il semble que vous ayez des états finaux et non finaux unifiés; par exemple J (final) -> F (pas final) et I (final) -> E (pas final). La fusion d'un état final avec un état non final modifie la langue acceptée par l'automate, conduisant à l'acceptation de chaînes incorrectes comme indiqué ci-dessus.
la source