Um autômato finito não-determinístico é definido como uma 5-upla ordenada
na qual:
- é um Alfabeto de símbolos de entrada;
- é um conjunto finito de estados possíveis;
- é uma função de transição tal que , ou seja, é uma função que, dado um estado e um símbolo do alfabeto de entrada, produz um conjunto de estados;
- é um elemento de () denominado estado inicial;
- é um subconjunto de () denominado conjunto de estados finais.
A principal diferença desse tipo de autômato para um Autômato finito determinístico reside no fato de que a função de transição é não-determinística, ou seja, produz um conjunto de estados ao invés de apenas um estado individual.
A computação de um autômato finito não-determinístico para uma Palavra de entrada consiste na sucessiva aplicação da função de transição a cada Símbolo de até que todos os símbolos sejam processados ou enquanto a função de transição for definida para o conjunto de estados atual e símbolo processado. Como a cada aplicação da função de transição pode levar a mais de um estado, é necessário considerar todos os estados resultantes da aplicação anterior na aplicação seguinte, dessa forma é possível processar todas as possibilidades de estados alternativos. O processamento, de uma palavra por um autômato finito tem dois resultados possíveis:
- A palavra é aceita, e portanto faz parte da linguagem reconhecida por (), se e somente se, após processar o último símbolo de , existe pelo menos um estado final no conjunto de estados alternativos atingidos.
- A palavra é rejeitada, e portanto não faz parte da linguagem reconhecida por (), se em algum momento do processamento de a função de transição for indefinida para o conjunto de estados atual e símbolo corrente ou se, após processar o último símbolo da fita, todos os estados alternativos atingidos são não-finais.
Quando comparado a um autômato finito determinístico, o autômato finito não-determinístico não apresenta nenhuma melhoria de poder representacional. Na verdade, ambas as classes de autômatos são equivalentes, ou seja, dado um autômato finito não-determinístico, é possível obter um autômato finito determinístico equivalente e vice-versa. Apesar disso, muitas vezes é mais fácil desenvolver um autômato finito não-determinístico do que um determinístico. Dessa forma, por vezes é mais fácil desenvolver um autômato finito não-determinístico e então obter o autômato finito determinístico equivalente do que tentar obter diretamente o autômato finito determinístico.
A conversão de um autômato finito não-determinístico em um autômato finito determinístico consiste em transformar cada combinação de estados do autômato não-determinístico em um estado do autômato determinístico.
O seguinte autômato finito não-determinístico é capaz de reconhecer a linguagem
\begin{tikzpicture} [node distance = 3cm, on grid, auto] \node (q0) [state, initial, initial text = {}, initial where=left] {$q_0$}; \node (q1) [state, below left = of q0] {$q_1$}; \node (q2) [state, below right = of q0] {$q_2$}; \node (qf) [state, accepting, below right = of q1] {$q_f$}; \path [-stealth] (q0) edge[loop right] node {a,b} (q0) (q0) edge node[above left] {a} (q1) (q0) edge node {b} (q2) (q1) edge[] node[below left] {a} (qf) (q2) edge[] node {b} (qf) (qf) edge[loop below] node {a,b} (qf) \end{tikzpicture}