Нам нужно отслеживать, видели ли мы подстроки ba, и если мы видим все это, убедитесь, что мы не находимся в состоянии принятия в то время.
----->(q0)--b-->(q1)--a-->(q2)
Здесь, (q0) принимает, (q1) принимает и (q2) не принимает.(q0) соответствует отсутствию части строки ba, состоянию (q1) - увидению первого символа и (q2) - просмотру всего этого.Следовательно, отсутствующие переходы должны быть:
- q0 к q0 для символа a, так как, если мы еще не начали видеть ba, a не поможет;нам потребовалось ab
- q1 до q1 для символа b, поскольку, если мы видим b, мы всегда по крайней мере видели первый символ в ba
- q2 до q0 по символу a и до q1 по символу bПо указанным выше причинам.
Весь DFA выглядит так:
/--|--b----\
b | |
| V |
----->(q0)--b-->(q1)--a-->(q2)
| ^ |
a | |
\--|-----------------/