Un autómata finito determinista ( DFA , DFA , eng. deterministic finite automaton , DFSA , eng. deterministic finite-state automaton , ing. deterministic finite-state automaton , DFSM eng. deterministic finite-state machine ), también conocido como reconocedor determinista finito , es un autómata finito que acepta o rechaza los caracteres de una cadena determinada al pasar por la secuencia de estados definida por la cadena [1] . Tiene una sola secuencia de estados durante la operación. McCulloch y Walter Pitts estuvieron entre los primeros investigadores en proponer un concepto similar a una máquina de estado en 1943 [2] [3] .
La figura ilustra una máquina de estados finitos deterministas usando un diagrama de estados . En este ejemplo, hay tres estados: S 0 , S 1 y S 2 (reflejados en la figura por círculos). El autómata acepta una secuencia finita de ceros y unos como entrada. Para cada estado, hay una flecha de transición que va de un estado a otro tanto para el 0 como para el 1. Después de leer un símbolo, el DFA cambia de forma determinista de un estado a otro, siguiendo la flecha de transición. Por ejemplo, si el autómata está en el estado S 0 y el símbolo de entrada es 1, entonces el autómata pasa de forma determinista al estado S 1 . Un DFA tiene un estado inicial (representado gráficamente por una flecha que surge de la nada) desde donde comienza el cálculo y un conjunto de estados finales (representados gráficamente como un círculo doble) que determinan si el cálculo tiene éxito.
DFA se define como un concepto matemático abstracto, pero a menudo se implementa en hardware y software para resolver problemas específicos. Por ejemplo, un DFA puede modelar programas que deciden si una dirección de correo electrónico ingresada por el usuario es válida.
DFA reconoce exactamente una variedad de lenguajes regulares [1] que son útiles para el análisis léxico y la coincidencia de patrones , entre otras cosas . Los DFA se pueden construir a partir de autómatas finitos no deterministas ( NFA ) al reducir los DFA a NFA .
Un autómata finito determinista es una tupla de 5 que consta de
Sea una cadena sobre el alfabeto . El autómata acepta una cadena si la secuencia de estado existe con las siguientes condiciones
En otras palabras, la primera condición dice que la máquina parte del estado . La segunda condición dice que para un carácter de cadena dado, la máquina pasa de un estado a otro de acuerdo con la función de transición . La última condición dice que la máquina acepta si el último carácter de entrada de la cadena hace que la máquina vaya a uno de los estados finales. De lo contrario, se dice que el autómata rechaza la cadena. El conjunto de cadenas que acepta es un idioma reconocido por el autómata , y este idioma se denota por .
Una máquina determinista de estados finitos sin estados finales ni estados iniciales se conoce como sistema de transición o semiautómata .
Para una definición formal más completa, ver el artículo " Teoría de Autómatas ".
De acuerdo con la definición anterior, los autómatas finitos deterministas siempre están completos : definen una transición para cada estado y para cada símbolo de entrada.
Si bien la definición utilizada es la más generalmente aceptada, algunos autores utilizan el término autómata finito determinista para un concepto ligeramente diferente: un autómata que define como máximo una transición (en lugar de exactamente una como en la definición anterior) para cada estado y cada símbolo de entrada. . La función de transición puede definirse parcialmente . Si la transición no está definida, la máquina se detiene.
El siguiente ejemplo es un DFA binario que requiere que la entrada contenga un número par de ceros.
dónde
0 | una | |
S1 _ | S2 _ | S1 _ |
S2 _ | S1 _ | S2 _ |
El estado final corresponde a un número par de ceros en la cadena de entrada, mientras que habla de un número impar. 1 en el flujo de entrada no cambia el estado del autómata. Cuando finaliza la cadena de entrada, el estado final indicará si la cadena de entrada contenía un número par de ceros o no. Si la cadena de entrada contiene un número par de ceros, terminará en el estado final , por lo que se aceptará la cadena de entrada.
El idioma que se reconoce es un idioma regular definido por una expresión regular , donde es una estrella Kleene , por ejemplo, que significa cualquier número (posiblemente cero) de 1 consecutivos. ((1*) 0 (1*) 0 (1*))**1*
Si la DFA reconoce los idiomas que se obtienen al aplicar una operación a los idiomas reconocidos por la DFA, se dice que la DFA está cerrada bajo la operación. Los DFA se cierran en las siguientes operaciones.
Para cada operación, la construcción óptima, teniendo en cuenta el número de estados, se determina en el estudio de la complejidad posicional .
Debido a que los DFA son equivalentes a autómatas finitos no deterministas (NFA ) , estos cierres se pueden probar utilizando las propiedades de cierre de NFA.
La operación de un DFA dado puede verse como una secuencia de superposiciones de una formulación muy general de funciones de transición sobre sí mismo. Construiremos tal función aquí.
Para un símbolo de entrada dado , puede construir una función de transición definiendo para todos . (Esta técnica se llama curry ). En esta perspectiva , "actúa" sobre el estado Q para producir otro estado. Se puede considerar el resultado de una superposición de funciones , aplicadas sucesivamente a diferentes funciones , etc. Dado un par de letras , se puede definir una nueva función , donde denota una superposición de funciones.
Está claro que este proceso puede continuarse recursivamente, dando la siguiente definición recursiva :
, donde está la cadena vacía, y , donde y .La función está definida para todas las palabras . El trabajo del DFA es una secuencia de superposiciones sobre sí mismo.
La repetición de superposiciones de funciones forma un monoide . Para las funciones de transición, este monoide se conoce como monoide de transición o, a veces, como semigrupo de transformación . La construcción se puede invertir: si se da , se puede reconstruir , por lo que las dos descripciones son equivalentes.
Un autómata local es un DFA en el que todos los arcos con la misma etiqueta conducen al mismo vértice. Los autómatas locales aceptan la clase de lenguajes formales , para los cuales la pertenencia de una palabra a un lenguaje está determinada por una "ventana deslizante" de longitud dos sobre la palabra [5] [6]
El gráfico de Myhill sobre el alfabeto A es un gráfico dirigido con el conjunto de vértices A y un subconjunto de vértices etiquetados como "inicial" y "terminal". El lenguaje aceptado por el gráfico de Myhill es el conjunto de caminos dirigidos desde el vértice inicial hasta el vértice final; el gráfico funciona entonces como un autómata [5] . La clase de idiomas que perciben los gráficos de Myhill es la clase de idiomas locales [7] .
Cuando se ignoran el estado inicial y los estados finales, un DFA con estados y un alfabeto de tamaño se puede considerar como un dígrafo de vértice en el que todos los vértices tienen arcos salientes etiquetados (dígrafo de resultado ). Se sabe que cuando es un número entero fijo, con alta probabilidad el mayor componente fuertemente conexo ( SCC), en el que el dígrafo con resultados se elige uniformemente al azar, tiene un tamaño lineal y se puede alcanzar desde cualquier vértice [8] . También se demostró que a medida que , aumenta a medida que , todo el dígrafo tiene una transición de fase a una conexión fuerte, similar al modelo Erdős-Rényi para conectividad [9] .
En un DFA aleatorio, el número máximo de vértices alcanzables desde un vértice con alta probabilidad es muy cercano al número de vértices en el componente fuertemente conectado más grande [8] [10] . Esto también es cierto para el subgrafo generado más grande con un mínimo de grado uno, que se puede considerar como una versión dirigida del -kernel [9] .
DFA es uno de los modelos computacionales más prácticos, ya que existe un algoritmo en línea trivial tiempo lineal y memoria constante para simular DFA en el flujo de entrada. También hay algoritmos de búsqueda de reconocimiento de DFA eficientes:
Debido a que los DFA se pueden reducir a una forma canónica ( DFA mínimos ), también existen dos algoritmos eficientes para determinar
Los DFA son computacionalmente equivalentes a los autómatas finitos no deterministas (NFA, nondeterministic finite automata , NFA). Esto se debe a que, en primer lugar, cualquier DFA es también un NFA, por lo que un NFA puede hacer cualquier cosa que pueda hacer un DFA. Además, dada una NFA, al reducir una DFA a una NFA se puede construir una DFA que reconozca el mismo lenguaje que la NFA, aunque una DFA puede tener exponencialmente más estados que una NFA [11] [12] . Sin embargo, incluso si los NFA son computacionalmente equivalentes a los DFA, los problemas anteriores no se resuelven necesariamente de manera eficiente para los NFA. El problema de no universalidad para un NFA tiene una complejidad PSPACE , ya que hay pequeños NFA con las palabras de menor tamaño exponencial para rechazar. Un DFA es universal si y solo si todos los estados son finitos, pero esto no es cierto para un NFA. Los problemas de equivalencia, inclusión y minimización también tienen complejidad PSPACE , ya que requieren la formación del complemento de la NFA, lo que conduce a una explosión de tamaño exponencial [13] .
Por otro lado, las máquinas de estado están severamente limitadas en los lenguajes que reconocen. DFA no puede reconocer muchos lenguajes simples, incluido cualquier problema que requiera más que memoria constante para resolverse. Un ejemplo clásico de un lenguaje simple que ningún DFA puede reconocer son los corchetes o el lenguaje Dyck , es decir, un lenguaje que consta de corchetes debidamente espaciados, como en la palabra "(()())". Es intuitivamente claro que ningún DFA puede reconocer el lenguaje de Dyck, ya que los DFA no pueden hacer cálculos: los autómatas como los DFA necesitan un estado que represente cualquier número posible de paréntesis "abiertos", lo que significa que deben tener un número ilimitado de estados. Otro ejemplo simple es un lenguaje que consta de cadenas de la forma de un número finito pero arbitrariamente grande de letras a seguidas por un número igual de letras b [14] .
Lenguajes formales y gramáticas formales | |
---|---|
Conceptos generales | |
tipo 0 | |
Tipo 1 |
|
Tipo 2 | |
tipo 3 |
|
analizando |