Autómata finito no determinista

De Wikipedia, la enciclopedia libre
Saltar a: navegación, búsqueda
En este ejemplo, δ(q0,b)=q0 y δ(q0,b)=q1. Por lo tanto, se trata de un autómata finito no determinista, que reconoce la expresión regular (a|b)*b+.

Un autómata finito no determinista (abreviado AFND) es un autómata finito que, a diferencia de los autómatas finitos deterministas (AFD), posee al menos un estado qQ, tal que para un símbolo a ∈ Σ del alfabeto, existe más de una transición δ(q,a) posible.

En un AFND puede darse cualquiera de estos dos casos:

  • Que existan transiciones del tipo δ(q,a)=q1 y δ(q,a)=q2, siendo q1q2;
  • Que existan transiciones del tipo δ(q, ε), siendo q un estado no-final, o bien un estado final pero con transiciones hacia otros estados.

Cuando se cumple el segundo caso, se dice que el autómata es un autómata finito no determinista con transiciones vacías o transiciones ε (abreviado AFND-ε). Estas transiciones permiten al autómata cambiar de estado sin procesar ningún símbolo de entrada. Considérese una modificación al modelo del autómata finito para permitirle ninguna, una o más transiciones de un estado sobre el mismo símbolo de entrada.

Definición formal[editar]

Formalmente, si bien un autómata finito determinista se define como una 5-tupla (Q, Σ, q0, δ, F) donde:[1]

en un AFND la función de transición se define como:

\delta:Q\times\Sigma\to\mathcal{P}(Q)

Para el caso de los AFND-ε, se suele expresar la función de transición de la forma:

\delta:Q\times\{\Sigma\cup\epsilon\}\to\mathcal{P}(Q)

donde P(Q) es el conjunto potencia de Q. Esto significa que los autómatas finitos deterministas son un caso particular de los no deterministas, puesto que Q pertenece al conjunto P(Q).

La interpretación que se suele hacer en el cómputo de un AFND es que el automáta puede pasar por varios estados a la vez, generándose una ramificación de las configuraciones existentes en un momento dado. Asimismo, en un autómata finito no determinista podemos aceptar la existencia de más de un nodo inicial.

Funcionamiento[editar]

La máquina comienza en el estado inicial especificado y lee una cadena de caracteres pertenecientes al alfabeto. El autómata utiliza la función de transición de estados T para determinar el siguiente estado, usando el estado actual y el símbolo que acaba de leer o la cadena vacía. Sin embargo, "el estado siguiente de un AFND no sólo depende de el evento de entrada actual, sino que también en un número arbitrario de los eventos de entrada posterior. Hasta que se producen estos acontecimientos posteriores no es posible determinar en qué estado se encuentra la máquina" . Cuando el autómata ha terminado de leer, y se encuentra en un estado de aceptación, se dice que el AFND acepta la cadena, de lo contrario se dice que la cadena de caracteres es rechazada. Tanto para un AFND como para un autómata finito determinista (AFD) se puede aceptar el mismo lenguaje. Por lo tanto, es posible convertir un AFND existente en un AFD para el desarrollo de una máquina tal vez más simple. Esto puede llevarse a cabo utilizando la construcción del conjunto potencia, que puede conducir a un aumento exponencial en el número de estados necesarios.

Implementación[editar]

Hay muchas formas de implementar una AFND:

  • Convertir al equivalente AFD: en algunos casos esto puede causar una explosión exponencial en el tamaño del autómata, y así un espacio auxiliar proporcional al número de estados en el AFND (como el almacenamiento del valor del estado requiere en la mayoría de un bit por cada estado en el AFND).
  • Mantener un conjunto de datos de todos los estados en que la máquina podría estar en la actualidad. Al consumir el último carácter de entrada, si uno de estos estados es un estado final, la máquina acepta la cadena. En el peor de los casos, esto puede requerir espacio adicional proporcional al número de estados en el AFND; si la estructura del conjunto usa un bit por estado del AFND, entonces esta solución es exactamente equivalente a la anterior.
  • Crear múltiples copias. Por cada n forma de la decisión, el AFND crea hasta n-1 copias de la máquina. Cada uno de ellos entrara en un estado independiente. Si, al momento de consumir el último símbolo de la entrada, al menos una copia del AFND esta en un estado de aceptación, el AFND lo aceptará. (Esto también requiere un almacenamiento lineal con respecto al número de estados del AFND, ya que puede haber una máquina por cada estado del AFND).

AFND-ε[editar]

Propiedades[editar]

Para todo p,q\in Q,, se escribe p\stackrel{\epsilon}{\rightarrow}q si y solo si a q se pude llegar desde p, yendo a lo largo de cero o más flechas \epsilon. En otras palabras, p\stackrel{\epsilon}{\rightarrow}q si y sólo si existe q_{1}, q_{2},\cdots q_{k}\in Q donde k\geq 0 tal que

q_{1}\in T(p,\epsilon), q_{2}\in T(q_{1},\epsilon),\cdots q_{k}\in T(q_{k-1},\epsilon), q\in T(q_{k},\epsilon).

Para cualquier p\in Q, el conjunto de estados que se puede llegar a partir de p se llama epsilon-closure o ε-closure de p y se escribe como

\,E(\{p\}) = \{ q\in Q : p\stackrel{\epsilon}{\rightarrow}q\}.

Para cualquier subconjunto P\subset Q, definir el ε-closure de P como

E(P) = \bigcup\limits_{p\in P}E(\{p\}).

Las transiciones epsilon son transitive, ya que puede demostrarse que para todo q_{0}, q_{1}, q_{2}\in Q y P\subset Q, si q_{1}\in E(\{q_{0}\}) y q_{2}\in E(\{q_{1}\}), entonces q_{2}\in E(\{q_{0}\}).

Del mismo modo, si q_{1}\in E(P) y q_{2}\in E(\{q_{1}\}) entonces q_{2}\in E(P) Sea x una cadena del alfabeto Σ∪{ε}. Un AFND-ε M acepta la cadena x si existe tanto una representación de x de la forma x1x2 ... xn, donde xi ∈ (Σ ∪{ε}), y una secuencia de estados

p0,p1, ..., pn, donde piQ, Cumpliéndose las siguientes condiciones:

  1. p0 \in E({q0})
  2. pi \in E(T(pi-1, xi )) para i = 1, ..., n
  3. pn \in F.

Aplicación[editar]

El AFND y el AFD son equivalentes en esto, ya que si un lenguaje es reconocido por el AFND, también será reconocido por un AFD, y viceversa. El establecimiento de esta equivalencia es útil porque a veces la construcción de un AFND para reconocer un lenguaje determinado es más fácil que construir un AFD para dicho lenguaje. También es importante porque el AFND se puede utilizar para reducir la complejidad del trabajo matemático necesario para establecer muchas propiedades importantes en la teoría de la computación. Por ejemplo, es mucho más fácil demostrar las siguientes propiedades utilizando un AFND que un AFD:

Ejemplo[editar]

El ejemplo siguiente muestra un AFND M, con un alfabeto binario que determina si la entrada contiene un número par de 0s o un número par de 1s. Entonces M = (Q, Σ, T, s0, F) donde:

  • Σ = {0, 1},
  • Q = {s0, s1, s2, s3, s4},
  • E({s0}) = { s0, s1, s3 }
  • F = {s1, s3}, y
  • La función de transición T puede ser definida por esta tabla de transición de estados:
0
1
ε
S0
{}
{}
{S1, S3}
S1
{S2}
{S1}
{}
S2
{S1}
{S2}
{}
S3
{S3}
{S4}
{}
S4
{S4}
{S3}
{}

El diagrama de estados para M es:

NFAexample.svg

M puede ser visto como la unión de dos AFDs: uno con los estados {S1, S2} y el otro con los estados {S3, S4}.

El lenguaje de M puede ser descrito por el lenguaje regular dado por la expresión regular:

(1^*(01^*01^*)^*) \cup  (0^*(10^*10^*)^*)

Véase también[editar]

Referencias[editar]

  1. Chakraborty, Samarjit (17 de marzo de 2003). «Formal Languages and Automata Theory. Regular Expressions and Finite Automata» (en inglés). Computer Engineering and Networks Laboratory. Swiss Federal Institute of Technology (ETH) Zürich:  pp. 17. http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.89.9977. Consultado el 30 de marzo de 2010. 

Bibliografía[editar]

  • M. O. Rabin and D. Scott, "Finite Automata and their Decision Problems", IBM Journal of Research and Development, 3:2 (1959) pp.115-125.
  • Michael Sipser, Introduction to the Theory of Computation. PWS, Boston. 1997.
  • John E. Hopcroft and Jeffrey D. Ullman, Introduction to Automata Theory, Languages, and Computation, Addison-Wesley Publishing, Reading Massachusetts, 1979.