Si solo hubiera una cadena de estados sin bucle, ¿sabrías qué hacer?
Si hubiera un bucle simple sin esta ramificación superpuesta, ¿sabría qué hacer?
(Si la respuesta es "no", piense primero en estos casos).
Ahora, la idea es transformar el autómata progresivamente para ponerlo en una forma en la que pueda detectar esos patrones: cadenas, bucles y caminos divergentes que se vuelven a unir al final (lo que lleva a la alternancia). En cada paso de la transformación, tenga cuidado de que el autómata transformado todavía reconozca el mismo idioma.
Tenga en cuenta que este es un autómata no determinista. El que publicaste resulta ser determinista, pero no tiene que permanecer así cuando lo transformas.
Como el punto es que se puede alcanzar desde dos puntos diferentes, divídalo en dos. Mantenga , elimine la transición de a y agregue en su lugar un nuevo estado con transiciones . Ahora deberías poder detectar un patrón.q 1 f → q 2 g → q 3 q 4 q 2 q 5 q 4 j → q 5 g → q 3q2q1→fq2→gq3q4q2q5q4→jq5→gq3
Si todavía tiene problemas en este punto, observe que el ciclo que involucra corresponde a una expresión regular simple. Cuando llegue a , puede realizar tantas corridas alrededor de este ciclo como desee. En cierto sentido (que puede hacerse técnico), puede reemplazar el estado por la expresión regular .q 3 q 3 ( h j g ) ∗q3,q4,q5q3q3(hjg)∗
Tenga cuidado de verificar qué estados son finales. Puede ser útil no preocuparse por esto al principio y hacer un gran bucle, luego duplicar las partes que terminan en la mitad del bucle.
Esta no es necesariamente la técnica más eficiente o la que genera la expresión regular más simple, pero es simple.