Un autómata es un modelo abstracto de una computadora digital. Las computadoras digitales son completamente deterministas; su estado en cualquier momento es únicamente predecible a partir de la entrada y el estado inicial.
Cuando intentamos modelar sistemas reales, ¿por qué incluir el no determinismo en la teoría de Autómatas?
Respuestas:
Sí, tienes razón, las computadoras son automáticas deterministas. Los modelos no deterministas son más útiles para fines teóricos, a veces la solución determinista no es tan obvia para la definición (o decir enunciado del problema) y es tan difícil encontrar una solución. Entonces, un enfoque es que primero diseñe un modelo no determinista que pueda ser comparativamente fácil de diseñar y luego intente convertirlo en uno determinista. A continuación, he tratado de demostrar lo que quiero decir con un ejemplo. Considere la expresión regular:
Ahora suponga, si se le pide que dibuje DFA para el lenguaje generado por el RE anterior.
Con mis conocimientos de diseño de AF, sé que (1) cuando un
*
presente en expresiones regulares indica que necesito bucle correspondiente en la FA (2) operaciones concatenar al igual quea.b
significa algo así como: .(q0)─a→(q1)─b→(q2)
Entonces, en mi primer intento, dibujaría un NFA como:
Pensé que esta no es una solución determinista, pero parece una FA muy simple que se puede diseñar fácilmente usando la expresión regular dada. Mi tipo de analogía para mostrar similitud entre la expresión regular anterior y mi NFA es la siguiente:
(01)*
01
(después(01)*
) da(q0)─0→(q1)─1→(q2)
(0 + 1)*
da un bucle automático en el estado q 2 para la etiqueta 0, 1De acuerdo con mi analogía, creo que el FA que dibujé anteriormente es relativamente simple de extraer de un RE dado. Y afortunadamente, en la clase de autómatas finitos, cada modelo no determinista se puede convertir en uno determinista equivalente. Tenemos un método algorítmico para convertir un NFA en DFA . Entonces puedo convertir fácilmente el NFA anterior en un DFA:
Desafortunadamente, otra parte es que esto no siempre es posible convertir un modelo no determinista en uno determinista, por ejemplo, la clase de automatismo de empuje determinista es un subconjunto de la clase de automatismo de empuje determinista "verifique el diagrama de Venn " y no siempre puede convertir un NPDA en un PDA.
Por lo general, cuando no es posible convertir una solución no determinista en una solución determinista, con la ayuda de una solución no determinista definimos la solución determinista en el subdominio (o digamos dominio parcial) en lugar del dominio completo. O definimos la solución de alguna otra manera (por ejemplo, un enfoque codicioso) que, por supuesto, puede no brindarle una solución óptima .
A veces, el no determinismo es un mecanismo efectivo para describir un problema / solución complicado de manera precisa y efectiva, por ejemplo, las máquinas no deterministas pueden servir como modelo de algoritmo de búsqueda y retroceso (léase: Cómo procesar cadenas en un modelo no determinista usando retroceso ) Los modelos deterministas opuestos representan mejor soluciones eficientes, minimizadas y menos redundantes.
Aquí también me gustaría citar de Wikipedia Uso del algoritmo no determinista :
Como @keshlam también mencionó en su comentario : "El no determinismo" se usa en la práctica para referirse a cualquier imprevisibilidad en el resultado de algún proceso. Por ejemplo, los programas concurrentes exhiben un comportamiento no determinista: dos ejecuciones del mismo programa con la misma entrada pueden producir resultados diferentes (si no se aplica el mecanismo de control de concurrencia ). Lea más sobre esto en "Utilidad del no determinismo" .
También le sugiero que lea los siguientes enlaces:
1. ¿Cuál es la diferencia entre el no determinismo y la aleatoriedad?
2. 9.2.2 Modelos no deterministas versus modelos probabilísticos: (a). No determinista: No tengo idea de lo que hará la naturaleza. (si). Probabilista: He estado observando la naturaleza y recopilando estadísticas.
3. Programación no determinista
fuente
Es más al revés: los autómatas surgieron primero, como modelos matemáticos. Y el no determinismo es bastante natural, a menudo tienes varios caminos abiertos ante ti. En lugar de una forma desordenada de especificar que todos los caminos deben seguirse hasta el final en algún orden, y tal vez quedar empantanados por ramas infinitas, y ... simplemente use el no determinismo.
Y aunque los lenguajes de programación no deterministas no son convencionales, tienen una historia ilustre, quizás comenzando con el GCL de Dijkstra . A medida que las máquinas obtienen más y más núcleos (procesadores independientes), alguna forma de no determinismo se está filtrando en toda la programación.
fuente
Los NFA se pueden usar en la práctica, consulte esta respuesta en stackexchange. La razón es que la construcción del conjunto de potencia se puede simular sobre la marcha, por así decirlo. Para simular un NFA en una computadora determinista, solo hacemos un seguimiento de los posibles estados en los que podría estar el NFA. Normalmente, este número sería pequeño, por lo que la simulación sería rápida. Esto es mucho más práctico que ejecutar la construcción real del conjunto de potencia: el autómata resultante podría ser muy grande, aunque en la práctica rara vez se alcanzaría la mayoría de los conjuntos.
El no determinismo también es importante para la complejidad del cálculo, donde se usa para definir la clase NP. (La clase NP también tiene otras definiciones equivalentes, por ejemplo, usando testigos).
fuente
Usted afirma correctamente que los autómatas son modelos, por lo que hay dos partes de uso que puede tener el no determinismo:
Uso en modelado de problemas reales.
Además, los autómatas no deterministas pueden proporcionar representaciones más compactas de idiomas. Por ejemplo, es bien sabido que hay NFA cuyos DFA mínimos equivalentes son exponencialmente más grandes.
Uso en teoría.
El uso del no determinismo puede simplificar las pruebas; consulte, por ejemplo, la conversión de expresiones regulares en autómatas finitos.
fuente
(Esta es una nueva redacción de algunas de las otras respuestas, pero la publicaré de todos modos :)
Usted escribe: Un autómata es un modelo abstracto de una computadora digital.
¡Estoy en desacuerdo! Los autómatas modelan cómo los humanos especificamos el cálculo, no solo cómo lo ejecutan las computadoras. El no determinismo es exactamente la diferencia. Nuestras especificaciones son a menudo no deterministas.
Por ejemplo, tome el tipo de fusión . La ordenación por fusión se ordena dividiendo los elementos que se ordenarán en dos mitades de aproximadamente el mismo tamaño, ordenando cada mitad utilizando la ordenación por fusión y fusionando los resultados ordenados. Esto especifica por completo la idea de la fusión, pero no es determinista: no especifica un orden en el que ordenar las mitades (por lo que a nosotros nos importa, se puede hacer al mismo tiempo), ni especifica una forma exacta de determinar la división Es necesario completar esos detalles para llegar a una versión determinista y secuencial de tipo de fusión que pueda ser implementada por un programa de computadora de un solo subproceso, pero diría que son parte de una forma particular de hacer un tipo de fusión, no La idea de fusión se clasifica a sí misma.
Lo mismo es cierto para los algoritmos en general, por ejemplo, recetas de libros de cocina. Algunas personas definen los algoritmos como deterministas, en cuyo caso esta noción más general y, en mi opinión, más natural de 'algoritmo' necesita un nombre diferente.
La idea de trabajar con especificaciones no deterministas se formalizó mediante el método de programación de Dijkstra, que comienza con especificaciones que solo dan condiciones previas y posteriores que debe cumplir el programa, y desarrolla sistemáticamente un programa determinista e imperativo a partir de ellas. Dijkstra probablemente habría dicho: la clasificación es el problema, la relación entre las condiciones previas y posteriores que estamos tratando de establecer; tipo de fusiónes un enfoque para hacerlo, a medio camino entre la especificación del problema y una solución determinista; Un algoritmo de clasificación de fusión determinista particular es una solución determinista concreta. Pero se puede usar el mismo enfoque general para desarrollar programas concurrentes, en los que el programa final todavía no es determinista. Dichos programas pueden ejecutarse, por ejemplo, en entornos informáticos distribuidos.
fuente
Tienes razón, NO podemos construir una máquina no determinista. Por lo tanto, el objetivo no es utilizar el concepto para construir mejores máquinas. Más bien, el no determinismo es un concepto útil cuando se trata de entender la computación. Por ejemplo, ahora sabemos que, desde una perspectiva de computabilidad, el no determinismo no es algo más poderoso que el determinismo, lo que significa que podemos simular una máquina no determinista utilizando una determinista. Sin embargo, desde la perspectiva de la complejidad, el no determinismo nos permite, por ejemplo, razonar e intentar comprender la relación entre la dificultad de encontrar una solución eficiente para un problema y la dificultad de verificar una solución (que es el famoso problema P versus NP) . Y así. Por lo tanto, la razón principal para estudiar el no determinismo es teórica.
fuente
La invención de la máquina de Turing fue en 1936 por Turing. McCulloch y Pitts , dos neurofisiólogos, introdujeron modelos similares a FSM como modelo para la actividad neurobiológica en 1943. desde la página de historia de Stanford CS :
no es historiador de CS, pero sospecha que el modelo McCulloch-Pitts no incluyó el no determinismo y el modelo Mealy - Moore sí, en una generalización / abstracción natural del concepto formal / teórico. tenga en cuenta que los DFA y los NFA tienen el mismo poder de representación, de modo que si uno desea modelar sistemas reales, puede elegir cualquiera de los dos. Una diferencia básica es que un NFA puede ser mucho más pequeño que un DFA equivalente (por ejemplo, existe un elemento natural de compresión de datos / información). También hay aspectos naturales / análogos del paralelismo en el estudio de la NFA.
fuente
En primer lugar, me gustaría agradecer a todas las personas que respondieron la pregunta. Todas las respuestas son importantes y agregan información útil. Pero como es una pregunta difícil para los principiantes, y necesito suficiente tiempo para entenderla bien, yo intentaría resumir lo que he obtenido de todas las respuestas y de algunos libros:
En realidad, tenía una confusión sobre el mecanismo del modelo no determinista. Siempre me pregunté acerca de la máquina no determinista, ya que es una máquina no mecánica que no existe en el mundo real. Siempre comparé Automata con nuestras computadoras de hoy en día, que es de naturaleza completamente determinista. En realidad, no estaba entendiendo adecuadamente el modelo no determinista. Ahora creo que entiendo bastante bien el modelo no determinista: una máquina no determinista es una máquina que siempre sigue ese camino de ejecución que conduce a la aceptación de la cadena (Sin retroceso). Pero, ¿cómo puede ser esto posible en la vida real? : Es absolutamente imposible que la computadora actual sea tan inteligente para predecir el futuro. Entonces, ¿por qué el no determinismo? La respuesta a esta pregunta es bastante complicada. Lo que concluí sobre la pregunta es que: La teoría de autómatas existía cuando las computadoras no existían (primera teoría y luego práctica). Es un tema puramente teórico y el concepto de no determinismo surgió de forma intuitiva. El motivo de la asignatura "Teoría de los autómatas" no era tratar con computadoras prácticas. Pero cuando prácticamente la computadora viene usando la Teoría de Autómatas, podemos definir computadoras prácticas con precisión: cuáles son las limitaciones de las computadoras actuales. Los problemas algorítmicos son muy complejos para las computadoras y tan poco prácticos. puede distinguir dos clases de complejidad P y NP). ¿Cuáles son las soluciones para estos problemas poco prácticos por los cuales puede ejecutarse comparativamente más rápido? Esta es la utilidad del no determinismo. Es un tema puramente teórico y el concepto de no determinismo surgió de forma intuitiva. El motivo de la asignatura "Teoría de los autómatas" no era tratar con computadoras prácticas. Pero cuando prácticamente la computadora viene usando la Teoría de Autómatas, podemos definir computadoras prácticas con precisión: cuáles son las limitaciones de las computadoras actuales. Los problemas algorítmicos son muy complejos para las computadoras y tan poco prácticos. puede distinguir dos clases de complejidad P y NP). ¿Cuáles son las soluciones para estos problemas poco prácticos por los cuales puede ejecutarse comparativamente más rápido? Esta es la utilidad del no determinismo. Es un tema puramente teórico y el concepto de no determinismo surgió de forma intuitiva. El motivo de la asignatura "Teoría de los autómatas" no era tratar con computadoras prácticas. Pero cuando prácticamente la computadora viene usando la Teoría de Autómatas, podemos definir computadoras prácticas con precisión: cuáles son las limitaciones de las computadoras actuales. Los problemas algorítmicos son muy complejos para las computadoras y tan poco prácticos. puede distinguir dos clases de complejidad P y NP). ¿Cuáles son las soluciones para estos problemas poco prácticos por los cuales puede ejecutarse comparativamente más rápido? Esta es la utilidad del no determinismo. Pero cuando prácticamente la computadora viene usando la Teoría de Autómatas, podemos definir computadoras prácticas con precisión: cuáles son las limitaciones de las computadoras actuales. Los problemas algorítmicos son muy complejos para las computadoras y tan poco prácticos. puede distinguir dos clases de complejidad P y NP). ¿Cuáles son las soluciones para estos problemas poco prácticos por los cuales puede ejecutarse comparativamente más rápido? Esta es la utilidad del no determinismo. Pero cuando prácticamente la computadora viene usando la Teoría de Autómatas, podemos definir computadoras prácticas con precisión: cuáles son las limitaciones de las computadoras actuales. Los problemas algorítmicos son muy complejos para las computadoras y tan poco prácticos. puede distinguir dos clases de complejidad P y NP). ¿Cuáles son las soluciones para estos problemas poco prácticos por los cuales puede ejecutarse comparativamente más rápido? Esta es la utilidad del no determinismo. ¿Cuáles son las soluciones para estos problemas poco prácticos por los cuales se puede ejecutar comparativamente más rápido? Esta es la utilidad del no determinismo. ¿Cuáles son las soluciones para estos problemas poco prácticos por los cuales se puede ejecutar comparativamente más rápido? Esta es la utilidad del no determinismo.
Por favor corrígeme si hay algo mal.
fuente
el no determinismo es útil porque te ayuda a entender el determinismo, pero no al revés. Se podría decir que el no determinismo es la idea más grande. Una máquina de Turing determinista es un caso especial de una no determinista. - El no determinismo nos puede ayudar a entender por qué, en las plataformas actuales, algunos problemas son difíciles de precisar. Hay una serie de problemas computacionales que no tienen una solución eficiente en una plataforma de computación determinista, pero entendemos que puede haber soluciones eficientes en las no deterministas. ... estado, codificación, no determinismo, todos están vinculados http://people.cs.umass.edu/~rsnbrg/teach-eatcs.pdf
En una máquina determinista de Turing, el conjunto de reglas prescribe como máximo una acción a realizar para cualquier situación dada. Una máquina de Turing no determinista (NTM), por el contrario, puede tener un conjunto de reglas que prescribe más de una acción para una situación dada. http://en.wikipedia.org/wiki/Non-deterministic_Turing_machine Si puede construir una caja de software que pueda administrar las transiciones de estado tan bien que pueda manejar más de una acción, puede obtener un rendimiento más allá de las máquinas deterministas.
fuente
El determinismo tiene una fuerte tendencia a romper las simetrías. Esta tendencia es aún más fuerte para el determinismo secuencial, pero la noción de un gráfico dirigido acíclico y un orden topológico de dicho gráfico permite ignorar la diferencia entre determinismo y determinismo secuencial. El no determinismo es un superconjunto del determinismo, que permite preservar más simetrías. Al diseñar la solución de un problema, comenzar con la solución no determinista permite preservar simetrías útiles, y esto mantiene la descripción de la solución pequeña y compacta. La ruptura de las simetrías se puede delegar a una etapa posterior durante la implementación, mientras se convierte la solución no determinista en una solución determinista.
A menudo, el no determinismo significa que la noción de una función parcial se reemplaza por la noción de una relación. En ese caso, una máquina no determinista puede funcionar tanto hacia adelante como hacia atrás en el tiempo, mientras que esto no es posible en general para una máquina determinista. Si en su lugar trabajamos con funciones totales para determinismo y funciones totales multivalores para no determinismo, la simetría ya no es tan agradable, pero aún puede hacerse funcionar.
fuente