Podemos dizer que o DFA é mais eficiente que o NFA?


13

Comecei a ler sobre teoria da computação. Se compararmos o que é mais poderoso (na aceitação de strings), ambos são iguais. Mas e quanto à eficiência? O DFA será rápido em comparação com o NFA, pois possui apenas uma borda de saída e não haverá ambiguidade. Mas no caso da NFA, temos que verificar todos os casos possíveis e isso certamente leva tempo. Então, podemos dizer que o DFA é mais eficiente que o NFA?

Mas, minha outra parte do cérebro também pensa que a NFA existe apenas em teoria, portanto não podemos comparar sua eficiência com a DFA.

Respostas:


16

Existem duas respostas, dependendo de como você define eficiente.

Compacidade de representação

Dizendo mais com menos : os NFAs são mais eficientes.

A conversão de um DFA em um NFA é simples e não aumenta o tamanho da representação.

No entanto, existem idiomas regulares para os quais o menor DFA é exponencialmente maior que o menor NFA. Um exemplo típico é para k fixo.(a|b)b(a|b)kk

Computação

Executando rápido : os DFAs são mais eficientes.

Os computadores que usamos hoje são de natureza determinística. Isso os torna ruins em lidar com o não-determinismo. Há duas maneiras comuns de lidar de maneira determinística com as NFAs: voltar atrás de um lado, o que é bastante caro, ou acompanhar os estados ativos, o que significa que cada transição levará até vezes mais (onde N é o tamanho do NFA) .NN


Em relação à compactação, os NFA nem sempre são mais eficientes! É verdade que existem idiomas para os quais o DFA mínimo é exponencialmente maior que o NFA mais compacto, mas qual é a fração desses idiomas no conjunto de todos os idiomas?
Saadtaame

2
@ saadtaame Pode parecer estranho, mas no sentido mais estrito, os NFAs não precisam ser não determinísticos. Os DFAs são um tipo especial de NFA, ou seja, NFAs com um singleton como conjunto inicial e a função de transição é tal que apenas um estado está ativo a qualquer momento.
Khaur

2
-1 "aumentando seu tamanho (potencialmente muito)". Simular conjuntos de estados NFA mantendo uma lista vinculada custa espaço no máximo no número de estados NFA. O DFA equivalente, por outro lado, pode ter estados O ( 2 N ) . O(N)O(2N)
Wandering Logic

@WanderingLogic Você está certo, a conversão não precisa ser explícita (você ainda está usando o DFA equivalente, mas não de forma extensa). No entanto, o ponto principal ainda permanece, pois isso requer vezes mais tempo de computação do que executar um DFA do mesmo tamanho . Corrigirei o último parágrafo para explicar isso. O(N)
Khaur

Obrigado por esta resposta, porque argumentei em minha pesquisa que os NFAs são melhores para avaliação e agora vejo que o ponto é mais sutil. No geral, os NFAs são definitivamente melhores para uma linguagem fixa, porque qualquer algoritmo de avaliação inteligente do NFA corresponderá à complexidade da avaliação do DFA no caso especial em que o NFA é um DFA e porque o NFA pode ser mais sucinto. No entanto, se a escolha for entre produzir um NFA altamente não determinístico ou encontrar uma maneira inteligente de obter um DFA do mesmo tamanho , para alguma aplicação específica, o DFA é melhor.
6005

4

Em termos de potência, eles são equivalentes, como você disse, e existe um algoritmo (construção de subconjunto) para converter um NFA em um DFA equivalente. Como você pode dizer pelo nome do algoritmo, ele constrói subconjuntos de estados do NFA. Se o seu NFA possui estados, o algoritmo pode gerar um DFA comn estados, mas esse é um limite superior. Às vezes, o número de estados não muda nem reduz. Portanto, na prática, importa menos sobre qual deles usar.2n

A correspondência do DFA é linear no tamanho da sequência de entrada. A correspondência NFA envolve retroceder para que os NFAs trabalhem mais. Assim, os DFAs são mais eficientes.


Mas podemos dizer que o DFA é mais eficiente?
avi

1
@avi editei a pergunta! E, a propósito, de NFA não existem na única teoria: verificar isso: swtch.com/~rsc/regexp/regexp1.html
saadtaame

@avi O problema aqui é que o DFA que é equivalente ao NFA (muitas vezes) será muito maior. Portanto, mesmo que você possa verificar o DFA muito mais rapidamente, normalmente precisará verificar um DFA maior.
Peter

@ Peter, que o DFA é maior não importa: significa apenas que a matriz que fornece a função de transição é maior.
21133 vonbrand

1
@ Khaur, é verdade. Mas se você se deparar com esse tipo de problema, terá um DFA enorme.
vonbrand

2

Apenas adicionando às respostas acima:

Os NFAs podem ser computacionalmente mais eficientes que os DFAs, no sentido de que podem ser simulados em um processador paralelo.

BTW: Vejo pessoas dizendo que os NFAs não podem existir na realidade. Eu peço desculpa mas não concordo. Um computador com um grande número de processadores pode executar muitas tarefas em paralelo e pode ser considerado como uma máquina não determinística. Pode-se atribuir cada ramo da computação a um novo processador e interromper todos eles sempre que um deles aceitar.


1
Na realidade, nem os DFAs nem os NFAs existem, ambos são apenas relações matemáticas e podem ser simulados por algoritmos.
jmite

1

ϵ


ϵ

1
ϵ

mas o DFA não está livre de transições ϵ?
AVI

@avi, sim. Sinta-se à vontade para editar a resposta se ela não estiver clara.
vonbrand 02/02

não, estou perguntando a você. Eu não tenho certeza sobre isso também
avi

1

Como outros observaram, você precisa definir o que significa "eficiência". Para ilustrar isso, dou um modelo razoável com uma resposta diferente.

Procurando apenas o (s) modelo (s) de autômatos, que estão ignorando em particular como você os implementaria em máquinas reais, a medida de eficiência óbvia é "número de transições realizadas em uma execução (mais curta) de aceitação".

ε


1

Tecnicamente falando, um NFA é um conceito mais geral que um DFA, pois não é necessário usar o não-determinismo. Em outras palavras: todo DFA é um NFA. Nessa perspectiva, existe para todos os idiomas um NFA que seja pelo menos tão eficiente quanto o DFA mais eficiente, para qualquer medida de eficiência que você preferir.

Fora isso, eu concordo com Raphael que depende muito do que você quer dizer com eficiência e na implementação.


-4

Como sabemos sobre o Automata, isto é, uma máquina que pode executar qualquer ação sem qualquer poder humano ou sem a participação direta do homem. por exemplo: máquina de lavar. Autômatos finitos significa que sabemos o estado de execução de tarefas por máquina, como 1 pressionar ON 2 pressionar OFF, portanto, existem apenas 2 estados, ou seja, chamados autômatos finitos. Agora venha para o DFA, isto é, autômatos finitos determinísticos. formalmente significa que podemos determinar facilmente estados em que não há ambiguidade e informalmente ele precisa de apenas 1 transição permitida em 1 símbolo. AFN: autômatos finitos não determinísticos. é necessário mais tempo para calcular o estado real e existe ambiguidade e informa informalmente que há várias transições permitidas em um símbolo. no caso de tempo para chegar ao destino, o NFA leva mais tempo que o DFA, mas pode carregar mais dados que o DFA. * O DFA e o NFA têm o mesmo poder de reconhecer a sequência. obrigado .. Deepali kaushik


1
Autômatos finitos não têm nada a ver com máquinas de lavar.
David Richerby

2
@DavidRicherby. Talvez a frase "absolutamente nada" seja um pouco forte. Afinal, poderíamos dizer que uma máquina de lavar possui estados prontos , lavados , enxaguados e centrifugados com transições apropriadas entre os estados. Uma metáfora melhor, no entanto, seria uma máquina de venda automática de refrigerante operada por moedas.
Rick Decker

1
@ RickDecker concordou, mas gastar tempo discutindo a pequena relevância seria um exemplo do que a Wikipedia chama de " peso indevido ". E, de qualquer forma, a parte da resposta da qual estou falando é discutir autômatos como máquinas auto-alimentadas, não como dispositivos computacionais.
David Richerby

1
Eu não acho que essa resposta acrescente algo interessante à pergunta. Em particular, você não tem certeza sobre sua medida de eficiência e parece misturar várias preocupações.
Raphael

Outras respostas quase esgotam tudo o que é dito e, infelizmente, sua resposta é um pouco confusa.
Mal
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.