Por que a NFA é chamada não determinística?


14

Eu tenho essa pergunta [engraçada] em mente. Por que o autômato finito não determinístico é chamado não determinístico enquanto definimos as transições para entradas. Bem, embora existam transições múltiplas e epsilon , elas são definidas, o que significa que a máquina é determinística para essas transições. O que significa que é determinístico.


12
Não determinístico, como usado na ciência da computação teórica, é diferente do aleatório.
precisa saber é o seguinte

10
É a escolha entre as transições que é não determinística.
Reinierpost

O que é um NFA? (Para os não iluminados entre nós)
DarcyThomas

@DarcyThomas, a primeira introdução que tive foi swtch.com/~rsc/regexp/regexp1.html . É uma boa leitura - não é o objetivo do artigo apresentar as AFNs, mas faz um bom trabalho ao discutir expressões regulares.
Wildcard

Respostas:


22

"Determinístico" significa "se você colocar o sistema na mesma situação duas vezes, é garantido que você fará a mesma escolha nas duas vezes".

"Não determinístico" significa "não determinístico" ou, em outras palavras, "se você colocar o sistema na mesma situação duas vezes, ele poderá ou não fazer a mesma escolha nas duas vezes".

Um autômato finito não determinístico (NFA) pode ter várias transições fora de um estado. Isso significa que existem várias opções para o que ele poderia fazer nessa situação. Não é forçado a sempre escolher o mesmo; em uma entrada, ele pode escolher a primeira transição e, em outra entrada, pode escolher a mesma transição.

Aqui você pode pensar em "situação" como "em que estado o NFA está, junto com qual símbolo será lido a seguir a partir da entrada". Mesmo quando os dois são iguais, um NFA ainda pode ter várias transições correspondentes que podem ser retiradas desse estado e pode escolher arbitrariamente qual delas tomar. Por outro lado, um DFA possui apenas uma transição correspondente que pode ser realizada nessa situação, portanto não tem escolha - sempre seguirá a mesma transição sempre que estiver nessa situação.


"pode ​​escolher arbitrariamente qual deles levar". Então, basicamente, tem uma natureza probabilística?
Trilarion

@ Trilarion, não, depende se leva ou não ao estado de aceitação. De fato, a FA probabilística é uma generalização para a NFA.
rus9384

"Não determinístico" significa "não determinístico" ou, em outras palavras, "se você colocar o sistema na mesma situação duas vezes, ele poderá ou não fazer a mesma escolha nas duas vezes". com isso, você quer dizer que a máquina pode aceitar e rejeitar a mesma string em dois casos diferentes.
Madhusoodan P

3
@ MadhusoodanP Sua intuição está correta em relação ao que foi escrito aqui e isso nos leva ao que está faltando nesta resposta: Ao analisar os NFAs, sempre consideramos todos os caminhos de execução possíveis . Contanto que qualquer caminho nessa máquina leve a um estado de aceitação, consideramos a entrada como aceita. Portanto, não se trata de probabilidade, é simplesmente se um estado de aceitação pode ser alcançado ou não. Essa intuição fica mais clara quando se pensa em como os NFAs são reduzidos a DFAs: temos que simular todas as execuções possíveis do NFA, o que leva à explosão exponencial na construção.
ComicSansMS

3
Uma maneira de visualizá-lo é assumir que, onde várias transições possam ser escolhidas, a NFA realiza todas as transições. Você cria uma estrutura em forma de árvore de todos os estados alcançados por uma sequência de entrada e, se algum dos ramos terminar em um estado de aceitação, a sequência será aceita. Em outras palavras, com um DFA, você está perguntando " o estado atingido pela minha entrada é um estado de aceitação?", Enquanto que com um NFA, você está perguntando " qualquer estado que pode ser alcançado pela minha entrada é um estado de aceitação?".
Harrison Paine

8

Veja esse autômato, por exemplo, é um NFA e aceita a string . Para ser mais pedante, aceita strings que terminam em 10 .011010

Autômato de exemplo, fonte: /cs/61159/what-is-the-difference-between-following-two-finite-automata/61208

Para ver se precisamos apenas verificar se ele atinge um estado de aceitação.

q01q00q11q20

Agora, na linha vermelha, havia outra possibilidade, ou seja, ao ler o segundo 1 eu poderia ficar em e depois permanecer em q 0 ao ler o último 0 . Os autômatos não têm memória; portanto, não há como 'salvar' um estado e verificar mais tarde se minha sequência termina com 10 ; é como se esse NFA estivesse tentando adivinhar se a sequência termina com 10 antes de ramificar para um estado aceitável. O não determinismo aqui é fazer muitas escolhas e sempre fazer as corretas.q0q001010

É mais fácil construir um NFA do que construir um DFA, o bom é que ambos são equivalentes .


Sim, eu conheço a parte teórica da NFA. Mas o que eu estava perguntando era que, embora haja várias transições para um único caractere de entrada, a máquina é determinística sobre o que todos os estados podem alcançar (digamos, criando threads). Portanto, é literalmente DFA. [Ou você acha que estou interpretando mal o significado de determinismo ]
Madhusoodan P

1
O exemplo pode ser aprimorado com um NFA um pouco mais complicado, pois um DFA para o mesmo objetivo usaria o mesmo número de estados que o seu NFA e não seria particularmente complicado. Por outro lado, combinar uma expressão regular mais complicada pode exigir um DFA complicado e confuso, mas ser trivial em um NFA.
Supercat

@ supercat, pelo menos seria bom ver as transições . ε
rus9384

1
@Aristu Se você está implementando um NFA em sua linguagem de programação favorita, os threads são terríveis escolha. Em vez disso, você deve apenas acompanhar o conjunto de estados em que o autômato "pode ​​estar" após a leitura de cada caractere de entrada. O código resultante será quase tão rápido quanto uma implementação de DFAs.
precisa saber é o seguinte

1
ϵ

5

A função de transição de um NFA especifica as transições permitidas a qualquer momento. Pode haver mais de uma opção, e a NFA escolhe uma transição não - determinística, com o objetivo de, eventualmente, alcançar um estado de aceitação.

Talvez você deva esperar até aprender sobre máquinas de Turing não determinísticas. Não determinismo significa a mesma coisa nos dois casos.


você pode destacar que "uma transição não determinística". E também por favor rever a minha resposta
Madhusoodan P

Acho que nossas respostas não são super boas, embora sua intuição seja sólida.
Yuval Filmus

3

Comece com um autômato finito. Possui estados e estados e transições de aceitação.

Agora, dê a ele mais de uma regra de transição de cada estado e diga que aceita se existir um conjunto de regras de transição escolhidas após o fato de levar ao estado de aceitação, dada uma sequência de entrada.

Depois de ter sua string de entrada, há um conjunto fixo de transições concretas e afirma que ela passa (uma de cada vez) para aceitar essa string. Mas quais transições que escolhe são escolhidas apenas no final da string . Enquanto a string está sendo lida, o caminho a seguir não é determinado.

É não determinístico. Ele escolhe seu caminho através do gráfico depois de fornecer todo o problema, não enquanto lê a entrada.


Agora, formalizamos isso de maneira diferente do que esse experimento mental, mas isso dá a você motivação para obter esse nome.

Isso explica como ele recebeu o nome em primeiro lugar. Sim, você pode modelar NDFA de uma maneira completamente determinística, mas os nomes são persistentes . Depois que você chama algo de Bob, há um custo de comunicação para renomeá-lo para outro, pois ninguém sabe do que você está falando quando você o chama de Alice.


sim! Eu concordo com sua explicação sobre a NFA. Mas a minha pergunta é sobre porque é não-determinista, embora o conjunto de estados são definidos para uma única entrada
Madhusoodan P

@ MadhusoodanP É chamado de não determinístico, devido à forma como foi inventado / previsto. E os nomes são persistentes, mesmo depois de definirmos formas multipolíticas totalmente determinísticas de modelá-lo.
Yakk

1

Na wikipedia , a melhor maneira de pensar sobre isso é começar com máquinas de estado finito determinístico (DFA). Para um DFA, cada transição é determinada exclusivamente pelo estado atual e pelo símbolo de entrada a ser processado. Máquinas de estados finitos não determinísticos (NFA) são simplesmente o que você obtém quando relaxa essa regra de determinismo para permitir que as transições não sejam definidas exclusivamente. É o que você obtém ao remover a regra determinisim dos DFAs.


É um pouco mais complicado, pois o não determinismo também é uma condição de aceitação específica.
Yuval Filmus

1

NFA e DFA são usados ​​para (entre outras coisas) reconhecer certas seqüências de caracteres.

O autômato finito não determinístico funciona como se tivesse influência em suas decisões - ele pode "escolher" seguir um caminho ou não.

Exemplo de NFA

Na imagem acima, quando estamos lidando com a string "00111", observe que, ao encontrar o primeiro "1", há duas maneiras possíveis de seguir. Pode-se ficar em "p" ou ir para "q". Se o autômato fosse para o "q", ele não aceitaria a sequência (já que não há arestas saindo do "q"). Mas a string pode ser aceita por esse autômato indo para o "q" apenas com o último 1, enquanto permanece no "p" para todo o resto (e é isso que está acontecendo).

A NFA faz parecer que o autômato "sabia" o que está por vir e escolhe de acordo.

Claro que não. O DFA e o NFA são equivalentes em termos de potência (você pode reduzir o NFA para o DFA e tornar o DFA (provavelmente) mais simples com o uso do NFA), mas o NFA é útil, pois permite definir os mesmos idiomas do DFA enquanto mantém os gráficos muito mais curto e mais legível.

Não há nada aleatório lá. A parte não determinística enfatiza o fato de que há alguma "escolha" a ser tomada, mas a verdade é que o autômato não toma nenhuma decisão.


0

Bem, aqui está a mistura de alguns conteúdos do livro [Introdução a linguagens formais e autômatos, de Peter Linz 4E] e meu entendimento.

Considere um programa de jogo em que a máquina precisa tomar a decisão para a próxima jogada [digamos, tic-tac-toe]. Como existem vários movimentos possíveis, escolhemos cada movimento deterministicamente, avaliamos o movimento e optamos pelo melhor. Mesmo que o processo de seleção fosse determinístico e houvesse muitos movimentos possíveis, o movimento final realizado foi único e foi escolhido como o melhor movimento, ocultando todos os cálculos de movimentos testados do oponente. [Aqui assumimos que o processo de avaliação de cada movimento possível foi oculto ao oponente].

Portanto, apenas uma escolha foi feita e o oponente recebe uma ilusão de tal modo que o movimento não é determinístico.

Bem, se você ainda não está convencido de perguntar que a melhor jogada foi o produto de alguns cálculos determinísticos, você deve considerar a máquina que faz movimentos perfeitamente aleatórios (pode haver perda de máquina, mas é um NFA).


1
Outra maneira de colocar isso: para o oponente , sua escolha foi não determinística. Ao modelar o sistema da visão do oponente, sua jogada é uma escolha não determinística, a menos que o oponente tenha descoberto o processo determinístico por trás dele.
Reinierpost

@reinierpost exatamente o que eu queria dizer
Madhusoodan P

Um exemplo mais interessante pode ser um jogo de peças em movimento com informações limitadas (por exemplo, no estilo "policiais e ladrões"). Um jogador move um ladrão ao redor de um labirinto enquanto o outro jogador move policiais. A qualquer momento em que um policial puder ver um ladrão, o estado do ladrão será sua localização, mas, a qualquer momento, quando nenhum dos policiais o vir, o ladrão poderá fazer a transição para qualquer quadrado adjacente à sua posição e que os policiais possam vejo naquele momento.
Supercat

@supercat Agradável, mas a transição feita é sempre um estado único, e se você ocultar o cálculo da melhor jogada, parece não determinístico
Madhusoodan P
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.