Se não, então o que significa quando, para algum estado e algum símbolo , não existe?
Se não, então o que significa quando, para algum estado e algum símbolo , não existe?
Respostas:
Você parece ter tropeçado em uma questão controversa. Aparentemente, os cientistas da computação gostam de discutir. Eu certamente gosto de discutir, então aqui vai!
Minha resposta é inequívoca: não. Um autômato finito determinístico não precisa de uma transição de cada estado para cada símbolo. O significado quando não existe é simplesmente que o DFA não aceita a sequência de entrada.
Embora você possa criar uma definição de DFA que exija que exista, simplesmente não é o caso de uma transição ausente tornar a estrutura resultante (como você chama) de qualquer maneira não-determinística, como muitos dos comentaristas são reivindicando. Se você estiver fazendo um curso sobre teoria de autômatos, o próximo tópico será sobre linguagens livres de contexto e autômatos push-down, onde a distinção entre autômatos não determinísticos e determinísticos é crítica e é necessário usar a definição correta de não determinismo.
O não determinismo está associado a ter mais de uma transição legal.
Acho que todos concordamos com a seguinte definição da Wikipedia (que mostrarei em apenas um segundo é um pouco ambígua):
Um autômato finito determinístico é uma tupla de 5, ( , , , , ), consistindo de
Seja uma string sobre o alfabeto . O autômato aceita a sequência se uma sequência de estados, , existe em com as seguintes condições:
A ambiguidade e a controvérsia são sobre a definição da função de transição, (número "3" na primeira lista com marcadores.) Todos concordamos que o que diferencia um DFA de um NFA é que é uma função e não uma relação . Mas é uma função parcial ou uma função total ?
A definição do DFA funciona bem se é uma função parcial. Dada uma cadeia de entrada, se você chegar a um estado com um símbolo de entrada onde não há próximo estado, em seguida, os autômatos simplesmente não aceita.
Além disso, quando você estende essa definição para criar a definição de autômatos push-down, é necessário fazer a distinção de que autômatos push-down com funções de transição que são funções parciais são classificados como determinísticos, não não determinísticos.
Se a função parcial o incomoda, então aqui está uma transformação trivial que torna uma função total. (Essa transformação não é como o algoritmo de construção de subconjunto, ela adiciona no máximo O (1) estados, é linear no número original de estados e pode ser estendida para trabalhar com PDAs. Nenhum desses fatos é verdadeiro no algoritmo de construção de subconjunto .)
Esse autômato possui um que é uma função total e aceita e rejeita exatamente o mesmo conjunto de estados que seus autômatos originais aceitaram e rejeitaram.
O comentarista @Alex Smart me critica com razão por não fornecer referências nem explicar por que devemos nos importar. Então aqui vai:
A razão pela qual nos preocupamos com a definição exata de determinismo versus não determinismo é que algumas classes de autômatos não determinísticos são mais poderosos que seus primos deterministas, e algumas classes de autômatos não determinísticos não são mais poderosos que seus primos deterministas. Para autômatos finitos e máquinas de Turing, as variantes determinísticas e não determinísticas têm potência equivalente. Para autômatos de empilhamento, há idiomas em que a distinção é importante: há NPDA que aceita o idioma e nenhum DPDA aceita o idioma. Para os autômatos com limites lineares, a pergunta está (ou foi a última vez que verifiquei) aberta. O aumento do poder do NPDA sobre o DPDA vem da permissão de múltiplos transições, não de transformar a função de transição de uma função total para uma função parcial.
Livros da comunidade de compiladores:
Aho e Ullman, Principles of Compiler Design , 1977: Primeiro define NFA (página 88) com uma relação de transição e, em seguida (p. 90-91):
Dizemos que um autômato finito é determinístico se 1. Ele não possui transições na entrada . 2. Para cada estado e símbolo de entrada , existe no máximo uma aresta rotulada saída .
Aho, Sethi e Ullman, Compiladores, princípios, técnicas e ferramentas , reimpressão de 1988, é semelhante, ele primeiro define a NFA com uma relação de transição e depois (p. 115-116):
Um autômato finito determinístico (DFA, para abreviar) é um caso especial de um autômato financeiro não determinístico no qual ... há no máximo uma aresta rotulada saída .
(Observe que nos comentários @Alex Smart diz: "o dragão menciona especificamente que a função é total". Suponho que ele esteja falando sobre a edição posterior com o co-autor Lam, ao qual não tenho acesso no momento. )
Appel, Modern Compiler Implementation in Java , 1988 (p. 22):
Em um determinista autômato finito (DFA), há duas arestas saindo do mesmo estado são rotulados com o mesmo símbolo.
Appel continua explicando que, ao usar o DFA para reconhecer as correspondências mais longas, usamos explicitamente as transições ausentes para decidir quando parar (p. 23):
quando um estado morto (um estado não final sem transições de saída) é atingido, as variáveis [que registram a correspondência mais longa que vimos até agora] informam qual token foi correspondido e onde terminou.
Livros da comunidade da teoria da mudança:
Kohavi, Switching e teoria finita de autômatos, 2 / e , 1978, p. 611 diz:
Como um diagrama de estados descreve uma máquina determinística , a próxima transição de estado deve ser determinada exclusivamente pelo estado atual e pelo símbolo de entrada digitalizado no momento.
Eu normalmente interpretaria exclusivamente como "exatamente um", não "não mais que um". (Ou seja, Kohavi parece estar dizendo que o determinismo requer uma função total)
Livros da comunidade da teoria da computação:
Aqui parece ser mais comum definir DFAs antes de NFAs e exigir que DFAs tenham uma função de transição total, mas depois defina NPDAs antes de DPDAs e defina "determinismo" como sendo uma restrição da relação de transição para não ter mais do que Uma entrada para cada par de estado / símbolo.
Isso é verdade para Hopcroft e Ullman, 1979, Lewis e Papadimitriou, 1981 e, especialmente para Sipser, 2006, que usa a definição de DFA pedagogicamente para introduzir definições formais precisas, explicar sua importância e explicitamente diz (p.36):
a função de transição, , especifica exatamente um próximo estado para cada combinação possível de um estado e um símbolo de entrada.
Isso parece acompanhar o desenvolvimento histórico. Autômatos finitos determinísticos foram introduzidos nos anos 40 e 50. Autômatos finitos não determinísticos foram introduzidos no artigo por Rabin e Scott, "Autômatos finitos e seus problemas de decisão, IBM J. Rsrch e Dvpt , 3 (2): 114-125, 1959. Seguindo autores anteriores, Rabin e Scott definem determinística autômatos finitos (que eles chamam de autômatos comuns ) como tendo uma função de transição "definida no produto cartesiano de todos os pares de estados e símbolos" (que eu interpretaria como significando uma função total).
Curiosamente, Rabin e Scott também definem autômatos finitos não determinísticos em termos de uma função total! Página 120, Definição 9:
Ou seja: a função de transição sendo total não torna o sistema determinístico!
Sipser 2006 segue Rabin e Scott e usa uma função de transição total de estados / símbolos para o conjunto de estados de poder para suas definições de autômatos finitos não determinísticos, PDA não determinístico e Máquinas de Turing não determinísticas, mas ignora o tópico determinístico PDA.
Hopcroft e Ullman, 1979, e Lewis e Papadimitriou, 1981 usam funções parciais em suas definições de PDAs determinísticas. Primeiro, eles definem os NPDAs com uma relação de transição e, quando chegam aos PDAs, Lewis e Papadimitriou dizem (p. 135):
Um autômato de empilhamento é determinístico , falando intuitivamente, se houver no máximo uma transição aplicável a cada configuração.
Enquanto Hopcroft e Ullman dizem (p. 112):
O PDA ... é determinístico no sentido de que no máximo um movimento é possível a partir de qualquer ID.
Em termos de computabilidade, os NFAs são equivalentes aos DFAs - existe um algoritmo para converter de um NFA para um DFA, e um DFA é apenas trivialmente um NFA que não usa nenhum não-determinismo; portanto, ambos definem o conjunto de linguagens regulares.
Existem definições de DFA ao longo das linhas de
Nesse caso, você não precisa de todas as transições. Se o autômato não tiver uma transição ajustando o próximo símbolo de entrada, ele será rejeitado.
É um bom exercício mostrar que ambas as definições são equivalentes em termos de quais idiomas podem ser aceitos.
Na definição do DFA, todos os estados devem ter todo o alfabeto em £. Por exemplo, se £ = {a, b, c} e Q = {q0, q1, q2}, todos esses estados devem ter todos os símbolos a, b, c que mudam para outro estado ou mesmo estado.