Sim, você está correto, os computadores são determinísticos e automatizam. Modelos não determinísticos são mais úteis para fins teóricos, às vezes a solução determinística não é tão óbvia para a definição (ou seja, para a afirmação do problema) e tão pouco difícil de encontrar solução. Então, uma abordagem é que primeiro projete um modelo não determinístico que possa ser relativamente fácil de projetar e tente convertê-lo em um determinístico. Abaixo, tentei demonstrar o que quero dizer com um exemplo. Considere expressão regular:
(01)*01(0 + 1)*
Agora, suponha que, se você for solicitado a desenhar o DFA para o idioma gerado pelo RE acima.
Com o meu conhecimento de projetar FAs, eu sei que (1) quando um *
presente na expressão regular indicada eu preciso circuito correspondente na FA (2) operações concatenar como a.b
significa algo como: .(q0)─a→(q1)─b→(q2)
Então, na minha primeira tentativa, eu desenharia uma NFA como:
Achei que essa não é uma solução determinística, mas parece uma FA muito simples que pode ser facilmente projetada usando a expressão regular fornecida. Meu tipo de analogia para mostrar semelhança entre a expressão regular acima e meu NFA é como abaixo:
- O loop no estado q 0 deve ser para
(01)*
01
(depois (01)*
) dá(q0)─0→(q1)─1→(q2)
(0 + 1)*
dá um auto loop no estado q 2 para o rótulo 0, 1
De acordo com minha analogia, acho que a AF que desenhei acima é comparativamente simples de extrair de um dado ER. E, felizmente, na classe dos autômatos finitos, todo modelo não determinístico pode ser convertido em um modelo determinístico equivalente. Temos um método algorítmico para converter um NFA em DFA . Para que eu possa converter facilmente acima do NFA em um DFA:
Outra parte é que infelizmente nem sempre é possível converter um modelo não determinístico em determinístico, por exemplo, classe para automação push-down determinística é um subconjunto da classe de automação push-down determinística "check venn diagram " e você nem sempre pode converter um NPDA em um PDA.
Normalmente, quando não é possível converter uma solução não determinística em uma determinística, com a ajuda de uma solução não determinística, definimos a solução determinística no subdomínio (ou seja, domínio parcial) em vez do domínio completo. Ou então definimos a solução de outras maneiras (por exemplo, abordagem gananciosa) que, é claro, podem não fornecer uma solução ideal .
Às vezes, o não determinismo é um mecanismo eficaz para descrever com precisão e eficácia algum problema / solução complicada, por exemplo, máquinas não determinísticas podem servir como modelo de algoritmo de busca e retorno (leia-se: Como processo de cadeia de caracteres no modelo não determinístico usando retorno ) Modelos deterministicamente opostos representam melhor soluções eficientes, minimizadas e menos redundantes.
Aqui também gostaria de citar o uso da Wikipedia de algoritmo não determinístico :
No design de algoritmos, algoritmos não determinísticos são freqüentemente usados quando o problema resolvido pelo algoritmo permite inerentemente vários resultados (ou quando há um único resultado com vários caminhos pelos quais o resultado pode ser descoberto, cada um igualmente preferível). Fundamentalmente, todos os resultados que o algoritmo não determinístico produz são válidos, independentemente de quais escolhas o algoritmo faz durante a execução.
Um grande número de problemas pode ser conceituado através de algoritmos não determinísticos, incluindo a questão não resolvida mais famosa da teoria da computação, P vs NP.
Como @keshlam também mencionou em seu comentário : "Não determinismo" é na prática usado para se referir a qualquer imprevisibilidade no resultado de algum processo. Por exemplo, programas concorrentes exibem comportamento não determinístico - duas execuções do mesmo programa com a mesma entrada podem produzir resultados diferentes (se o mecanismo de controle de simultaneidade não for aplicado). Leia mais sobre isso em "Utilidade do não determinismo" .
Eu também sugiro que você leia os seguintes links:
1. Qual é a diferença entre não-determinismo e aleatoriedade?
2. 9.2.2 Modelos não determinísticos x probabilísticos: (a). Não determinístico: não tenho ideia do que a natureza fará. b) Probabilístico: tenho observado a natureza e colecionado estatísticas.
3. Programação não determinística