En la teoría de la computación , una rama de la informática teórica , un autómata finito determinista ( DFA ), también conocido como aceptor finito determinista ( DFA ), máquina de estados finitos determinista ( DFSM ) o autómata de estados finitos determinista ( DFSA ), es una máquina de estados finitos que acepta o rechaza una cadena dada de símbolos, al ejecutarse a través de una secuencia de estados determinada de forma única por la cadena. [1] Determinista se refiere a la unicidad de la ejecución del cálculo. En la búsqueda de los modelos más simples para capturar máquinas de estados finitos, Warren McCulloch y Walter Pitts estuvieron entre los primeros investigadores en introducir un concepto similar al de autómata finito en 1943. [2] [3]
La figura ilustra un autómata finito determinista que utiliza un diagrama de estados . En este autómata de ejemplo, hay tres estados: S 0 , S 1 y S 2 (indicados gráficamente por círculos). El autómata toma una secuencia finita de 0 y 1 como entrada. Para cada estado, hay una flecha de transición que conduce al siguiente estado tanto para 0 como para 1. Al leer un símbolo, un DFA salta de manera determinista de un estado a otro siguiendo la flecha de transición. Por ejemplo, si el autómata está actualmente en el estado S 0 y el símbolo de entrada actual es 1, entonces salta de manera determinista al estado S 1 . Un DFA tiene un estado de inicio (indicado gráficamente por una flecha que aparece de la nada) donde comienzan los cálculos, y un conjunto de estados de aceptación (indicados gráficamente por un círculo doble) que ayudan a definir cuándo un cálculo es exitoso.
Un DFA se define como un concepto matemático abstracto, pero a menudo se implementa en hardware y software para resolver diversos problemas específicos, como el análisis léxico y la comparación de patrones . Por ejemplo, un DFA puede modelar software que decide si las entradas de los usuarios en línea, como las direcciones de correo electrónico, son sintácticamente válidas o no. [4]
Los DFA se han generalizado a autómatas finitos no deterministas (NFA) que pueden tener varias flechas de la misma etiqueta comenzando desde un estado. Utilizando el método de construcción de conjuntos de potencias , cada NFA se puede traducir a un DFA que reconoce el mismo lenguaje. Los DFA, y también los NFA, reconocen exactamente el conjunto de lenguajes regulares . [1]
Un autómata finito determinista M es una 5- tupla , ( Q , Σ, δ , q 0 , F ) , que consta de
Sea w = a 1 a 2 ... a n una cadena sobre el alfabeto Σ . El autómata M acepta la cadena w si en Q existe una secuencia de estados, r 0 , r 1 , ..., r n , con las siguientes condiciones:
En palabras, la primera condición dice que la máquina arranca en el estado inicial q 0 . La segunda condición dice que dado cada carácter de la cadena w , la máquina pasará de un estado a otro según la función de transición δ . La última condición dice que la máquina acepta w si la última entrada de w hace que la máquina se detenga en uno de los estados de aceptación. En caso contrario, se dice que el autómata rechaza la cadena. El conjunto de cadenas que M acepta es el lenguaje reconocido por M y este lenguaje se denota por L ( M ) .
Un autómata finito determinista sin estados de aceptación y sin un estado inicial se conoce como sistema de transición o semiautómata .
Para una introducción más completa de la definición formal, consulte la teoría de autómatas .
El siguiente ejemplo es de un DFA M , con un alfabeto binario, que requiere que la entrada contenga un número par de 0.
M = ( Q , Σ, δ , q 0 , F ) donde
El estado S 1 representa que hasta ahora ha habido un número par de 0 en la entrada, mientras que S 2 significa un número impar. Un 1 en la entrada no cambia el estado del autómata. Cuando la entrada finaliza, el estado mostrará si la entrada contenía un número par de 0 o no. Si la entrada contenía un número par de 0, M finalizará en el estado S 1 , un estado de aceptación, por lo que se aceptará la cadena de entrada.
El lenguaje reconocido por M es el lenguaje regular dado por la expresión regular (1*) (0 (1*) 0 (1*))*
, donde *
es la estrella de Kleene , por ejemplo, 1*
denota cualquier número (posiblemente cero) de unos consecutivos.
Según la definición anterior, los autómatas finitos deterministas son siempre completos : definen a partir de cada estado una transición para cada símbolo de entrada.
Si bien esta es la definición más común, algunos autores usan el término autómata finito determinista para una noción ligeramente diferente: un autómata que define como máximo una transición para cada estado y cada símbolo de entrada; se permite que la función de transición sea parcial . [5] Cuando no se define ninguna transición, dicho autómata se detiene.
Un autómata local es un DFA, no necesariamente completo, para el cual todas las aristas con la misma etiqueta conducen a un único vértice. Los autómatas locales aceptan la clase de lenguajes locales , aquellos para los cuales la pertenencia de una palabra al lenguaje está determinada por una "ventana deslizante" de longitud dos en la palabra. [6] [7]
Un grafo Myhill sobre un alfabeto A es un grafo dirigido con un conjunto de vértices A y subconjuntos de vértices etiquetados como "inicio" y "fin". El lenguaje aceptado por un grafo Myhill es el conjunto de caminos dirigidos desde un vértice de inicio a un vértice de fin: el grafo actúa así como un autómata. [6] La clase de lenguajes aceptados por los grafos Myhill es la clase de lenguajes locales. [8]
Cuando se ignoran el estado inicial y los estados de aceptación, un DFA de n estados y un alfabeto de tamaño k se puede ver como un dígrafo de n vértices en el que todos los vértices tienen k arcos de salida etiquetados 1, ..., k (un dígrafo k -out). Se sabe que cuando k ≥ 2 es un entero fijo, con alta probabilidad, el componente fuertemente conectado (SCC) más grande en un dígrafo k -out elegido uniformemente al azar es de tamaño lineal y puede ser alcanzado por todos los vértices. [9] También se ha demostrado que si se permite que k aumente a medida que n aumenta, entonces todo el dígrafo tiene una transición de fase para una conectividad fuerte similar al modelo de Erdős–Rényi para la conectividad. [10]
En un DFA aleatorio, la cantidad máxima de vértices alcanzables desde un vértice es muy cercana a la cantidad de vértices en el SCC más grande con alta probabilidad. [9] [11] Esto también es cierto para el subdígrafo inducido más grande de grado de entrada mínimo uno, que puede verse como una versión dirigida de 1 -core . [10]
Si los DFA reconocen los idiomas que se obtienen al aplicar una operación sobre los idiomas reconocibles del DFA, se dice que los DFA están cerrados bajo la operación. Los DFA están cerrados bajo las siguientes operaciones.
Para cada operación, se ha determinado una construcción óptima con respecto al número de estados en la investigación de la complejidad de estados . Dado que los DFA son equivalentes a los autómatas finitos no deterministas (NFA), estos cierres también pueden demostrarse utilizando propiedades de cierre de NFA.
Una ejecución de un DFA dado puede verse como una secuencia de composiciones de una formulación muy general de la función de transición consigo misma. Aquí construimos esa función.
Para un símbolo de entrada dado , se puede construir una función de transición definiendo para todos . (Este truco se llama currying .) Desde esta perspectiva, "actúa" sobre un estado en Q para producir otro estado. Se puede entonces considerar el resultado de la composición de funciones aplicada repetidamente a las diversas funciones , , y así sucesivamente. Dado un par de letras , se puede definir una nueva función , donde denota composición de funciones.
Claramente, este proceso puede continuar de forma recursiva, obteniéndose la siguiente definición recursiva de :
se define para todas las palabras . Una ejecución del DFA es una secuencia de composiciones de con sí misma.
La composición de funciones repetidas forma un monoide . Para las funciones de transición, este monoide se conoce como monoide de transición o, a veces, semigrupo de transformación . La construcción también se puede invertir: dado un , se puede reconstruir un , por lo que las dos descripciones son equivalentes.
Los DFA son uno de los modelos de computación más prácticos, ya que existe un algoritmo trivial lineal en tiempo y espacio constante en línea para simular un DFA en un flujo de entrada. Además, existen algoritmos eficientes para encontrar un DFA que reconoce:
Dado que los DFA se pueden reducir a una forma canónica ( DFA mínimos ), también existen algoritmos eficientes para determinar:
Los DFA son equivalentes en potencia de cálculo a los autómatas finitos no deterministas (NFA). Esto se debe, en primer lugar, a que cualquier DFA también es un NFA, por lo que un NFA puede hacer lo que un DFA puede hacer. Además, dado un NFA, utilizando la construcción de conjuntos de potencias se puede construir un DFA que reconozca el mismo lenguaje que el NFA, aunque el DFA podría tener un número exponencialmente mayor de estados que el NFA. [15] [16] Sin embargo, aunque los NFA son computacionalmente equivalentes a los DFA, los problemas mencionados anteriormente no se resuelven necesariamente de manera eficiente también para los NFA. El problema de no universalidad para los NFA es PSPACE completo ya que hay NFA pequeños con la palabra de rechazo más corta en tamaño exponencial. Un DFA es universal si y solo si todos los estados son estados finales, pero esto no se cumple para los NFA. Los problemas de igualdad, inclusión y minimización también son PSPACE completos ya que requieren formar el complemento de un NFA que da como resultado una explosión exponencial de tamaño. [17]
Por otra parte, los autómatas de estados finitos tienen un poder estrictamente limitado en los lenguajes que pueden reconocer; muchos lenguajes simples, incluyendo cualquier problema que requiera más que un espacio constante para resolverse, no pueden ser reconocidos por un DFA. El ejemplo clásico de un lenguaje descrito de manera simple que ningún DFA puede reconocer es el lenguaje de corchetes o Dyck , es decir, el lenguaje que consiste en corchetes correctamente emparejados como la palabra "(()())". Intuitivamente, ningún DFA puede reconocer el lenguaje Dyck porque los DFA no son capaces de contar: un autómata tipo DFA necesita tener un estado para representar cualquier número posible de paréntesis "actualmente abiertos", lo que significa que necesitaría un número ilimitado de estados. Otro ejemplo más simple es el lenguaje que consiste en cadenas de la forma a n b n para un número finito pero arbitrario de a ' s, seguido de un número igual de b ' s. [18]
Dado un conjunto de palabras positivas y un conjunto de palabras negativas , se puede construir un DFA que acepte todas las palabras de y rechace todas las palabras de : este problema se llama identificación de DFA (síntesis, aprendizaje). Si bien algunos DFA se pueden construir en tiempo lineal, el problema de identificar un DFA con el número mínimo de estados es NP-completo. [19] El primer algoritmo para la identificación mínima de DFA ha sido propuesto por Trakhtenbrot y Barzdin [20] y se llama algoritmo TB . Sin embargo, el algoritmo TB supone que todas las palabras de hasta una longitud dada están contenidas en .
Más tarde, K. Lang propuso una extensión del algoritmo TB que no utiliza ninguna suposición sobre y , el algoritmo Traxbar . [21] Sin embargo, Traxbar no garantiza la minimalidad del DFA construido. En su trabajo [19] EM Gold también propuso un algoritmo heurístico para la identificación mínima de DFA. El algoritmo de Gold supone que y contienen un conjunto característico del lenguaje regular; de lo contrario, el DFA construido será inconsistente con o . Otros algoritmos de identificación de DFA notables incluyen el algoritmo RPNI, [22] el algoritmo de fusión de estados impulsado por evidencia Blue-Fringe, [23] y Windowed-EDSM. [24] Otra dirección de investigación es la aplicación de algoritmos evolutivos : el algoritmo evolutivo de etiquetado de estado inteligente [25] permitió resolver un problema de identificación de DFA modificado en el que los datos de entrenamiento (conjuntos y ) son ruidosos en el sentido de que algunas palabras se atribuyen a clases incorrectas.
Otro paso adelante se debe a la aplicación de los solucionadores SAT por Marjin JH Heule y S. Verwer: el problema de identificación de DFA mínimo se reduce a decidir la satisfacibilidad de una fórmula booleana. [26] La idea principal es construir un aceptador de árbol de prefijos aumentado (un trie que contiene todas las palabras de entrada con las etiquetas correspondientes) basado en los conjuntos de entrada y reducir el problema de encontrar un DFA con estados a colorear los vértices del árbol con estados de tal manera que cuando los vértices con un color se fusionan en un estado, el autómata generado es determinista y cumple con y . Aunque este enfoque permite encontrar el DFA mínimo, sufre de una explosión exponencial del tiempo de ejecución cuando aumenta el tamaño de los datos de entrada. Por lo tanto, el algoritmo inicial de Heule y Verwer se ha ampliado posteriormente con la realización de varios pasos del algoritmo EDSM antes de la ejecución del solucionador SAT: el algoritmo DFASAT. [27] Esto permite reducir el espacio de búsqueda del problema, pero conduce a la pérdida de la garantía de minimidad. Ulyantsev et al. [28] propusieron otra forma de reducir el espacio de búsqueda mediante nuevos predicados de ruptura de simetría basados en el algoritmo de búsqueda en amplitud : los estados del DFA buscado se restringen para que se numeren de acuerdo con el algoritmo BFS lanzado desde el estado inicial. Este enfoque reduce el espacio de búsqueda eliminando los autómatas isomorfos.
Las máquinas de Turing de solo lectura con movimiento hacia la derecha son un tipo particular de máquina de Turing que solo se mueve hacia la derecha; son casi exactamente equivalentes a los DFA. [29] La definición basada en una cinta infinita simple es una tupla de 7
dónde
La máquina siempre acepta un lenguaje regular. Debe existir al menos un elemento del conjunto F (un estado HALT ) para que el lenguaje no esté vacío.