Minimización de Autómatas Finitos Deterministas
Minimización de Autómatas Finitos Deterministas
Ejemplo 3.6
Minimizar el AFD representado en el dígrafo de la Figura 3.11.
0
q s 0
0 r
1 0
p 1 1
1 1
1
u t
0
0
f: 0 1
→ c0 c1 c3
c1 c1 c2
c2 c3 c1
* c3 c3 c1
0
1
0 c2
c0 c1
1 1
1 c3 0
0
b
p5 a
b p7
a p3
a a b
p1
a b
a
b b a
p4 p6 p8
b a
b
p2
FiguraFigura
3.13: 3.13:
Dígrafo del del
Digrafo AFD de de
AFD la laTabla 3.12.
tabla 3.12.
c) A partir de la inspección de la función de transición de la Tabla 3.12, se deduce que el AFD no
es conexo, ya que el estado p7 no es accesible desde el estado inicial p1.
b
p5 a p7
b
a p3
a a b
p1
a b
a
b b a
p4 p6 p8
b a
b
p2
luego P11 = {p1, p2, p6}, P21 = {p3, p8}, P31 = {p4}, P41 = {p5} es decir que:
Q/E1 = {{p1, p2, p6}, {p3, p8}, {p4}, {p5}}
- Se repite el procedimiento a partir de Q/E1 y de la función de transición:
f(p1,a) = p3 P21 y f(p1,b) = p4 P31 → p1 P12
f(p2,a) = p8 P21 y f(p2,b) = p4 P31 → p2 P12
f(p3,a) = p6 P11 y f(p3,b) = p5 P41 → p3 P22
f(p4,a) = p5 P41 y f(p4,b) = p6 P11 → p4 P32
f(p5,a) = p1 P11 y f(p5,b) = p5 P41 → p5 P42
f(p6,a) = p6 P11 y f(p6,b) = p2 P11 → p6 P52
f(p8,a) = p6 P11 y f(p8,b) = p5 P41 → p8 P22
luego P12 = {p1, p2}, P22 = {p3, p8}, P32 = {p4}, P42 = {p5}, P52 = {p6} es decir que:
Q/E2 = {{p1, p2}, {p3, p8}, {p4}, {p5}, {p6}}
- Se repite el procedimiento a partir de Q/E2 y de la función de transición:
f(p1,a) = p3 P22 y f(p1,b) = p4 P32 → p1 P13
f(p2,a) = p8 P22 y f(p2,b) = p4 P32 → p2 P13
f(p3,a) = p6 P52 y f(p3,b) = p5 P42 → p3 P23
f(p4,a) = p5 P42 y f(p4,b) = p6 P52 → p4 P33
luego P13 = {p1, p2}, P23 = {p3, p8}, P33 = {p4}, P43 = {p5}, P53 = {p6} es decir que:
Q/E3 = {{p1, p2}, {p3, p8}, {p4}, {p5}, {p6}} = Q/E2 = Q/E
Para completar el proceso, se asignan luego nuevos nombres a los conjuntos de esta-
dos indistinguibles:
c0 = {p1, p2}, c1 = {p3, p8}, c2 = {p4}, c3 = {p5}, c4 = {p6}
Se deja al lector comprobar que el mismo conjunto cociente puede también ser obtenido
con el procedimiento de los esquemas de agrupamiento de estados utilizado en el Ejemplo
3.5.
e) La definición formal y dígrafo del AFD equivalente mínimo se presentan a continuación en la
Tabla 3.13 y Figura 3.15:
AFD min = ( Σ E , Q, q 0 , A, f ) f: a b
Σ E = {a, b} → c0 c1 c2
c1 c4 c3
Q = {c0, c1, c2, c3, c4}
c2 c3 c4
q 0 = c0
* c3 c0 c3
A = {c3}
c4 c4 c0
c3
b
a a b
a c1
c0
b c2 a
b
b c4
a
forma:
L(M) = { / = ((β 1 β 2 β 3 β 4 ) i abb j ) k ((β 1 β 2 β 3 β 4 ) l bab m ) n ó
((β 1 β 2 β 3 β 4 ) i bab j ) k ((β 1 β 2 β 3 β 4 ) l abb m ) n , con i, j, k, l, m 0; n 1}
Como ya fue anticipado, en el próximo capítulo, se presentará un procedimiento sistemático
para deducir las reglas de producción de la gramática que genera el lenguaje aceptado por un
AFD y que permitirá confirmar las formas generales propuestas, lo que se deja reservado al
lector.
g) Para mostrar el comportamiento del autómata de selecciona una cadena tal como
=bbbabbL(M), que responde a la forma general β4abbp. Con el fin de seguir su desempeño
en el proceso de aceptación de la cadena, se utilizan las representaciones del árbol de configu-
raciones o descripciones instantáneas y el plano estados-entradas, que son mostrados en las
Figuras 3.16 y 3.17.
(c2 , bbabb)
(c4 , babb)
(c0 , abb)
(c1 , bb)
(c3 , b)
c0 b b b a b b
c1
c2
c3
c4
e b
b
e
b
def r s bdf
e
demás estados. Esto es así en el autómata finito del modelo. Sin embargo, en el equipo
reproductor de audio, el estado r corresponde a la acción de retroceder sobre el medio de
entrada, mientras que el estado s está asociado a un movimiento en sentido opuesto, es
decir, adelantar sobre el mismo medio. Esta aparente inconsistencia no es tal, ya que al
suponer el funcionamiento circular, al avanzar más allá del último tema de música se conti-
núa con el primero y al retroceder, en el primero, se continúa con el último.
Ejemplo 3.9
Una de las principales aplicaciones de los autómatas finitos es la identificación de los componen-
tes del texto de un documento, pudiendo estar inserto ya sea en un corrector ortográfico o en un
compilador, entre otros. En este último caso, el autómata finito es denominado analizador léxico
(en realidad, constituye la rutina de reconocimiento del módulo denominado con ese nombre) y
dentro de un compilador su misión es identificar las palabras reservadas, variables, constantes,
operadores y demás elementos que forman las sentencias del programa.
Debe tenerse presente que el analizador léxico recibe el programa fuente como una larga ca-
dena de caracteres, con espacios y caracteres especiales de control intercalados (<CR>, <LF>,
<TAB>, etcétera) y debe separar e identificar los componentes del lenguaje, llamados componen-
tes léxicos o tokens. Las posibles secuencias de caracteres que definen un token son verificadas,
ya que deben responder a ciertas expresiones regulares, y clasificadas. Luego se les asigna una
dirección en la tabla de símbolos y sirven de base a la siguiente etapa del proceso de compilación,
que es denominada de análisis sintáctico, tal como se describe en detalle en el Apéndice A.
En este ejemplo, se desea construir un analizador léxico que, en un programa escrito en len-
guaje Java, identifique los valores numéricos (constantes) en sus diferentes tipos (int, float, double)
y notaciones, cuya representación es resumida en la Tabla 3.17, mostrada a continuación.
TablaTabla
3.20: Función
3.20: Funciónde
detransición delanalizador
transición del analizador léxico.
léxico.
Nótese que el AFD llegará a uno de los estados finales cuando complete la identificación de
un componente numérico del código del programa. El estado alcanzado dependerá del tipo y no-
tación del elemento encontrado. Luego el AFD debe regresar al estado inicial para esperar la llega-
da de la próxima cadena y continuar operando hasta completar el análisis léxico, destinado a iden-
tificar los números presentes en todas las sentencias del programa.
También es necesario destacar que el símbolo β es genérico, representando cualquier carác-
ter inválido como inicio de una cadena que contenga un número. Es decir que ante la lectura de
cualquier símbolo a { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 , + , - } el autómata permanecerá en el estado
inicial “p”.
b) Grafo del AFD (analizador léxico)
β
1..9 0..9
p
+, -
1..9 ;,b c0
q t
0 ;,b
0
. 0..9
r
. s 0..9 u ;,b c1
E
0..9
+, - 0..9 ;,b c2
v w x
0..9
0..F
x ;,b
y c3
0..7
1..7 ;,b c4
z
bolo de inicio de cinta (BOT) está en la posición 0 y el contador se incrementa hacia la derecha, lo
que implica que el primer carácter de la cadena de entrada está en la posición 1.
Según este criterio, la configuración Kt de un AFDB que opera sobre una cierta cadena de en-
trada , que en el instante t está en el estado q y con el cabezal en la posición k es:
K t = (q, ├┤, k)
Bajo esta definición, la configuración inicial toma la forma:
K 0 = (q 0 , ├┤, 0)
y la configuración final de aceptación, bajo el criterio adoptado es:
K A = (q A , ├┤, n), en donde q A A y n=+1
Una forma alternativa de representar la configuración de un AFDB es:
K t = qβ
Donde q es el estado actual del autómata, el prefijo de la cadena de entrada que antece-
de al cabezal y β el sufijo que sigue al cabezal (=β). Según este criterio, la configuración ini-
cial es K 0 =q 0 y la final K A =q A .
Lenguaje reconocido por el AFDB
Usando a la notación de movimientos entre configuraciones definida para los autómatas finitos, el
lenguaje L que es aceptado por un autómata finito bidireccional M puede definirse en símbolos
como:
L(M) = { / E* y q 0 ├─* q A , qAA}
El problema de la parada
Ya fue anticipado que el AFDB puede quedar atrapado en un ciclo cerrado y esto puede ser reco-
nocido, cuando al operar sobre una cadena de entrada, se repita una misma configuración. Siendo
finitos el conjunto de estados posibles y la cinta de entrada, aunque con cierto esfuerzo, esta si-
tuación puede determinarse entonces por un algoritmo.
Extensión al tratamiento de palabras
La extensión de la función de transición para describir lo que ocurre a partir de cada estado si se
recibe una secuencia concatenada de los símbolos de entrada en lugar de recibir símbolos aisla-
dos, es realizada al igual que en el AFD. Aunque no la explicitaremos aquí, es importante notar que
en este caso la extensión debe incluir también la función de movimiento, ya que esta última es
determinante en el comportamiento del AFDB.
Equivalencia entre AFDB y AFD
El movimiento del cabezal en dos sentidos no brinda ninguna capacidad adicional con respecto al
AFD, lo que implica que todo AFDB tiene un AFD equivalente, lo que aquí no es demostrado. El ra-
zonamiento inverso ya fue establecido al admitirse que los AFD son un caso particular del AFDB.
Ejemplo 3.10
Proponer un AFDB que resuelva el problema de aceptar las cadenas que responden a la forma
general =(a+b) * ba del Ejemplo 3.5.
En la solución que aquí se propone el autómata busca el final de la cadena y luego retrocede
para asegurarse de que los dos últimos símbolos corresponden al sufijo ba. De esta manera, el
problema se circunscribe a analizar este sufijo, prescindiendo totalmente del prefijo que lo antece-
de, que puede no existir. En caso de que el sufijo no cumpla la condición requerida el autómata
arriba a un estado de error que aquí es identificado como c4. El grafo del AFDB es el siguiente:
a,D ├,D
b,D a, I b,D
┤, I s
p q r
b,D a,D a,D
├,D ├,D ┤,N
t
a,D
(p, ├ a b b b a ┤ , 1)
Búsqueda (p, ├ a b b b a ┤ , 2)
del final de
la cadena
avanzando (p, ├ a b b b a ┤ , 3)
hacia la
derecha (p, ├ a b b b a ┤ , 4)
(p, ├ a b b b a ┤ , 5)
(p, ├ a b b b a ┤ , 6)
(q, ├ a b b b a ┤ , 5)
Comprobación
del sufijo “ba”
requerido para (r, ├ a b b b a ┤ , 4)
aceptar la
cadena (s, ├ a b b b a ┤ , 5)
├ a b b b a ┤
p p p p p p p
r q
s s