Autômatos de estados finitos: estados finais


8

Em nosso curso de conceitos de linguagem de programação, nosso instrutor afirmou que não há problema em um estado final levar a outro estado em um diagrama de estados finitos.

Mas esse parece ser um conceito fundamentalmente contraditório. Como um estado final, por definição, é aquele que termina as transições, ou seja, quando você o alcança, não há mais nada a fazer.

E, no entanto, ele apresentou um slide como este, onde os estados finais são representados por dois círculos ... Como é possível que B, D, E e H sejam estados finais quando claramente não são?

insira a descrição da imagem aqui


"Depois de alcançá-lo, não há mais nada a fazer." Somente se você consumiu toda a entrada e considerou qualquer transição epsilon.
Andrea Lazzarotto

Respostas:


17

Você parece ter um mal-entendido entre modelos generativos e modelos "reconhecendo".

A gramática que você tem à direita gera palavras aplicando regras, iniciando na variável inicial e interrompendo depois que não houver mais variáveis.

Os autômatos, no entanto, reconhecem um idioma da seguinte maneira: você alimenta o autômato uma palavra, letra por letra, e o autômato realiza transições com base nas letras dadas a ele.

Se, depois de ler todas as letras, o autômato terminar em um estado de aceitação (aka final), então dizemos que o autômato aceita a palavra.

Portanto, é melhor pensar neles como estados "aceitos", em vez de estados "finais", embora ambos os termos sejam comumente usados.


Eu concordo muito Meu livro também os chamava de estados "finais" e isso me confundiu até eu começar a me forçar a chamá-los de "estados aceitos" haha.
Seankala 4/06

Engraçado, nunca vi conscientemente o termo “estado final” antes, sempre os vi chamar “estado de aceitação” - e, como essa resposta explica, “estado final” é indiscutivelmente errado.
Konrad Rudolph

7

um estado final, por definição, é aquele que termina as transições, ou seja, quando você o alcança, não há mais nada a fazer.

A fonte da sua confusão é que essa não é a definição. "Estado final" é uma má escolha de nome, e a maioria dos autores parece preferir "estado de aceitação". A definição é que o autômato aceita se sua execução termina em um estado final / de aceitação e rejeita o contrário.


7

Na verdade, é confuso! Para resolver seu problema, chame-os de estados "aceitos" em vez de "finais". Porque é isso que eles realmente são, apenas um marcador que nos diz que, neste momento, a cadeia processada pertence ao idioma.


3

"um estado final por definição é aquele que termina as transições, ou seja, que quando você o alcança, não há mais nada a fazer."

Na convenção tradicional de trabalhar com aceitadores (ou seja, autômatos de estados finitos que informam se uma determinada string pertence / não pertence a um idioma), um estado final é aquele que, quando alcançado com uma string vazia (a entrada era consumido inteiramente) significa que a cadeia inicial é aceita, ou seja, faz parte do idioma do autômato.


3

Como você pode ver. A gramática dada diz A -> a. Portanto, o automaom aceita terminar na string "a". Mas também permite A -> aB -> abD -> abc, então a string "abc" também é aceita. Se terminarmos a string nesse ponto, estaremos em um estado final e, portanto, a string foi aceita. Mas ainda podemos querer que a string "ab" seja aceita. Portanto, precisamos garantir que {"a", "ab", "abc"} sejam todos aceitos pelo autômato. Não veja os estados finais como um estado tal que, se o inserirmos, talvez nunca o abandonemos, veja-o como um estado para nos dizer se nossa string atual é aceita ou não.

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.