Convertendo um NFA em regex usando o algoritmo GNFA?


7

Então, eu tenho tentado resolver isso por um longo tempo e quase sinto que estou dando voltas sobre essa questão.

Dado o seguinte NFA:

insira a descrição da imagem aqui

Usando o algoritmo GNFA, obtenha a expressão regular.

Entendo que você teria o seguinte para a primeira etapa (adicionando estados vazios): insira a descrição da imagem aqui

O próximo passo seria remover o estado [q1] que eu obteria: insira a descrição da imagem aqui

Por fim, remover [q2] obteria: insira a descrição da imagem aqui

No entanto, as respostas que outras pessoas obtiveram são: (umabbuma)bb O que não faz sentido como eu entendi, umab(bumaumab)? Um GNFA (autômato finito não determinístico generalizado) é descrito da seguinte maneira:

Um GNFA é semelhante a um NFA, mas deve obedecer a certas regras:

  • Tem apenas um estado de aceitação
  • O estado inicial não possui transições.
  • O estado de aceitação não tem transições saindo dele
  • Uma transição pode denotar qualquer expressão regular, em vez de apenas um símbolo do alfabeto Observe que um símbolo é um tipo de expressão regular.

Além disso, podemos converter um NFA em um GNFA da seguinte maneira:

  • Adicione um novo estado inicial com uma transição ε para o antigo estado inicial
  • Adicione um novo estado de aceitação com transições ε dos antigos estados de aceitação
  • Se as setas tiverem vários rótulos ou se houver várias setas entre dois estados, substitua-as pela união (ou) desses rótulos

@ Jeff, ele é chamado um autômato finito não determinístico generalizada (GNFA)
Anish B

Dica: qual idioma o seu DFA realmente aceita? Você deve descobrir uma descrição em inglês do idioma aceito apenas consultando o DFA. Agora, qual das duas expressões regulares(uma+bbuma)bb e umab(b+umaumab)descrever corretamente esse idioma?
10113 JeffE

@JeffE Além disso, concordo que um faz mais sentido do que o outro, no entanto, ao usar o algoritmo GNFA, normalmente não é o mesmo que lê-lo em uma descrição em inglês, daí a minha confusão.
Anish B

11
Eu nunca disse "um faz mais sentido que o outro". Estou sugerindo que você resolva o problema com base nos primeiros princípios, usando seu cérebro em vez do algoritmo GNFA e verifique qual das duas expressões regulares está correta. (Nota: eu fiz não escrever "qual das duas expressões regulares é correto.")
Jeffe

11
Veja também nossa pergunta de referência para obter mais técnicas, todas elas produzindo resultados diferentes (ainda corretos).
Raphael

Respostas:


8

Você quer saber por que "os outros" obtiveram uma expressão diferente?

Ao contruir uma expressão regular, não há resposta correta exclusiva. Geralmente existem várias expressões "que fazem sentido". Nesse caso, você usa o método de eliminação de estado (eu aprendi isso com o nome de Brzozowski e McCluskey). Aqui, a ordem de remoção determina a expressão encontrada. Então: o que você ganha ao removerq2 primeiro?

Você também pode fazer "truques inteligentes" durante a construção. No seu exemplo você tembumaumab que é equivalente a umab.


+1 para b U aa*b = a*be o nome Brzozowski e McCluskey
Maha
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.