Eu ouvi recentemente isso:
"Uma máquina não determinística não é a mesma que uma máquina probabilística. Em termos brutos, uma máquina não determinística é uma máquina probabilística na qual as probabilidades de transições não são conhecidas".
Sinto como se entendi, mas realmente não entendo. Alguém poderia me explicar isso (no contexto de máquinas ou em geral)?
Edit 1:
Apenas para esclarecer, a citação estava no contexto de autômato finito, mas a pergunta também é significativa para as máquinas de Turing, como outras pessoas responderam.
Além disso, ouço as pessoas dizerem "... então escolho o objeto x do conjunto de maneira não determinística". Eu achava que eles queriam dizer "aleatoriamente". Daí a confusão.
Respostas:
É importante entender que os cientistas da computação usam o termo "não-determinístico" de maneira diferente de como é normalmente usado em outras ciências. Uma MT não determinística é realmente determinística no sentido da física - ou seja, um MNT sempre produz a mesma resposta em uma determinada entrada: ele sempre aceita ou sempre rejeita. Uma TM probabilística aceitará ou rejeitará uma entrada com uma certa probabilidade; portanto, em uma execução, ela pode aceitar e em outra pode rejeitar.
Mais detalhadamente: em cada etapa da computação realizada por um NTM, em vez de ter uma única regra de transição, existem várias regras que podem ser invocadas. Para determinar se o NTM aceita ou rejeita, verifique todas as ramificações possíveis da computação. (Portanto, se houver, digamos, exatamente 2 transições para escolher em cada etapa e cada ramo de computação tiver um total de N etapas, haverá totais de ramificações a serem consideradas.) Para um NTM padrão, uma entrada é aceita se algum dos ramos da computação aceitar.2N
Esta última parte da definição pode ser modificada para obter outros tipos relacionados de máquinas de Turing. Se você estiver interessado em problemas com uma solução exclusiva, poderá aceitar a TM se exatamente uma filial aceitar. Se você estiver interessado no comportamento majoritário, poderá definir a TM para aceitar se mais da metade das filiais aceitarem. E se você escolher aleatoriamente (de acordo com alguma distribuição de probabilidade) um dos possíveis ramos e aceitar ou rejeitar com base no que esse ramo faz, então você tem uma TM probabilística.
fonte
No contexto das máquinas de Turing, "não determinístico" realmente significa "paralelo". Um algoritmo aleatório pode explorar aleatoriamente os ramos da árvore de computação de uma máquina de Turing não determinística, mas uma máquina de Turing não determinística pode explorá-los - todos - ao mesmo tempo, e é isso que lhe dá seu poder.
Em outros contextos (não posso dizer da sua citação se você está falando sobre Máquinas de Turing), um algoritmo aleatório pode estar intencionalmente usando aleatoriedade, enquanto um algoritmo que você queria ser determinístico pode acabar exibindo não-determinismo por causa de um bug ...
Em resposta à sua edição, quando as pessoas dizem "escolher um elemento de um conjunto de forma não determinística", é possível que elas signifiquem apenas "aleatoriamente". No entanto, também é possível que eles signifiquem "escolha magicamente o elemento certo do conjunto". Uma maneira comum de visualizar máquinas de turing não determinísticas é que elas primeiro “adivinham” magicamente uma solução e depois verificam sua correção. Obviamente, você pode ver esse palpite mágico como apenas o resultado de verificar todas as possibilidades em paralelo.
fonte
Existem vários contextos diferentes em que "determinístico", "aleatório" e "não determinístico" significam três coisas diferentes. Em contextos em que há vários participantes, como segurança e simultaneidade, a intuição geralmente é algo como:
determinístico significa "eu escolho"
não determinístico significa "alguém escolhe"
random significa "ninguém escolhe"
Alguns exemplos:
[simultaneidade, aleatória] Considere um protocolo de rede como Ethernet , em que vários nós podem enviar uma mensagem a qualquer momento. Se dois nós enviam uma mensagem em intervalos muito próximos, há uma colisão: as mensagens se sobrepõem e são ilegíveis. Se ocorrer uma colisão, os dois nós devem tentar enviar as mensagens novamente mais tarde. Imagine que você está escrevendo a especificação da Ethernet. Como você especifica o atraso entre novas tentativas? (É melhor que os atrasos sejam diferentes ou haverá uma colisão novamente!)
determinístico: define um algoritmo que os dois nós devem usar. Isso não é feito para a Ethernet porque, para fornecer resultados diferentes, o algoritmo precisaria privilegiar um nó sobre o outro (para qualquer conteúdo de mensagem), e a Ethernet evita isso.
não determinístico: permita que cada implementador decida. Isso não é bom porque os implementadores nos dois nós podem escolher o mesmo algoritmo.
random: cada nó deve selecionar um valor de atraso aleatoriamente (com uma distribuição especificada). É assim que funciona. Há uma pequena probabilidade de os dois nós escolherem o mesmo atraso e há outra colisão, mas a probabilidade de sucesso aumenta assintoticamente em direção a 1 à medida que o número de tentativas aumenta.
[simultaneidade, não determinística] Você escreve um algoritmo simultâneo. Em uma situação específica, pode haver um impasse. Como você pode impedir que o impasse ocorra? Isso depende de que tipo de agendamento seu ambiente de simultaneidade possui.
determinístico: o planejador sempre alterna entre threads em determinados pontos bem definidos, por exemplo, apenas quando o código é explicitamente produzido. Então você simplesmente organiza para que os encadeamentos não cedam em momentos ruins.
random: é garantido que o planejador alterne os threads aleatoriamente. Uma estratégia viável pode ser detectar o impasse, se ocorrer, e reiniciar o algoritmo desde o início.
não determinístico (a maioria dos agendadores é assim): você não sabe quando o agendador alternará entre threads. Então você realmente tem que evitar o impasse. Se você tentou detectar e reiniciar como no caso aleatório, corre o risco de o agendador agendar seus encadeamentos exatamente da mesma maneira repetidamente.
[segurança, aleatória] Você escreve um aplicativo com um prompt de senha. Como você modela um invasor?
determinístico: o invasor sempre tenta as mesmas senhas. Esse não é um modelo útil de um invasor - os invasores não são previsíveis por definição.
não determinístico: o invasor conhece sua senha de alguma forma e a insere. Isso mostra a limitação das senhas: elas devem ser mantidas em segredo. Se sua senha é secreta, esse invasor não é realista.
random: o invasor tenta senhas aleatoriamente. Nesse caso, este é um modelo realista de invasor. Você pode estudar quanto tempo levaria para o invasor adivinhar sua senha, dependendo da distribuição aleatória que ele usa. Uma boa senha é aquela que demora muito para qualquer distribuição realista.
[segurança, não determinística] Você escreve um aplicativo e se preocupa que ele possa ter uma falha de segurança. Como você modela um invasor?
determinista: o atacante sabe tudo o que sabe. Novamente, esse não é um modelo útil de invasor.
random: o atacante joga lixo aleatório e espera que seu programa falhe. Às vezes, isso pode ser útil ( confuso ), mas o invasor pode ser mais inteligente do que isso.
não determinístico: se houver um buraco, o atacante o encontrará eventualmente. Portanto, é melhor você fortalecer sua aplicação (aumentar o requisito de inteligência para o invasor; observe que, como é um requisito de inteligência e não um requisito de computação, isso conta como não determinístico até que a IA apareça), ou melhor, prove que não há falha de segurança e, portanto, esse invasor não existe.
fonte
Um exemplo para tornar as coisas mais claras:
Digamos que você precise escolher uma porta para abrir entre 10.000 portas (digamos que haja um prêmio atrás de uma das portas). Escolher aleatoriamente significa que você escolheria uma das 10000 portas e a entraria. Se houver um prêmio atrás de apenas uma porta, você provavelmente não o encontrará. Uma máquina não determinística entraria em todas as 10000 portas simultaneamente. Se houver um prêmio em qualquer lugar, a máquina não determinística o encontrará.
fonte
Definição de máquina de Turing não determinística : Uma máquina de Turing que possui mais de um próximo estado para algumas combinações de conteúdo da célula atual e do estado atual. Uma entrada é aceita se qualquer sequência de movimentação levar à aceitação.
Definição de Máquina de Turing Probabilitística : Uma Máquina de Turing não determinística (TM) que escolhe aleatoriamente entre as transições disponíveis em cada ponto, de acordo com alguma distribuição de probabilidade.
A máquina de Turing probabilística é uma máquina de Turing não determinística que pode cometer erros.
PPT eu achei útil.
fonte
Eu prefiro a seguinte definição:
Não existe uma máquina de Turing probabilística! Existem apenas máquinas determinísticas (em todas as etapas um único estado de acompanhamento possível) e máquinas não determinísticas (em todas as etapas um número constante de possíveis estados de acompanhamento).
O não determinismo funciona da seguinte maneira: considere uma máquina não determinística que para em cada entrada (possível se o problema for decidido), em que cada cálculo possível usa o mesmo número de etapas e em que cada etapa possui exatamente 2 estados possíveis de acompanhamento ( ambos não são realmente uma restrição). Como na definição de NP, uma máquina não determinística aceita uma entrada se houver pelo menos uma computação possível de aceitação e rejeita a entrada se todas as computações rejeitarem.
A aleatoriedade entra em jogo da seguinte maneira: Você pode escolher uniformemente aleatoriamente um único caminho de computação a partir de uma máquina não determinística, como indicado acima. Você aceita se e somente se esse caminho de cálculo escolhido aleatoriamente aceitar. Essa abordagem aleatória "resolve" o seu problema se, com uma probabilidade esmagadora, essa resposta estiver correta.
Portanto, a diferença entre não-determinismo e aleatoriedade é se você está procurando a mera existência de uma resposta correta do Sim (e não-confiável) ou se está interessado em resolver o seu problema "na maioria das vezes" .
fonte
Para simplificar: uma máquina não determinística pode escolher da melhor maneira o resultado de cada troca de moeda (se você gosta da analogia com uma máquina probabilística). Você também pode imaginar que ele executa o cálculo para cada resultado do lançamento da moeda em paralelo.
fonte
Recuando durante a depuração como motivação para o não determinismo
A noção de uma máquina não determinística se sugere quando você deseja retroceder (no tempo) através de um programa durante a depuração. Em um computador típico, cada etapa modifica apenas uma quantidade finita de memória. Se você sempre salvar essas informações nas 10000 etapas anteriores, poderá avançar e retroceder muito bem no programa, e essa possibilidade não se limita aos programas de brinquedo. Se você tentar remover a assimetria entre as etapas para frente e para trás, você terá a noção de uma máquina não determinística.
Semelhanças e diferenças entre não determinismo e aleatoriedade
Enquanto as máquinas probabilísticas compartilham algumas características com as máquinas não determinísticas, essa simetria entre as etapas anteriores e posteriores não é compartilhada. Para ver isso, vamos modelar as etapas ou transições de uma máquina determinística por funções (totais ou parciais), as transições de uma máquina não determinística por relações (finitas) e as transições de uma máquina probabilística por matrizes (sub) estocásticas . Por exemplo, aqui estão as definições correspondentes para autômatos finitos
Existem muitas condições razoáveis de aceitação diferentes
As transições são apenas uma parte da máquina, estados inicial e final, possíveis condições de saída e aceitação também são importantes. No entanto, existem muito poucas condições de aceitação não equivalentes para máquinas determinísticas, várias condições razoáveis de aceitação para máquinas não determinísticas (NP, coNP, #P, ...) e muitas condições possíveis de aceitação para máquinas probabilísticas. Portanto, esta resposta se concentra principalmente nas transições.
A reversibilidade não é trivial para máquinas probabilísticas
A reversibilidade é complicada mesmo para máquinas não determinísticas
Essas considerações também fazem sentido para os autômatos de empilhamento
Este post sugere que uma motivação para o não-determinismo é remover essa assimetria entre as etapas anteriores e posteriores. Essa simetria do não-determinismo é limitada a autômatos finitos? Aqui estão as definições simétricas correspondentes para autômatos de empilhamento
Verificação diagramada de reversão para operações de entrada e pilha (sem avanço)
Aqui está um diagrama de uma operação de entrada avançada cuja reversão ficaria ruim
Reversibilidade para máquinas de Turing
Uma máquina com mais de uma pilha é equivalente a uma máquina de Turing, e as operações da pilha podem ser facilmente revertidas. A motivação no início também sugere que a reversão (de uma máquina de Turing) não deve ser difícil. Uma máquina de Turing com um conjunto de instruções típico não é tão boa para reversão, porque o símbolo sob a cabeça pode influenciar se a fita se moverá para a esquerda ou direita. Mas se o conjunto de instruções for modificado adequadamente (sem reduzir o poder computacional da máquina), a reversão será quase trivial novamente.
Uma reversão também pode ser construída sem modificar o conjunto de instruções, mas não é canônica e um pouco feia. Pode parecer que a existência de uma reversão é tão difícil de decidir quanto muitas outras questões referentes às máquinas de Turing, mas uma reversão é uma construção local e as perguntas difíceis geralmente têm um sabor global; portanto, o pessimismo provavelmente seria injustificado aqui.
O desejo de mudar para conjuntos de instruções equivalentes (mais fáceis de reverter) mostra que essas perguntas são menos óbvias do que parecem à primeira vista. Uma mudança mais sutil aconteceu neste post antes, quando as funções totais e matrizes estocásticas foram substituídas por funções parciais e matrizes sub-fasásticas. Essa opção não é estritamente necessária, mas a reversão é feia caso contrário. A mudança para as matrizes subsocásticas foi na verdade o ponto em que ficou óbvio que a reversibilidade não é tão trivial, afinal, e que se deve anotar detalhes (como feito acima) em vez de assumir apenas uma perspectiva de alto nível (como apresentado na motivação em o início). As questões levantadas por Niel de Beaudrap também contribuíram para a percepção de que a perspectiva de alto nível é um pouco instável.
Conclusão
Máquinas não determinísticas permitem um número finito de transições determinísticas em cada etapa. Para máquinas probabilísticas, essas transições têm adicionalmente uma probabilidade. Este post traz uma perspectiva diferente sobre o não determinismo e a aleatoriedade. Ignorando as condições globais de aceitação, ele se concentra na reversibilidade local (como uma simetria local). Como a aleatoriedade preserva algumas simetrias locais que não são preservadas pelo determinismo, essa perspectiva revela diferenças não triviais entre máquinas não determinísticas e probabilísticas.
fonte
Mas se o algoritmo implementado na máquina envolve randomização ou probabilidades (intrínsecas ao algoritmo), então é uma máquina randomizada (ou probabilística).
Em geral, sempre é possível remover o não-determinismo de uma máquina e construir um equivalente determinístico (veja o algoritmo acima), mas o mesmo não pode ser feito (em geral) para remover a randomização (no contexto do acima), porque é intrínseco ao algoritmo implementado .
Observe que, à luz do exposto, tanto uma máquina determinística quanto uma máquina não determinística podem ser probabilísticas se o algoritmo (envolvido) usar randomização (ou probabilidades) dessa maneira.
Em resumo, o não determinismo nos autômatos (neste contexto) refere-se a classes de autômatos semelhantes, enquanto as máquinas de randomização ou probabilística se referem aos (aplicação intrínseca da randomização nos) algoritmos reais implementados por esses autômatos.
fonte