✖

Conversión de un AFND en un AFD

Veremos cómo convertir un autómata no determinista en un autómata determinista, con lo que demostraremos que la potencia de los autómatas no deterministas y la de los deterministas es equivalente.

Idea básica

Tomemos un autómata no determinista ⟨QN, ΣN, δN, q0, FN⟩ sin transiciones ε. Construimos un autómata determinista ⟨QD, ΣD, δD, p0, FD⟩ de modo que

  • QD ⊆ 2QN
  • ΣD = ΣN
  • p0 = {q0}
  • FD = {Q ∈ QD  ∣  Q ∩ FN ≠ ∅}

La función de transición δD la definimos de la siguiente manera:

∀Q∈QD,a∈ΣD:δD(Q,a)=⋃q∈QδN(q,a)

¿Qué significa esto? Un autómata no determinista puede estar a la vez en varios estados, de modo que, por ejemplo, podemos llegar a una situación en la que nuestro autómata no determinista está en los estados {q0, q1}. Al leer el símbolo siguiente, por ejemplo 1, podemos pasar al conjunto de estados {q0, q2, q3}. En la versión determinista del mismo autómata esto se refleja así: creamos dos estados, los nombramos {q0, q1} y {q0, q2, q3} e introducimos entre ellos una transición para el símbolo 1. Formalmente pasamos de un estado a otro, pero gracias al nombre sabremos que en el autómata no determinista nos encontraríamos en dos o en tres estados, respectivamente.

Ejemplo

Tomemos este autómata no determinista:

Para construir el autómata determinista necesitamos, ante todo, construir una nueva función de transición. Nos ayudará una tabla en la que anotaremos todas las transiciones. Al principio la tabla tiene este aspecto:

estado/símbolo01{q0}

En la columna de la izquierda tendremos al final del algoritmo todos los estados del autómata determinista. La tabla rellena nos determinará la función de transición. Ahora anotamos en la tabla a qué estados llegamos si estamos en el estado {q0} y en la entrada están los símbolos 0 y 1.

estado/símbolo01{q0}{q1}{q1,q2}

Del estado q0 sale para el símbolo 0 una transición solo al estado q1, mientras que para el símbolo 1 sale a los estados q1 y q2. Ahora añadimos a la tabla dos estados nuevos: {q1} y {q1, q2}. ¿Por qué? Cada vez que completamos la tabla con un conjunto de estados que todavía no tenemos en la columna de la izquierda, añadimos ese conjunto de estados allí.

estado/símbolo01{q0}{q1}{q1,q2}{q1}{q1,q2}

y de nuevo rellenamos. En el estado {q1, q2} no debemos olvidar comprobar los dos estados, es decir, unir los estados a los que llegamos desde el estado q1 con aquellos a los que llegamos desde el estado q2.

estado/símbolo01{q0}{q1}{q1,q2}{q1}{q0,q1,q3}{q0,q3}{q1,q2}{q0,q1,q3}{q0,q3}

Hemos obtenido varios estados nuevos, que debemos añadir a la tabla:

estado/símbolo01{q0}{q1}{q1,q2}{q1}{q0,q1,q3}{q0,q3}{q1,q2}{q0,q1,q3}{q0,q3}{q0,q1,q3}{q0,q3}

…y otra vez completamos las transiciones:

estado/símbolo01{q0}{q1}{q1,q2}{q1}{q0,q1,q3}{q0,q3}{q1,q2}{q0,q1,q3}{q0,q3}{q0,q1,q3}{q0,q1,q3}{q0,q1,q2,q3}{q0,q3}{q1}{q1,q2}

Los estados {q0, q1, q3}, {q1} y {q1,q2} ya los tenemos, así que solo añadimos el estado {q0,q1,q2,q3}.

estado/símbolo01{q0}{q1}{q1,q2}{q1}{q0,q1,q3}{q0,q3}{q1,q2}{q0,q1,q3}{q0,q3}{q0,q1,q3}{q0,q1,q3}{q0,q1,q2,q3}{q0,q3}{q1}{q1,q2}{q0,q1,q2,q3}{q0,q1,q3}{q0,q1,q2,q3}

No hemos añadido ningún estado nuevo, así que la tabla está rellena. Ahora solo falta construir el diagrama de estados. Los estados del autómata determinista están en la primera columna y las transiciones para los símbolos 0 y 1 en las siguientes. Todo estado que contenga algún estado final del autómata original será también estado final en este autómata. Es decir, todo estado que contenga q3 será un estado final. El autómata quedará así:

Podemos comprobar que el autómata funciona realmente bien. Intentemos aceptar la palabra 11001. En el autómata determinista seguiremos el camino

q0→1q1,q2→1q0,q3→0q1→0q0,q1,q3→1q0,q1,q2,q3

y el autómata aceptaría la palabra, porque el último estado {q0, q1, q2, q3} es final. En el autómata no determinista llegaríamos durante la simulación a los mismos estados, es decir, empezaríamos en el estado q0 y para el símbolo 1 llegaríamos a los estados {q1, q2}. El siguiente símbolo 1 nos llevaría a los estados {q0,q3} y así sucesivamente con los demás estados. Al final nos encontraríamos en todos los estados {q0, q1, q2, q3} y el autómata aceptaría la palabra.

Fuentes

Capítulos: Autómata finito, Autómata completo, Autómata finito no determinista, Simulación de un autómata finito no determinista, Conversión de un AFND en un AFD