Um autômato é um modelo abstrato de um computador digital. Computadores digitais são completamente determinísticos; seu estado a qualquer momento é previsível exclusivamente a partir da entrada e do estado inicial.
Quando estamos tentando modelar sistemas reais, por que incluir o não determinismo na teoria de Autômatos?
Respostas:
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:
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 comoa.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:
(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, 1De 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 :
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
fonte
É mais o contrário: os autômatos surgiram primeiro, como modelos matemáticos. E o não-determinismo é bastante natural; muitas vezes você tem vários caminhos abertos diante de você. Em vez de uma maneira confusa de especificar que todos os caminhos devem ser seguidos até o fim em alguma ordem, e talvez ficar atolados por galhos infinitos, e ... use apenas o não-determinismo.
E embora as linguagens de programação não determinísticas não sejam comuns, elas têm uma história ilustre, talvez começando com a GCL de Dijkstra . À medida que as máquinas somam mais e mais núcleos (processadores independentes), alguma forma de não-determinismo está se infiltrando em toda a programação.
fonte
Os NFAs podem ser usados na prática, confira esta resposta no stackexchange. O motivo é que a construção do conjunto de potências pode ser simulada on-the-fly, por assim dizer. Para simular um NFA em um computador determinístico, apenas acompanhamos os possíveis estados em que o NFA pode estar. Normalmente, esse número seria pequeno e, portanto, a simulação seria rápida. Isso é muito mais prático do que executar a construção real do conjunto de potências: o autômato resultante pode ser muito grande, embora na prática a maioria dos conjuntos raramente seja alcançada.
O não determinismo também é importante para a complexidade da computação, onde é usado para definir a classe NP. (A classe NP também possui outras definições equivalentes, por exemplo, usando testemunhas.)
fonte
Você declara corretamente que os autômatos são modelos, portanto, existem duas partes de uso que o não-determinismo pode ter:
Use na modelagem de problemas reais.
Além disso, autômatos não determinísticos podem fornecer representações mais compactas de linguagens. Por exemplo, é sabido que existem NFA cujo DFA equivalente mínimo é exponencialmente maior.
Use na teoria.
O uso do não-determinismo pode simplificar as provas, veja, por exemplo, a conversão de expressões regulares em autômatos finitos.
fonte
(Esta é uma reformulação de algumas das outras respostas, mas eu a postarei de qualquer maneira :)
Você escreve: Um autômato é um modelo abstrato de um computador digital.
Discordo! Os autômatos modelam como nós humanos especificamos a computação, não apenas como os computadores a executam. Não-determinismo é exatamente a diferença. Nossas especificações geralmente não são determinísticas.
Por exemplo, faça a classificação de mesclagem . A classificação de mesclagem é classificada dividindo os itens a serem classificados em duas metades de tamanho aproximadamente igual, classificando cada metade usando a classificação de mesclagem e mesclando os resultados classificados. Isso especifica completamente a idéia de classificação por mesclagem, mas não é determinística: não especifica uma ordem na qual classificar as metades (por tudo que importamos, isso pode ser feito simultaneamente), nem especifica uma maneira exata de determine a divisão. Esses detalhes precisarão ser preenchidos para chegar a uma versão seqüencial e determinística da classificação de mesclagem que pode ser implementada por um programa de computador de thread único, mas eu diria que eles fazem parte de uma maneira específica de fazer a classificação de mesclagem, não a idéia de mesclagem se classifica.
O mesmo se aplica aos algoritmos em geral - por exemplo, receitas de livros de receitas. Algumas pessoas definem algoritmos como determinísticos; nesse caso, essa noção mais geral e, na minha opinião, mais natural de 'algoritmo' precisa de um nome diferente.
A idéia de trabalhar com especificações não determinísticas foi formalizada pelo método de programação de Dijkstra, que começa por especificações que apenas fornecem pré e pós condições a serem atendidas pelo programa e desenvolve sistematicamente um programa determinístico e imperativo a partir delas. Dijkstra provavelmente teria dito: a triagem é o problema, a relação entre pré e pós-condições que estamos tentando estabelecer; mesclar classificaçãoé uma abordagem para fazer isso, algures a meio caminho entre a especificação do problema e uma solução determinística; um algoritmo determinístico de classificação de mesclagem determinístico é uma solução determinística concreta. Mas a mesma abordagem geral pode ser usada para o desenvolvimento de programas concorrentes, nos quais o eventual programa ainda não é determinístico. Tais programas podem, por exemplo, ser executados em ambientes de computação distribuídos.
fonte
Você está certo, NÃO podemos construir uma máquina não determinística. Portanto, o objetivo não é usar o conceito para construir máquinas melhores. Em vez disso, o não determinismo é um conceito útil ao tentar entender a computação. Por exemplo, agora sabemos que, do ponto de vista da computabilidade, o não determinismo não é algo mais poderoso que o determinismo, o que significa que podemos simular uma máquina não determinística usando uma determinística. No entanto, da perspectiva da complexidade, o não determinismo nos permite, por exemplo, raciocinar e tentar entender a relação entre a dificuldade de encontrar uma solução eficiente para um problema e a dificuldade de verificar uma solução (que é o famoso problema P versus NP) . E assim por diante. Portanto, a principal razão para estudar o não determinismo é teórica.
fonte
a invenção da máquina de Turing foi em 1936 por Turing. Os modelos do tipo FSM foram introduzidos por McCulloch e Pitts , dois neurofisiologistas, como modelo para atividade neurobiológica em 1943. na página de história da Stanford CS :
não é um historiador de CS, mas suspeita que o modelo de McCulloch-Pitts não incluísse o não-determinismo e o modelo de Mealy - Moore , em uma generalização / abstração natural do conceito formal / teórico. observe que os DFAs e os NFAs têm o mesmo poder representacional, de modo que, se alguém deseja modelar sistemas reais, há uma opção. uma diferença básica é que um NFA pode ser muito menor que um DFA equivalente (por exemplo, existe um elemento natural da compactação de dados / informações). também existem aspectos / análogos naturais do paralelismo no estudo da NFA.
fonte
Em primeiro lugar, gostaria de agradecer a todas as pessoas que responderam à pergunta.Todas as respostas são importantes e acrescentam algumas informações úteis.Mas como é uma pergunta complicada para os iniciantes, e precisam de tempo suficiente para entendê-la bem, tentaria resumir o que ganhei de todas as respostas e de alguns livros:
Na verdade, eu tinha uma confusão que era sobre o mecanismo do modelo não determinístico. Eu sempre me perguntei sobre a máquina não determinística, pois é uma máquina não mecânica que não existe no mundo real. Sempre comparei o Automata com nossos computadores atuais, que são completamente determinísticos por natureza. Na verdade, eu não estava entendendo corretamente o modelo não determinístico. Agora, acho que estou entendendo muito bem o modelo não-minimalista: uma máquina não-determinística é uma máquina que sempre segue esse caminho de execução que leva à aceitação da string (sem retroceder). Mas como isso pode ser possível na vida real? : É absolutamente impossível para o computador atual ser tão inteligente em prever o futuro. Então, por que não-determinismo? A resposta a esta pergunta é bastante complicada.O que concluí sobre a pergunta é que: A teoria dos autômatos existia quando os computadores não existiam (primeira teoria então prática). É assunto puramente teórico e o conceito de não-determinismo surgiu intuitivamente. O motivo do assunto "Teoria dos autômatos" não era lidar com computadores práticos. Mas quando praticamente o computador chega e, usando a Teoria dos Automatizados, somos capazes de definir computadores práticos com precisão: quais são as limitações dos computadores atuais.que problema algorítmico é muito complexo para os computadores e é tão impraticável (aqui, o papel do não -ERMERMINISMO é muito crucial pelo qual pode distinguir duas classes de complexidade P e NP). Quais são as soluções para esses problemas impraticáveis pelos quais ele pode ser executado comparativamente mais rápido.etc. Essa é a utilidade do não-determinismo. É assunto puramente teórico e o conceito de não-determinismo surgiu intuitivamente. O motivo do assunto "Teoria dos autômatos" não era lidar com computadores práticos. Mas quando praticamente o computador chega e, usando a Teoria dos Automatizados, somos capazes de definir computadores práticos com precisão: quais são as limitações dos computadores atuais.que problema algorítmico é muito complexo para os computadores e é tão impraticável (aqui, o papel do não -ERMERMINISMO é muito crucial pelo qual pode distinguir duas classes de complexidade P e NP). Quais são as soluções para esses problemas impraticáveis pelos quais ele pode ser executado comparativamente mais rápido.etc. Essa é a utilidade do não-determinismo. É assunto puramente teórico e o conceito de não-determinismo surgiu intuitivamente. O motivo do assunto "Teoria dos autômatos" não era lidar com computadores práticos. Mas quando praticamente o computador chega e, usando a Teoria dos Automatizados, somos capazes de definir computadores práticos com precisão: quais são as limitações dos computadores atuais.que problema algorítmico é muito complexo para os computadores e é tão impraticável (aqui, o papel do não -ERMERMINISMO é muito crucial pelo qual pode distinguir duas classes de complexidade P e NP). Quais são as soluções para esses problemas impraticáveis pelos quais ele pode ser executado comparativamente mais rápido.etc. Essa é a utilidade do não-determinismo. Mas quando praticamente o computador chega e, usando a Teoria dos Automatizados, somos capazes de definir computadores práticos com precisão: quais são as limitações dos computadores atuais.que problema algorítmico é muito complexo para os computadores e é tão impraticável (aqui, o papel do não -ERMERMINISMO é muito crucial pelo qual pode distinguir duas classes de complexidade P e NP). Quais são as soluções para esses problemas impraticáveis pelos quais ele pode ser executado comparativamente mais rápido.etc. Essa é a utilidade do não-determinismo. Mas quando praticamente o computador chega e, usando a Teoria dos Automatizados, somos capazes de definir computadores práticos com precisão: quais são as limitações dos computadores atuais.que problema algorítmico é muito complexo para os computadores e é tão impraticável (aqui, o papel do não -ERMERMINISMO é muito crucial pelo qual pode distinguir duas classes de complexidade P e NP). Quais são as soluções para esses problemas impraticáveis pelos quais ele pode ser executado comparativamente mais rápido.etc. Essa é a utilidade do não-determinismo. Quais são as soluções para esses problemas impraticáveis pelos quais ele pode ser executado comparativamente mais rápido.etc. Essa é a utilidade do não-determinismo. Quais são as soluções para esses problemas impraticáveis pelos quais ele pode ser executado comparativamente mais rápido.etc. Essa é a utilidade do não-determinismo.
Por favor, corrija-me se houver algo errado.
fonte
o não determinismo é útil porque ajuda a entender o determinismo, mas não o contrário. Você poderia dizer que o não-determinismo é a idéia maior. Uma máquina de turbulência determinística é um caso especial de uma não determinística. - O não determinismo pode nos ajudar a entender por que, nas plataformas atuais, alguns problemas são difíceis de identificar. Existem vários problemas computacionais que não têm solução eficiente em uma plataforma de computação determinística, mas entendemos que pode haver soluções eficientes em problemas não determinísticos. ... estado, codificação, não determinismo, todos eles estão vinculados http://people.cs.umass.edu/~rsnbrg/teach-eatcs.pdf
Em uma máquina determinística de Turing, o conjunto de regras prescreve no máximo uma ação a ser executada para qualquer situação. Uma máquina de Turing não determinística (NTM), por outro lado, pode ter um conjunto de regras que prescreve mais de uma ação para uma determinada situação. http://en.wikipedia.org/wiki/Non-deterministic_Turing_machine Se você pode criar uma caixa de software que possa gerenciar tão bem as transições de estado que possa lidar com mais de uma ação, poderá obter desempenho além das máquinas determinísticas.
fonte
O determinismo tem uma forte tendência a quebrar simetrias. Essa tendência é ainda mais forte para o determinismo seqüencial, mas a noção de um gráfico direcionado acíclico e uma ordem topológica desse gráfico permite ignorar a diferença entre determinismo e determinismo seqüencial. O não determinismo é um superconjunto de determinismo, que permite preservar mais simetrias. Ao projetar a solução de um problema, começar com a solução não determinística permite preservar simetrias úteis, e que mantém a descrição da solução pequena e compacta. A quebra das simetrias pode ser delegada para um estágio posterior durante a implementação, enquanto converte a solução não determinística em uma solução determinística.
Frequentemente, o não determinismo significa que a noção de uma função parcial é substituída pela noção de uma relação. Nesse caso, uma máquina não determinística pode correr para frente e para trás no tempo, enquanto isso não é possível em geral para uma máquina determinística. Se trabalharmos com funções totais para determinismo e funções totais com valores múltiplos para não determinantes, a simetria não é mais tão boa, mas ainda pode ser feita para funcionar.
fonte