Autómata finito no determinista


Un autómata finito no determinista ( NFA ), o una máquina de estado finito no determinista , no necesita obedecer estas restricciones. En particular, cada DFA es también un NFA. A veces, el término NFA se usa en un sentido más estricto, en referencia a un NFA que no es un DFA, pero no en este artículo.

Usando el algoritmo de construcción de subconjuntos , cada NFA se puede traducir a un DFA equivalente; es decir, un DFA que reconoce el mismo lenguaje formal . [1] Al igual que los DFA, los NFA solo reconocen lenguajes regulares .

Los NFA fueron introducidos en 1959 por Michael O. Rabin y Dana Scott , [2] quienes también demostraron su equivalencia con los DFA. Los NFA se utilizan en la implementación de expresiones regulares : la construcción de Thompson es un algoritmo para compilar una expresión regular en un NFA que puede realizar de manera eficiente la coincidencia de patrones en cadenas. Por el contrario, el algoritmo de Kleene se puede utilizar para convertir un NFA en una expresión regular (cuyo tamaño es generalmente exponencial en el autómata de entrada).

Los NFA se han generalizado de múltiples maneras, por ejemplo, autómatas finitos no deterministas con movimientos ε , transductores de estado finito , autómatas pushdown , autómatas alternos, autómatas ω y autómatas probabilísticos . Además de los DFA, otros casos especiales conocidos de NFA son los autómatas finitos inequívocos (UFA) y los autómatas finitos autoverificadores (SVFA).

Hay dos formas de describir el comportamiento de un NFA, y ambas son equivalentes. La primera forma hace uso del no determinismo en nombre de una NFA. Para cada símbolo de entrada, el NFA pasa a un nuevo estado hasta que se hayan consumido todos los símbolos de entrada. En cada paso, el autómata "elige" de manera no determinista una de las transiciones aplicables. Si existe al menos una "ejecución afortunada", es decir, alguna secuencia de opciones que conducen a un estado de aceptación después de consumir completamente la entrada, se acepta. De lo contrario, es decir, si ninguna secuencia de elección puede consumir toda la entrada [3] y conducir a un estado de aceptación, la entrada se rechaza. [4] : 19  [5] : 319 

En la segunda forma, la NFA consume una cadena de símbolos de entrada, uno por uno. En cada paso, siempre que se apliquen dos o más transiciones, se "clona" a sí mismo en muchas copias apropiadas, cada una siguiendo una transición diferente. Si no se aplica ninguna transición, la copia actual está en un callejón sin salida y "muere". Si, después de consumir la entrada completa, alguna de las copias se encuentra en estado de aceptación, se acepta la entrada, de lo contrario, se rechaza. [4] : 19–20  [6] : 48  [7] : 56 


NFA para (0|1) *  1 (0|1) 3 .
Un DFA para ese idioma tiene al menos 16 estados.
El diagrama de estado para M . No es determinista ya que en el estado p leer un 1 puede conducir a poq .
Todas las ejecuciones posibles de M en la cadena de entrada "10".
Todas las ejecuciones posibles de M en la cadena de entrada "1011".
Etiqueta de arco: símbolo de entrada, etiqueta de nodo : estado, verde : estado de inicio, rojo : estado(s) de aceptación.
NFA compuesto aceptando la unión de las lenguas de unos NFA dados N ( s ) y N ( t ) . Para una cadena de entrada w en la unión de idiomas, el autómata compuesto sigue una transición ε desde q hasta el estado inicial (círculo de color izquierdo) de un subautómata apropiado, N ( s ) o N ( t ) , que, siguiendo a w , puede alcanzar un estado de aceptación (círculo coloreado a la derecha); a partir de ahí, estado fse puede alcanzar mediante otra transición ε. Debido a las transiciones ε, el NFA compuesto es propiamente no determinista incluso si tanto N ( s ) como N ( t ) fueran DFA; viceversa, construir un DFA para el lenguaje de unión (incluso de dos DFA) es mucho más complicado.