Академический Документы
Профессиональный Документы
Культура Документы
Semestre I-2011
Automatización
del razonamiento
Autómata Finito No Determinista
Un AFN es una 5-tupla (S,Σ,δ,s0,F) donde:
S : conjunto de estados
Σ : conjunto de símbolosdeentrada
δ: funciónde transición
δ: S xΣ→P(S)
s0 ∈∈S : estado inicial
F ⊆⊆S : conjunto de estados finales (o de
aceptación)
AFN
d
c 5 6
a
inicio d
1 3
c
b a
4
∈
2
1) S ={1,2,3,4,5,6}
2) Σ ={a,b,c,d}
3) δ(1,c)={1} δ(1,d)={3} δ(1,a)={2,5} δ(2,b)={1}
δ(2,ε)={4} δ(1,c)={4} δ(5,d)={6}
1) s0 = 1
2) F = {3,6}
Cómo funciona un AFN?
Dado un string, debe determinar si lo acepta
o no.
El string c1c2...cn es aceptado por un AFN
cuando existe, en el grafo de transiciones,
un camino
c1 c2 cn
s0→s1→s2→... →sm-1→sm
de manera que sm es un estado final (de
aceptación)
¿Aceptaría el autómata “abcd”? ¿Y ”acd”?
inicio d
1 3
b a
2
¿Aceptaría el autómata “abcd”?
d
c 5 6
a
inicio d
1 3
c
b a
4
∈
2
AF para ‘a’ ∈Σ
inicio a
S1 S2
Conversión de una expresión regular a AFN
R1 ∈ R2
inicio
R1
S1 S2
inicio
R2
AF para la expresión regular R* ∈
R1 ∈
∈
S1 S2
inicio ∈
AF para un conjunto ER
∈
inicio S1 R1 ∈
∈
∈ ∈
S2 R2 S
∈
∈
∈
S3
R3 ∈
∈
…
Conversión de una expresión
regular a AFN
Ejemplo: proceso de construcción para
(ab|c)*d
inicio (ab|c)* ∈ d
1 2
∈
inicio ∈ (ab|c)* ∈ ∈ d
3 4 1 2
∈
Conversión de una e.r. en un AFN
∈
∈ ab ∈
inicio ∈ ∈5 ∈ ∈ d
3 8 4 1 2
∈ ∈
c
6 7
∈
∈
a ∈ b
9 10 11 12
∈
∈
inicio ∈ ∈5 ∈ ∈ d
3 8 4 1 2
∈ ∈
c
6 7
∈
Conversión de AFN a AFD
a
Am
inicio b
0 igü
a
1
b
2
b *
ed 3
ad
b a
a
1 2
∈
Am
inicio
0
big
üe
d ad b
∈ b
3 4
Trasformación de AFN a AFD
La idea básica es que un estado del AFD
agrupa un conjunto de estados del AFN
inicio ∈
a
1 2 5
a a a
b b
3 4
inicio a
b
1,2 3,4,5 4,5
a a
b
5
Transformación de un AFN en un AFD
Sea = (S,Σ,δ, s0,F) un AFN
∈-clausura de s ∈S
Conjunto de estado de N alcanzables desde s usando
transiciones ∈
- ∈-clausura de T⊆S
∪ clausura∈(s)
s∈T
- mueve(T,c)
Conjunto de estados a los que se puede llegar desde
algún estado de T mediante la transición c
Algoritmo simulador de AFN
boolean simulaAFN(x,A)
{/* Pre: x es la cadena a aceptar
A=(S,Σ,δ,s0,F) es el AFN
Post:acep = x es aceptado por A */
Conjunto(estados ∪{ERROR}) T
int i
<i,T>:=<1,clausuraε({s0})>
While(T<>{ERROR} and i<=length(x)){
T =clausuraε(mueve(A,T,x[i]))
i =i+1
}
acep =(T∩ F<>∅)
return acep
}
AFD
Como es lógico, cuantos más estados tiene un AF,
más memoria es necesaria
El número de estados del AFD se puede/debe
minimizar
inicialmente, dos estados:
• uno con los de aceptación
• otro con los demás
sucesivas particiones de estados “globales” que no
concuerdan con algún sucesor para un símbolo de entrada
El AFD mínimo equivalente es único
Ejemplo
b c
a 2 3 4
inicio
1
d b c
5 6 7
c
1,2,3,5,6 4,7
b c
1,2, 5 3,6 4,7
a b c
1 2,5 3,6 4,7
d
Ejercicio
Los identificadores para un determinado
lenguaje de programación se definen de
acuerdo con la siguiente descripción: Un
identificador puede empezar con una letra o un
"underscore" (_), debe estar seguido por 0 ó
más letras, dígitos o underscores, pero con las
restricciones siguientes:
1) No pueden aparecer dos underscores
seguidos
2) Un identificador no puede terminar con un
underscore.Además, no hay ninguna limitación
en cuanto a la longitud de los identificadores.
Ejercicio
Dibujar el Autómata Finito Determinista
que corresponde a los identificadores
descritos anteriormente. Para etiquetar los
arcos, en lugar de utilizar caracteres
simples utilizar las siguientes clases de
caracteres:
letra [a-zA-Z] digito [0-9] und “_"
Ejercicio
Q={q1,q2} Para w=abba
(q1, abba, Z) ├ (q1, bba, AZ)
Σ = {a,b}
├ (q1, ba, Z)
Γ = {A,B,Z}
├ (q1, a, BZ)
s = q1
├ (q1, ε, Z)
F ={q2} ├ (q2, ε, Z)
z=Z
Δ (q1, ε,Z)={(q2,Z)}
Δ (q1, a,Z)={(q1,AZ)} Qué movimientos realiza para las cadenas:
Δ (q1, b,Z)={(q1, BZ)}
Δ (q1, a,A)={(q1,AA)} *abaababb
Δ (q1, b,A)={(q1, ε)} *abaa
Δ (q1, a,B)={(q1, ε)} ¿son aceptadas por M?
Δ (q1, b,B)={(q1, BB)}
Definición
Un autómata de pila es una 7-tupla
M=(Q,Σ,Γ, Δ , s, F, z) donde:
Q es un conjunto finito de estados
Σ es un alfabeto de entrada finito
Γ es un alfabeto de la pila finito
Δ ⊆ (Q × Σ* × Γ*) × (Q × Γ*) es la regla de
transición de estados
s ∈ Q es el estado inicial
F ⊆ Q es el conjunto de estados finales
z ∈ Γ es el símbolo inicial de la pila
Ejercicio
Q={q1, q2 ,q3}
Σ = {a,b}
Γ = {a,b,z}
s = q1
F ={q3}
z = simbolo inicial de la pila Dibujar y describir los movimientos
Δ (q1, a,z)={(q1,az)} que realiza sobre las cadenas
Δ (q1, a,a)={(q1,aa)} •c
Δ (q1, a,b)={(q1,ab)} • abcba
Δ (q1, b,z)={(q1,bz)}
• abcab
Δ (q1, b,a)={(q1,ba)}
Δ (q1, b,b)={(q1,bb)} • babbcbbab
Δ (q1, c,z)={(q2, z)}
Δ (q1, c,a)={(q2,b)}
Δ (q2, c,b)={(q2,b)}
Δ (q2, a,a)={(q2, ε)}
Δ (q2, b,b)={(q2, ε)}
Δ (q2, ε,z)={(q3, z)}
Ejercicio
El lenguaje
L = {wwi | w ∈ {a,b}+ }
Δ
(a,A) (b,A) (ε,A) (a,B) (b,B) (ε,B)