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:
(01)*01(0 + 1)*
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 que a.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:
- El bucle en el estado q 0 debe ser para
(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, 1
De 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 :
En el diseño de algoritmos, los algoritmos no deterministas a menudo se usan cuando el problema resuelto por el algoritmo permite inherentemente múltiples resultados (o cuando hay un único resultado con múltiples rutas por las cuales se puede descubrir el resultado, cada uno igualmente preferible). De manera crucial, cada resultado que produce el algoritmo no determinista es válido, independientemente de las elecciones que realice el algoritmo mientras se ejecuta.
Se puede conceptualizar una gran cantidad de problemas a través de algoritmos no deterministas, incluida la pregunta no resuelta más famosa en teoría de la computación, P vs NP.
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