Построение недетерминированных конечных автоматов - PullRequest
0 голосов
/ 26 сентября 2018

Такое ощущение, что это должно быть проще, чем есть, но у меня проблема с этим.Вот что спрашивается:

Создайте NFA для следующего языка L = {ab, ba} *.Итак, я понимаю, что у меня может быть любая комбинация ab или ba в строке, но мне нужно мертвое состояние, если, скажем, я получаю два a подряд или оно просто начинается заново?Вот два графика, которые у меня есть: g1 g2

Являются ли эти из них правильными?И поскольку они являются NFA против DFA, нужно ли где-нибудь здесь лямбда-ребро?

Редактировать: Правильно ли будет этот третий, потому что мне нужны два конечных состояния?g3

1 Ответ

0 голосов
/ 10 октября 2018

Если вы делаете NFA, вам не нужны мертвые состояния;Вы можете просто позволить NFA потерпеть крах.DFA, вероятно, действительно нужны мертвые состояния для полноты, в зависимости от ваших определений.

Вот NFA (q0 - исходное состояние и единственное принимающее состояние):

         b
      +------+
      |      |
      V  a   |    
  +->q0 ---> q1
  |   |
a |   | b
  |   V
  +--q2

Чтобы сделатьэто DFA, вы можете добавить мертвое состояние q3 и сделать все переходы, не определенные выше, прекратить в q3.

...