Diferenças e relações entre algoritmos aleatórios e não determinísticos?


30

Que diferenças e relações existem entre algoritmos aleatórios e algoritmos não determinísticos?

Da Wikipedia

Um algoritmo aleatório é um algoritmo que emprega um grau de aleatoriedade como parte de sua lógica. O algoritmo normalmente usa bits aleatoriamente uniformes como uma entrada auxiliar para orientar seu comportamento, na esperança de obter um bom desempenho no "caso médio" em todas as opções possíveis de bits aleatórios. Formalmente, o desempenho do algoritmo será uma variável aleatória determinada pelos bits aleatórios; portanto, o tempo de execução ou a saída (ou ambas) são variáveis ​​aleatórias.

Um algoritmo não determinístico é um algoritmo que pode exibir comportamentos diferentes em execuções diferentes, em oposição a um algoritmo determinístico. Existem várias maneiras pelas quais um algoritmo pode se comportar de maneira diferente de execução para execução. Um algoritmo simultâneo pode ter um desempenho diferente em execuções diferentes devido a uma condição de corrida. O comportamento de um algoritmo probabilístico depende de um gerador de números aleatórios. Um algoritmo que resolve um problema em tempo polinomial não determinístico pode ser executado em tempo polinomial ou em tempo exponencial, dependendo das escolhas que ele faz durante a execução.

Algoritmos aleatórios e algoritmos probabilísticos são o mesmo conceito?

Se sim, algoritmos aleatórios são apenas uma espécie de algoritmos não determinísticos?


Acho que parte da confusão surge porque "não determinista" e "não determinista" parecem significar a mesma coisa, mas não o fazem: "determinista" implica "não aleatório" e "não determinístico". Portanto, "aleatório" e "não determinístico" são as duas maneiras pelas quais um algoritmo pode ser "não determinístico", mas "não determinístico" tem uma definição técnica específica e não é simplesmente um antônimo para "determinístico".
21412 Joe

Respostas:


24

Algoritmos não determinísticos são muito diferentes dos algoritmos probabilísticos.

Algoritmos probabilísticos são aqueles que usam sorteios e funcionam "na maioria das vezes". Como exemplo, variantes aleatórias do quicksort funcionam com o tempo na expectativa (e com alta probabilidade), mas se você tiver azar, pode levar tanto quanto Θ ( n 2 ) . Os algoritmos probabilísticos são práticos e são usados, por exemplo, pelo seu computador ao gerar chaves RSA (para testar se os dois fatores de sua chave secreta são primos). Algoritmo probabilístico que não usa nenhum sorteio às vezes é chamado de "determinístico".Θ(nregistron)Θ(n2)

Algoritmos não determinísticos são aqueles que "precisam de uma dica", mas estão sempre corretos: não podem ser enganados ao receberem a dica errada. Como exemplo, aqui está um algoritmo não determinístico que fatora um inteiro : adivinhe uma fatoração de e verifique se todos os fatores são primos (existe um algoritmo determinístico "rápido na teoria" para fazer isso). Esse algoritmo é muito rápido e rejeita dicas falsas. A maioria das pessoas pensa que algoritmos aleatórios não podem fatorar números inteiros tão rapidamente. Claramente, esse modelo de computação não é realista.nnn

Por que nos preocupamos com algoritmos não determinísticos? Existe uma classe de problemas, conhecida como NP, que consiste em problemas de decisão que possuem algoritmos não determinísticos eficientes. A maioria das pessoas pensa que os problemas mais difíceis dessa classe, os chamados problemas completos de NP, não possuem algoritmos determinísticos (ou mesmo aleatórios) eficientes; isso é conhecido como questão P vs NP. Como muitos problemas naturais são NP-completos, é interessante saber se, de fato, eles não são solucionáveis ​​com eficiência, no pior dos casos (na prática, muitas vezes os casos que surgem na prática são solucionáveis ​​em tempo razoável).


Obrigado! (1) Lembro-me de que os problemas de PN são aqueles que podem ser resolvidos por um algoritmo em uma máquina de Turing não determinística em tempo polinomial. Então, "um algoritmo em uma máquina de Turing não determinística" e "um algoritmo não determinístico em uma máquina de Turing determinística" são equivalentes em algum sentido? (2) Você acha que algoritmo probabalístico e aleatório são o mesmo conceito? (3) Você também acha que a Wikipedia diz que algoritmo concorrente e algoritmo probabalístico são dois tipos de algoritmos não determinísticos que estão errados?
Tim

1
Não acho que o sabor certificado do não-determinismo sirva para esclarecer a diferença com a randomização.
Raphael

(1) Sim, os dois são iguais. (2) Estes são dois nomes para o mesmo conceito. (3) A Wikipedia está dando alguns exemplos de outros tipos de algoritmos, embora a apresentação possa ser enganosa. Algoritmos paralelos e probabilísticos não são não determinísticos.
Yuval Filmus 11/11

4
@ShelbyMooreIII O não determinismo tem um significado técnico muito específico na teoria da recursão e na ciência da computação teórica.
Yuval Filmus

1
Yuval, por favor, sinalize os comentários que você acha que não são construtivos ou obsoletos; nós os removeremos então.
Raphael

15

Um algoritmo especifica um método para passar de uma determinada entrada para uma saída desejada que tenha uma certa relação com a entrada. Dizemos que esse algoritmo é determinístico se, a qualquer momento, for especificado de maneira exata e inequívoca qual o próximo passo no algoritmo que deve ser executado como parte desse método, potencialmente dependente da entrada ou dos dados parciais computados até agora, mas sempre identificado exclusivamente.

Não determinismo significa que parte do algoritmo é deixada abaixo ou mesmo não especificada. Por exemplo, "int i = um número par entre 0 e n" é subespecificado. Isso significa que não há comportamento exclusivo especificado neste momento.

Para que essa distinção seja útil, você precisa do conceito (usual) de 'correção' para algoritmos (determinísticos), que informalmente é o de que "o algoritmo sempre calcula o que eu quero calcular". Torna-se interessante pensar sobre o que correção significaria para algoritmos não determinísticos, que devem levar em conta as opções possíveis em instruções subespecificadas.

Existem duas maneiras de definir a correção para o não-determinismo. O primeiro é bastante simples e menos interessante, para o qual correção significa "o algoritmo sempre calcula o que eu quero calcular, para todas as seqüências de escolhas que tenho permissão para fazer". Às vezes, isso ocorre se um autor de um pouco de pseudocódigo é muito preguiçoso para escolher um número e diz "escolha qualquer número par entre 0 e n", quando "escolher 0" tornaria o algoritmo determinístico. Essencialmente, substituindo todo não-determinismo pelo resultado de alguma escolha, você pode tornar o algoritmo determinístico.

Este também é o 'não determinismo' referido no seu segundo parágrafo. Esse também é o não determinismo nos algoritmos paralelos: nesses algoritmos, você não tem certeza de como é a execução, mas sabe que sempre funcionará, não importa o que aconteça exatamente (caso contrário, seu algoritmo paralelo estaria incorreto).

A definição interessante de correção para o algoritmo não determinístico é "o algoritmo sempre calcula o que eu quero calcular, para alguma sequência de escolhas que tenho permissão para fazer". Isso significa que pode haver escolhas erradas, no sentido de que elas fazem o algoritmo produzir a resposta errada ou até mesmo ir em um loop infinito. No exemplo "escolha qualquer número par entre 0 e n", talvez 4 e 16 sejam as escolhas corretas, mas todos os outros números estão errados, e esses números podem variar dependendo da entrada, dos resultados parciais e das escolhas feitas até o momento.

Quando usado em ciência da computação, o não-determinismo geralmente se limita à escolha não-determinística de 0 ou 1. No entanto, se você escolher muitos desses bits não-deterministicamente, poderá gerar números não-determinísticos longos ou outros objetos, além de fazer escolhas não-determinísticas. (se alguma vez) limita sua aplicabilidade - se a aplicabilidade é limitada, o não determinismo era muito poderoso em primeiro lugar.

O não determinismo é uma ferramenta que é exatamente tão poderosa quanto um algoritmo determinístico baseado em certificado, ou seja, um algoritmo que verifica uma propriedade dada uma instância e um certificado para essa propriedade. Você pode simplesmente adivinhar não-deterministicamente o certificado para uma direção e pode fornecer um certificado que contenha todas as respostas 'certas' para as suposições não-determinísticas de 0 e 1 do seu programa para a outra direção.

Se jogarmos o tempo de execução na mistura, as coisas se tornarão ainda mais interessantes. O tempo de execução de um algoritmo não determinístico é geralmente considerado o mínimo sobre todas as opções (corretas). No entanto, outras opções podem levar a um tempo de execução dramaticamente pior (que pode ser assintoticamente pior ou até arbitrariamente pior que o mínimo), ou mesmo um loop infinito. É por isso que tomamos o mínimo: não nos importamos com esses casos estranhos.

Agora chegamos a algoritmos aleatórios. Algoritmos aleatórios são como algoritmos não determinísticos, mas em vez de 'permitir' a escolha entre 0 e 1 em determinados pontos, essa escolha é determinada por um sorteio aleatório de moedas no momento em que a escolha deve ser feita (que pode diferir de uma corrida para outra) ou quando a mesma escolha tiver que ser feita novamente mais tarde, durante a execução do algoritmo). Isso significa que o resultado é 0 ou 1 com igual probabilidade. A correção agora se torna "o algoritmo quase sempre calcula o que eu quero calcular" ou "o algoritmo sempre calcula o que eu quero calcular" (apenas a versão determinística). No segundo caso, o tempo que o algoritmo precisa para calcular sua resposta é geralmente 'quase sempre rápido', contrastando com um determinístico 'sempre rápido'.

PZPPNP


1
O(|s|)s

14

Em resumo: não-determinismo significa ter várias opções igualmente válidas de como continuar um cálculo. Randomização significa usar uma fonte externa de bits (aleatórios) para orientar a computação.


Para entender o não determinismo, sugiro que você analise os autômatos finitos (FA). Para uma FA determinística (DFA), a função de transição é, bem, uma função. Dado o estado atual e o próximo símbolo de entrada, o próximo estado é definido exclusivamente.

(umab)(umac)

NFA
[ fonte ]

uma(umab)(umac)uma

O ponto principal aqui é que a aceitação é definida como "aceitar se houver uma execução de aceitação" para o NFA. Este critério de existência pode ser interpretado como "sempre adivinhando o que é certo", mesmo que não haja adivinhação real.

Observe que não há probabilidades aqui, em qualquer lugar. Se você traduzisse o não determinismo em linguagens de programação, teria instruções que podem causar saltos para outras declarações diferentes, no mesmo estado . Tal coisa não existe, exceto, talvez, em linguagens de programação esotéricas projetadas para despertar sua mente.


A randomização é bem diferente. Se a dividirmos, o autômato / programa não tem várias opções para continuar a execução. Depois que os bits aleatórios são desenhados, a próxima instrução é definida exclusivamente:

if ( rand() > 5 )
  do_stuff();
else
  do_other_stuff();

Em termos de autômatos finitos, considere o seguinte:

PFA
[ fonte ]

{uma,b,c}10 0

Σ×ΠΠ


Uma nota final: podemos ver que o não determinismo é um conceito puramente teórico, não pode ser implementado! Então, por que usamos?

  1. Geralmente permite representações menores. Você deve saber que existem NFA para os quais o menor DFA é exponencialmente tão grande¹. Usar os menores é apenas uma questão de simplificar o design dos autômatos e as provas técnicas.

  2. A tradução entre modelos geralmente é mais direta se o não-determinismo for permitido no modelo de destino. Considere, por exemplo, converter expressões regulares em DFA: a maneira usual (e simples) é convertê-la em uma NFA e determinar essa. Não conheço uma construção direta.

  3. Isso pode ser uma preocupação acadêmica, mas é interessante que o não determinismo possa aumentar o poder de um dispositivo. Este não é o caso de autômatos finitos e máquinas de Turing, discutíveis os dispositivos de modelos de máquinas mais populares, mas, por exemplo, autômatos de empilhamento determinísticos, autômatos Büchi e autômatos de árvores de cima para baixo podem aceitar estritamente menos idiomas do que seus irmãos não determinísticos².


  1. Veja esta pergunta em cstheory.SE para um exemplo.
  2. Veja aqui , aqui e aqui (Proposição 1.6.2) , respectivamente.

Portanto, como na programação não podemos criar múltiplos "se mais" com a mesma condição, é por isso que a probabilidade / peso às vezes é incorporada à condição?
kate

@ Kate Não sei o que você quer dizer com isso. Linguagens de programação - Parreira, computadores! - são inerentemente deterministas. Podemos criar a ilusão de aleatoriedade usando PRNGs e trule random (o que isso significa).
Raphael

14

Você deve estar ciente de que há duas definições diferentes de não-determinismo sendo lançadas por aqui.

  1. Como a wikipedia o define, praticamente "não determinismo", ou seja, qualquer algoritmo que nem sempre tem o mesmo comportamento nas mesmas entradas. Algoritmos aleatórios são um caso especial de algoritmos "não determinísticos", porque eles se encaixam na definição como eu a forneci.

  2. Modelos de cálculo não determinísticos (como máquinas de turbulência não determinísticas) são modelos teóricos de cálculo. Eles podem ter vários caminhos possíveis de execução e "aceitam" se algum desses caminhos aceitar. Você deve observar que eles não são reais. Não há como executar fisicamente um algoritmo que não é determinístico nesse sentido, embora você possa simulá-lo com um algoritmo aleatório ou determinístico.

No CS, não-determinismo geralmente significa (2); portanto, a definição da Wikipedia que você forneceu (que é (1)) é enganosa. A maioria das respostas dadas até agora explica (2), não (1).


De acordo com 1), o Quicksort randomizado é um algoritmo determinístico; Não tenho certeza de que seja uma terminologia útil. Eu acho que 1) pode ser descrito como visualização em "caixa preta", enquanto 2) realmente inspeciona o algoritmo / máquina em questão. Indiscutivelmente, CS é tudo sobre 2); Eu atribuiria o ponto de vista 1) à engenharia de software (modular).
Raphael

@ Rafael, Bom ponto, devo corrigir (1) para dizer "tenha o mesmo comportamento nas mesmas entradas". Concordou em preferir (2) ao (1).
usul 02/02

"Comportamento" é ambíguo, exatamente da maneira da caixa preta versus caixa branca. :)
Raphael

Claro, mas acho que vejo a distinção importante entre uma Máquina de Turing não determinística formal, definida com precisão (2) e um "não determinismo" vago / ambíguo (1), que pode incluir a aleatoriedade (enquanto um MNT não). Então isso é tudo o que eu queria dizer ....
usul 02/02

Não há nada de irreal na execução de um algoritmo não determinístico, apenas significa que, durante a execução, é necessário fazer escolhas para as quais o resultado não é determinado pelo algoritmo. A única diferença entre 1 e 2 é que em 1 você não disse quando o algoritmo é considerado "bem-sucedido", enquanto em 2 o algoritmo deve ser do tipo que sempre diz "sim" ou "não" no final de uma corrida e você tem um problema de decisão e define a resposta do algoritmo para o problema como "yes" se e somente se alguma de suas execuções possíveis responder "yes". Então 2 é apenas um caso especial de 1. #
reinierpost

1

Revisitando isso devido a algumas pesquisas relacionadas que estou fazendo, a discordância entre mim e alguns dos outros que responderam pode ser assimilada em um entendimento holístico em que todos estávamos corretos. Mas, na IMO, a terminologia adotada da ciência da computação “não determinismo limitado” é um oxímoro incorreto (que era meu ponto antes).

O ponto principal é distinguir entre não determinismo limitado e ilimitado. [1]

Máquinas de Turing não determinísticas (também conhecidas como "NTMs") limitaram o não-determinismo, pois cada transição de estado tem um número limitado de possibilidades, ou seja, o número de programas (também conhecido como "configurações") é finito. A fita permanece sem limite, portanto a prova de término permanece indecidível. Mas para qualquer entrada que parar, a saída é determinística e limitada no tempo - ou seja, para qualquer entrada, o resultado é determinístico ou não termina. Além disso, os NTMs executam todas as configurações possíveis em paralelo, portanto, executam exponencialmente mais rapidamente que a emulação de NTMs em máquinas determinísticas de Turing (também conhecidas como "DTMs"). [2]

Realmente não existe uma relação não determinística entre entradas e resultados em MNTs porque o resultado é sempre o mesmo para qualquer entrada ou estado inicial, o que é evidente porque eles podem ser emulados por DTMs sem qualquer aleatoriedade adicional. [2] Indecidível não é a antítese do determinístico, porque não parar também é um resultado determinístico. Máquinas determinísticas sempre têm o mesmo resultado para uma determinada entrada, mesmo quando esse resultado não deve ser interrompido. O não determinismo localizado dos MNTs está em cada transição de estado do algoritmo em execução. É indecidível a priori qual caminho da árvore pode terminar, fornecendo o estado de saída. Mas indecidibilidade não é não-determinismo. Assim, o termo "não determinismo limitado" se destina a descrever a indeterminação localizada dentro da máquina de estado, mas não a relação entre entradas e resultados, daí o conceito de "delimitado". Ainda acho que o termo "não determinismo limitado" é um oxímoro e poderia ter sido descrito com mais precisão como uma máquina de Turing de "transição de estado paralelo".

Enquanto que, para qualquer entrada ou estado inicial, o não determinismo ilimitado (também conhecido como “indeterminismo”) tem um número ilimitado de estados possíveis. O não determinismo ilimitado envolve não apenas o número de configurações possíveis de programas, mas também um estado externo ilimitado que não faz parte da entrada ou do estado inicial, como atrasos ilimitados. E, portanto, os resultados podem variar em execuções repetidas para a mesma entrada ou condição inicial; portanto, não é uma relação determinística entre insumos e resultados. [3]

Algoritmos aleatórios e probabilísticos empregam algum não-determinismo, ou seja, seleção aleatória de configurações possíveis, possivelmente limitadas em número de configurações, mas eles não executam todas as configurações possíveis como as NTMs fazem. Portanto, eles não são determinísticos, a menos que a aleatoriedade seja determinística (por exemplo, PRNG) e o estado inicial da entropia para a aleatoriedade seja considerado parte da entrada.

[1] https://en.wikipedia.org/w/index.php?title=Unbounded_nondeterminism&oldid=710628370#Nondeterministic_automata

[2] https://en.wikipedia.org/w/index.php?title=Non-deterministic_Turing_machine&oldid=754212081#Equivalence_with_DTMs

[3] Hewitt, Meijer e Szyperski: O Modelo do Ator (tudo o que você queria saber ...) . Pule para a marca dos 17:44 minutos.


1
Não vejo como isso responde à pergunta.
Adriann

1
@adrianN, a resposta apresenta a explicação sobre o que realmente não é o determinismo. E então explica como os algoritmos aleatórios se relacionam. A pergunta pede relacionar os dois. Bingo. Pergunta respondida.
Shelby Moore III

0

Além de todas as respostas que explicam a diferença, tenho um exemplo que pode ajudá-lo a entender o que eles querem dizer.
Considere-se um sorteio, você quer pegar um H ou um T . Se o sorteio é aleatório, é altamente provável que em 1000 lançamentos de moeda, 500 seria H e é muito improvável que 999 deles seria H . Mas se o sorteio não for determinístico, não podemos dizer que obter 999 H seria altamente improvável.


Penso que o seu post serve como um comentário, além de não tentar resolver a questão principal, algoritmos randomizados versus algoritmos não determinísticos e, além disso, nos leva de volta a diferentes tipos de não-determinismos.
Mal

-6

Os algoritmos randomizados (tempo polinomial, resultado booleano) estão na classe de complexidade computacional RP, que é um subconjunto de NP onde residem algoritmos não determinísticos (tempo polinomial, resultado booleano) e um superconjunto de P onde determinístico (tempo polinomial, resultado booleano) residem algoritmos.

A complexidade do subconjunto é sobre a redução de problemas em um conjunto para outro. Assim, RP ⊆ NP exclui a possibilidade de algoritmos aleatórios que também não são determinísticos, porque, definitivamente, um superconjunto contém o subconjunto. Subconjunto significa que todo algoritmo RP (ou qualquer algoritmo RP-completo) pode ser reduzido a algum algoritmo NP (ou qualquer algoritmo NP-completo). P é um subconjunto de RP porque todos os problemas em P podem ser reduzidos a um problema em RP, em que a quantidade de entropia não controlada é 0.

Tangencialmente, isso é análogo ao modo como todo problema em NC (computação paralela) pode ser reduzido a um problema em P , simulando a computação paralela em uma redução a um problema serial em P, mas ainda não está provado que o inverso é verdadeiro, ou seja, que todo problema em P é redutível a um problema na NC, nem provado que não é verdade, ou seja, a prova implausível de que um problema com P completo não é redutível a um problema na NC. Pode ser possível que haja problemas inerentemente seriais e que não possam ser computados em paralelo, mas provar que provar P ≠ NC parece ser implausível (por razões tangenciais demais para discutir nesta resposta).

De maneira mais geral (ou seja, não limitado a tipos de resultados booleanos), os algoritmos aleatórios são diferenciados dos algoritmos determinísticos, em que parte da entropia é de origem externa . Os algoritmos randomizados são diferenciados dos algoritmos não determinísticos porque a entropia é limitada e, portanto, pode-se provar que os algoritmos aleatórios (e não não determinísticos) sempre terminam.

A imprevisibilidade de algoritmos não determinísticos se deve à incapacidade de enumerar todas as permutações possíveis da entropia de entrada (o que resulta em imprevisibilidade de terminação). A imprevisibilidade de um algoritmo aleatório se deve à incapacidade de controlartoda a entropia de entrada (o que resulta em uma imprevisibilidade de um resultado indeterminado, embora a taxa de imprevisibilidade possa ser prevista). Nenhuma dessas são declarações sobre imprevisibilidade da resposta correta para o problema, mas a imprevisibilidade se manifesta no canal lateral da terminação e resultado indeterminado, respectivamente. Parece que muitos leitores conflitam imprevisibilidade em uma área com imprevisibilidade do resultado correto, que é uma combinação que nunca escrevi (revise o histórico de edições).

É fundamental entender que o não determinismo é sempre (em qualquer ciência ou uso do termo) a incapacidade de enumerar entropia universal (isto é, sem limites). Enquanto a randomização se refere ao acesso a outra fonte de entropia (em programas que não sejam e, portanto, não estejam sob o controle das variáveis ​​de entrada), que podem ou não ser ilimitadas;

Adicionei o seguinte comentário abaixo da resposta atualmente mais popular ao outro tópico que faz uma pergunta semelhante.

Todas as ciências usam a mesma definição de não determinismo unificada no conceito de entropia ilimitada. Resultados imprevisíveis em todas as ciências devem-se à incapacidade de enumerar a priori todas as saídas possíveis de um algoritmo (ou sistema) porque ele aceita estados ilimitados, ou seja, classe de complexidade NP. Especificar uma entrada específica para observar se ela para e notar que o resultado é idempotente é equivalente em outras ciências a manter o resto da entropia do universo constante enquanto repete a mesma mudança de estado. A computação permite esse isolamento de entropia, enquanto as ciências naturais não.

Acrescentando alguns dos melhores comentários para esclarecer meu argumento sobre a única distinção saliente entre randomizado e não determinístico.

É realmente muito elegante e fácil ver a distinção, uma vez que todos vocês param de confundi-la tentando descrevê-la de um ponto de vista operacional, em vez do ponto de vista de entropia saliente.

@reinierpost todo mundo está confundindo a diferença entre aleatório e não determinístico. Isso faz com que seu comentário fique confuso. O algoritmo responde à interação da entropia de entrada (variável) e sua entropia interna do código fonte (invariável). O não determinismo é entropia ilimitada. A entropia invariável pode até ser internamente ilimitada, como expandir os dígitos de π . Randomizado é que parte da entropia não é acoplada à entrada conforme definido (isto é, pode ser proveniente de uma chamada do sistema /dev/randomou aleatoriedade simulada, por exemplo, NFA ou PRNG).

.

A definição formal de @Raphael de automatismo finito não determinístico (NFA) é entropia de entrada finita (dados: a 5-tupla). Assim, todo NFA pode funcionar em uma máquina de Turing determinística, ou seja, não requer uma máquina completa de Turing não determinística. Assim, os AFN não fazem parte da classe de problemas não determinísticos. A noção de "não-determinismo" na AFN é que seu determinismo (embora claramente presente, pois toda AFN pode ser convertida em uma AFD) não é explicitamente expandido - não é o mesmo que não-determinismo da computação

.

@ Rafael, o alegado "não determinismo" nos NFAs é realmente aleatoriedade, é o sentido da minha definição da distinção entre aleatoriedade e não determinismo. Minha definição é que aleatoriedade é onde parte da entropia que não está sob controle, conhecimento (ou expansão não explícita desejada no caso de uma NFA) da entrada para o programa ou função. Enquanto o verdadeiro não determinismo é a incapacidade de conhecer a entropia em qualquer caso, porque é ilimitada. É exatamente isso que distingue o randomizado do não determinismo. Portanto, a NFA deve ser um exemplo do primeiro, não do último, como você reivindicou.

.

@ Rafael, como já expliquei, a noção de não-determinismo nas AFNs combina o não-determinístico com a entropia finita. Assim, o não-determinismo é um conceito local de não expandir o determinismo como uma forma de compressão ou conveniência; portanto, não dizemos que os AFNs são não-determinísticos, ao contrário, eles possuem aparência aleatória para um oráculo que não deseja calcular a expansão determinística. Mas tudo isso é uma miragem, porque ela pode ser expandida deterministicamente porque a entropia não é ilimitada, ou seja, finita.

Dicionários são ferramentas. Aprenda a usá-los.

adjetivo aleatório

Estatisticas. ou caracterizar um processo de seleção no qual cada item de um conjunto tem uma probabilidade igual de ser escolhido.

sendo ou relacionado a um conjunto ou a um elemento de um conjunto, cujos elementos tenham igual probabilidade de ocorrência

Assim, a randomização requer apenas que parte da entropia de entrada seja equiprobável, o que é congruente com minha definição de que parte da entropia de entrada não seja controlada pelo responsável pela chamada da função. Observe que a randomização não exige que a entropia de entrada seja indecidível até a finalização.

Na ciência da computação, um algoritmo determinístico é um algoritmo que, dada uma entrada específica, sempre produzirá a mesma saída, com a máquina subjacente sempre passando pela mesma sequência de estados.

Formalmente, um algoritmo determinístico calcula uma função matemática; uma função possui um valor exclusivo para qualquer entrada em seu domínio e o algoritmo é um processo que produz esse valor específico como saída.

Os algoritmos determinísticos podem ser definidos em termos de uma máquina de estados: um estado descreve o que uma máquina está fazendo em um determinado instante no tempo. Máquinas de estado passam de maneira discreta de um estado para outro. Logo após inserirmos a entrada, a máquina está em seu estado inicial ou inicial. Se a máquina é determinística, isso significa que, a partir deste momento, seu estado atual determina qual será seu próximo estado; seu curso através do conjunto de estados é predeterminado. Observe que uma máquina pode ser determinística e, mesmo assim, nunca para ou termina e, portanto, falha em fornecer um resultado.

Portanto, isso está nos dizendo que algoritmos determinísticos devem ser completamente determinados pelo estado de entrada da função, ou seja, devemos ser capazes de provar que a função terminará (ou não terminará) e que não pode ser indecidível. Apesar da tentativa confusa da Wikipedia de descrever não determinística, a única antítese à determinística, conforme definida acima pela Wikipedia, são algoritmos cujo estado de entrada (entropia) está mal definido. E a única maneira de o estado de entrada poder ser mal definido é quando é ilimitado (portanto, não pode ser deterministicamente pré-analisado). É exatamente isso que distingue uma máquina de Turing não determinística (e muitos programas do mundo real, escritos em linguagens completas comuns de Turing, como C, Java, Javascript, ML, etc.) de TMs determinísticas e linguagens de programação como HTML, fórmulas de planilhas, Coq, Epigram,

Na teoria da complexidade computacional, algoritmos não determinísticos são aqueles que, em todas as etapas possíveis, podem permitir múltiplas continuações (imagine um homem andando por um caminho em uma floresta e, toda vez que avança, ele deve escolher qual bifurcação na estrada que deseja) pegar). Esses algoritmos não chegam a uma solução para todos os caminhos computacionais possíveis; no entanto, é garantido que eles chegarão a uma solução correta para algum caminho (ou seja, o homem que anda pela floresta só pode encontrar sua cabana se escolher alguma combinação de caminhos "corretos"). As opções podem ser interpretadas como suposições em um processo de pesquisa.

Wikipedia e outros tentam confundir randomização com não-determinismo, mas qual é o sentido de ter os dois conceitos se você não os distingue eloquentemente?

Claramente, o determinismo é sobre a capacidade de determinar. Claramente, a randomização é sobre como tornar equitativa parte da entropia.

Incluir entropia aleatória no estado de um algoritmo não é necessário torná-lo indeterminável. Por exemplo, um PRNG pode ter a distribuição estatística equiprobável necessária, mas também ser inteiramente determinístico.

Conflitar conceitos ortogonais é o que as pessoas com baixo QI. Espero que seja melhor do que isso nesta comunidade!


4
Não é isso que não determinismo significa em ciência da computação. Algoritmos não determinísticos não são "imprevisíveis".
David Richerby

4
Eu respondo não tem nada a ver com como o não-determinismo é definido nos autômatos. teoria da computabilidade. Shelby, você deve parar de procurar e comprar um livro. Se você não entender as outras respostas, acho que não podemos ajudá-lo em um comentário.
Raphael

3
@ShelbyMooreIII Você entendeu completamente o que não-determinismo significa em ciência da computação. Não tem nada a ver com entropia. Não significa o que você pensa que significa: é por isso que você acha que todas as outras respostas estão erradas. Talvez o nome tenha sido mal escolhido, mas isso não vem ao caso. Tem um significado particular na ciência da computação, que é diferente do significado que tem em outras ciências. Você está tentando usar a definição errada, e é por isso que tudo parece completamente errado para você.
David Richerby

4
"O uso do termo não determinismo quando se fala em teoria da complexidade computacional [...] é claramente tudo sobre entropia" - não, não é.
Raphael

3
Podemos concordar com isso: por favor, pare de tentar nos "ensinar", não está ajudando ninguém.
Raphael
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.