¿Podemos decir que DFA es más eficiente que NFA?

13

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.

avi
fuente

Respuestas:

16

Hay dos respuestas, dependiendo de cómo defina eficiente.

Compacidad de representación

Decir más con menos : los NFA son más eficientes.

La conversión de un DFA a un NFA es sencillo y no aumenta el tamaño de la representación.

Sin embargo, hay lenguajes regulares para los cuales el DFA más pequeño es exponencialmente más grande que el NFA más pequeño. Un ejemplo típico es para fijo.(a|b)b(a|b)kk

Cálculo

Ejecución rápida : los DFA son más eficientes.

Las computadoras que usamos hoy son de naturaleza determinista. Eso los hace malos para lidiar con el no determinismo. Hay dos formas comunes de tratar de manera determinista con los NFA: retroceder en un lado, que es bastante costoso, o realizar un seguimiento de los estados activos, lo que significa que cada transición llevará hasta veces más (donde es el tamaño del NFA) .NNN

Khaur
fuente
En cuanto a la compacidad, los NFA no siempre son más eficientes. Es cierto que hay idiomas para los cuales el DFA mínimo es exponencialmente mayor que el NFA más compacto, pero ¿cuál es la fracción de dichos idiomas en el conjunto de todos los idiomas?
saadtaame 01 de
2
@saadtaame Puede parecer extraño, pero en el sentido más estricto, los NFA no tienen que ser no deterministas. Los DFA son un tipo especial de NFA, es decir, NFA con un singleton como conjunto inicial y la función de transición es tal que solo un estado está activo en un momento dado.
Khaur 01 de
2
-1 "aumentando su tamaño (potencialmente mucho)". Simulando conjuntos de estados de NFA manteniendo un espacio de costos de lista enlazada como máximo en el número de estados de NFA. El DFA equivalente, por otro lado, podría tener estados O ( 2 N ) . O(N)O(2N)
Wandering Logic
@WanderingLogic Tienes razón, la conversión no tiene que ser explícita (todavía estás usando el DFA equivalente, pero no en forma extensiva). Sin embargo, el punto principal sigue en pie, ya que esto requiere veces más tiempo de cálculo que ejecutar un DFA del mismo tamaño . Corregiré el último párrafo para dar cuenta de eso. O(N)
Khaur
Gracias por esta respuesta, porque he argumentado en mi investigación que los NFA son mejores para la evaluación y ahora veo que el punto es más sutil. En general, los NFA son definitivamente mejores para un lenguaje fijo, porque cualquier algoritmo de evaluación NFA inteligente coincidirá con la complejidad de la evaluación DFA en el caso especial de que el NFA sea un DFA, y porque el NFA puede ser más sucinto. Sin embargo, si la elección es entre producir un NFA altamente no determinista o encontrar una forma inteligente de obtener un DFA del mismo tamaño , para alguna aplicación en particular, DFA es mejor.
6005
4

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.n2n

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.

saadtaame
fuente
¿Pero podemos decir que DFA es más eficiente?
avi
1
@avi ¡Edité la pregunta! Y, por cierto, los NFA no existen solo en teoría: verifique esto: swtch.com/~rsc/regexp/regexp1.html
saadtaame
@avi El problema aquí es que el DFA que es equivalente al NFA (a menudo) será mucho mayor. Entonces, aunque puede verificar el DFA mucho más rápido, generalmente tendrá que verificar un DFA más grande.
Peter
@ Peter, que el DFA es más grande no importa: solo significa que la matriz que proporciona la función de transición es más grande.
vonbrand 01 de
1
@Khaur, cierto. Pero si te encuentras con ese tipo de problema, tienes un enorme DFA.
vonbrand 01 de
2

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.

Intitulado
fuente
1
Ni los DFA ni los NFA existen en realidad, ambos son solo relaciones matemáticas, y ambos pueden ser simulados por algoritmos.
jmite
1

ϵ

vonbrand
fuente
ϵ
1
ϵ
pero ¿no está DFA libre de transiciones ϵ?
avi
@avi, si. Siéntase libre de editar la respuesta si no está claro allí.
vonbrand
No, te estoy preguntando. No estoy seguro de eso tampoco
avi
1

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)".

ε

Rafael
fuente
1

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.

A.Schulz
fuente
-4

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

deepali kaushik
fuente
1
Los autómatas finitos no tienen nada que ver con las lavadoras.
David Richerby
2
@DavidRicherby. Quizás la frase "nada en absoluto" es un poco fuerte. Después de todo, podríamos decir que una lavadora tiene estados listos , lavar , enjuagar y centrifugar con transiciones apropiadas entre estados. Sin embargo, una mejor metáfora sería una máquina expendedora de refrescos que funciona con monedas.
Rick Decker
1
@RickDecker De acuerdo, pero pasar tiempo discutiendo la pequeña relevancia sería un ejemplo de lo que Wikipedia llama " peso indebido ". Y, en cualquier caso, la parte de la respuesta de la que estoy hablando es hablar sobre autómatas como máquinas autoalimentadas, no como dispositivos computacionales.
David Richerby
1
No creo que esta respuesta agregue nada valioso a la pregunta. En particular, no está claro acerca de su medida de eficiencia y parece mezclar varias preocupaciones.
Raphael
Las otras respuestas casi agotan todo lo que hay que decir y desafortunadamente su respuesta es un poco confusa.
Mal