Autômato Finito Não Determinístico
No NDFA, para um símbolo de entrada específico, a máquina pode se mover para qualquer combinação dos estados na máquina. Em outras palavras, o estado exato para o qual a máquina se move não pode ser determinado. Por isso, é chamadoNon-deterministic Automaton. Por possuir número finito de estados, a máquina é chamadaNon-deterministic Finite Machine ou Non-deterministic Finite Automaton.
Definição formal de um NDFA
Um NDFA pode ser representado por uma 5-tupla (Q, ∑, δ, q 0 , F) onde -
Q é um conjunto finito de estados.
∑ é um conjunto finito de símbolos chamados alfabetos.
δé a função de transição onde δ: Q × ∑ → 2 Q
(Aqui, o conjunto de potência de Q (2 Q ) foi tomado porque no caso de NDFA, de um estado, a transição pode ocorrer para qualquer combinação de estados Q)
q0é o estado inicial de onde qualquer entrada é processada (q 0 ∈ Q).
F é um conjunto de estados / estados finais de Q (F ⊆ Q).
Representação gráfica de um NDFA: (igual ao DFA)
Um NDFA é representado por dígrafos chamados de diagrama de estado.
- Os vértices representam os estados.
- Os arcos marcados com um alfabeto de entrada mostram as transições.
- O estado inicial é denotado por um único arco de entrada vazio.
- O estado final é indicado por círculos duplos.
Example
Seja um autômato finito não determinístico →
- Q = {a, b, c}
- ∑ = {0, 1}
- q 0 = {a}
- F = {c}
A função de transição δ conforme mostrado abaixo -
Estado atual | Próximo estado para a entrada 0 | Próximo estado para a entrada 1 |
---|---|---|
uma | a, b | b |
b | c | a, c |
c | b, c | c |
Sua representação gráfica seria a seguinte -
DFA vs NDFA
A tabela a seguir lista as diferenças entre DFA e NDFA.
DFA | NDFA |
---|---|
A transição de um estado é para um único próximo estado particular para cada símbolo de entrada. Por isso é chamado de determinístico . | A transição de um estado pode ser para vários próximos estados para cada símbolo de entrada. Por isso é chamado de não determinístico . |
Transições de string vazias não são vistas no DFA. | NDFA permite transições de string vazias. |
Retrocesso é permitido no DFA | No NDFA, o retrocesso nem sempre é possível. |
Requer mais espaço. | Requer menos espaço. |
Uma string é aceita por um DFA, se transita para um estado final. | Uma string é aceita por um NDFA, se pelo menos uma de todas as transições possíveis terminar em um estado final. |
Aceitadores, classificadores e transdutores
Aceitador (Reconhecedor)
Um autômato que calcula uma função booleana é chamado de acceptor. Todos os estados de um aceitador estão aceitando ou rejeitando as entradas fornecidas a ele.
Classificador
UMA classifier tem mais de dois estados finais e fornece uma única saída quando termina.
Transdutor
Um autômato que produz saídas com base na entrada atual e / ou estado anterior é chamado de transducer. Os transdutores podem ser de dois tipos -
Mealy Machine - A saída depende do estado atual e da entrada atual.
Moore Machine - A saída depende apenas do estado atual.
Aceitabilidade por DFA e NDFA
Uma string é aceita por um DFA / NDFA iff o DFA / NDFA começando no estado inicial termina em um estado de aceitação (qualquer um dos estados finais) depois de ler a string completamente.
Uma string S é aceita por um DFA / NDFA (Q, ∑, δ, q 0 , F), iff
δ*(q0, S) ∈ F
O idioma L aceito pelo DFA / NDFA é
{S | S ∈ ∑* and δ*(q0, S) ∈ F}
Uma string S ′ não é aceita por um DFA / NDFA (Q, ∑, δ, q 0 , F), iff
δ*(q0, S′) ∉ F
O idioma L ′ não aceito pelo DFA / NDFA (Complemento do idioma L aceito) é
{S | S ∈ ∑* and δ*(q0, S) ∉ F}
Example
Vamos considerar o DFA mostrado na Figura 1.3. A partir do DFA, as strings aceitáveis podem ser derivadas.
Strings aceitas pelo DFA acima: {0, 00, 11, 010, 101, ...........}
Strings não aceitos pelo DFA acima: {1, 011, 111, ........}