Acabo de empezar a leer sobre teoría de la computación. Si comparamos cuál es más poderoso (al aceptar cadenas), ambos son iguales. ¿Pero qué hay de la eficiencia? DFA será rápido en comparación con NFA, ya que solo tiene una ventaja saliente y no habrá ambigüedad. Pero en el caso de NFA, tenemos que verificar todos los casos posibles y eso seguramente lleva tiempo. Entonces, ¿podemos decir que DFA es más eficiente que NFA?
Pero, mi otra parte del cerebro también está pensando que NFA existe solo en teoría, por lo que no podemos comparar su eficiencia con DFA.
En términos de potencia, son equivalentes como dijiste y hay un algoritmo (construcción de subconjunto) para convertir un NFA en un DFA equivalente. Como se puede ver por el nombre del algoritmo, construye subconjuntos de estados de la NFA. Si su NFA tiene estados, el algoritmo puede generar un DFA con 2 n estados, pero ese es un límite superior. A veces, el número de estados no cambia en absoluto o incluso se reduce. Entonces, en la práctica, importa menos cuál usar.n 2n
La coincidencia de DFA es lineal en el tamaño de la cadena de entrada. La coincidencia de NFA implica retroceder, por lo que los NFA hacen más trabajo. Por lo tanto, los DFA son más eficientes.
fuente
Solo agregando a las respuestas anteriores:
Los NFA pueden ser computacionalmente más eficientes que los DFA, en el sentido de que pueden simularse en un procesador paralelo.
Por cierto: veo personas que dicen que los NFA no pueden existir en realidad. Siento disentir. Una computadora con una gran cantidad de procesadores puede ejecutar muchas tareas en paralelo y puede considerarse como una máquina no determinista. Se podría asignar cada rama de cómputo a un nuevo procesador y detenerlos todos cuando uno de ellos acepte.
fuente
fuente
Como otros han señalado, debe definir qué significa "eficiencia". Para ilustrar esto, doy un modelo razonable con una respuesta diferente.
Si observamos únicamente los modelos de autómatas, que ignora en particular cómo los implementaría en máquinas reales, la medida de eficiencia obvia es el "número de transiciones tomadas en una ejecución de aceptación (la más corta)".
fuente
Técnicamente hablando, un NFA es un concepto más general que un DFA, ya que no es necesario usar el no determinismo. En otras palabras: cada DFA es un NFA. Desde esta perspectiva, para cada idioma hay un NFA que es al menos tan eficiente como el DFA más eficiente, para cualquier medida de eficiencia que prefiera.
Aparte de esto, estoy de acuerdo con Raphael en que depende mucho de lo que quieras decir con eficiencia y en la implementación.
fuente
Como sabemos sobre Automata, es decir, una máquina que puede realizar cualquier acción sin mano de obra o sin participación directa del hombre. Por ejemplo: lavadora. Autómatas finitos significa que conocemos el estado de realizar tareas por máquina como 1 presione ON 2 presione OFF por lo que solo hay 2 estados, es decir, llamados autómatas finitos. Ahora ven a DFA, es decir, autómatas finitos deterministas. significa formalmente que podemos determinar fácilmente estados donde no hay ambigüedad e informalmente solo se necesita 1 transición permitida en 1 símbolo. NFA: autómatas finitos no deterministas. se necesita más tiempo para calcular el estado real y hay ambigüedad yd informa informalmente que hay una transición múltiple permitida en 1 símbolo. en el caso del tiempo para llegar al destino, NFA lleva más tiempo que DFA, pero NFA puede cargar más datos que DFA. * DFA y NFA tienen el mismo poder para reconocer la cadena. gracias .. Deepali kaushik
fuente