Если вам нужен недетерминированный конечный автомат c, вы можете использовать алгоритм, который выполняет преобразование на основе операций в регулярном выражении:
+
превращается в недетерминированный c ветвящиеся эпсилон-переходы - конкатенация превращается в последовательный переход из состояния в состояние
- Звезда Клини превращается в петли
Ваш NDA будет выглядеть примерно так:
a b
^ ^
q0--e-->q1--e-->q2
|
e
|
V
q4--e-->q5
v v
b a
Если вы хотите определить c конечный автомат, вы можете определить не определенный c, используя известный алгоритм. В противном случае мы можем запустить Myhill-Nerode в обратном порядке, чтобы найти классы эквивалентности по отношению неразличимости; это даст нам состояния минимального DFA.
- e может сопровождаться любой строкой в
L
, и на нашем языке; этот класс [e] соответствует начальному состоянию q 0 , которое принимает - a, за которым может следовать только a b ; a находится в языке, поэтому класс [a] соответствует принимающему состоянию q 1
- b, за которым может следовать только b a ; b на языке, поэтому класс [b] соответствует принимающему состоянию q 2
- ab, за которым может следовать только b *; [ab], q, принятие
- ba может сопровождаться только *; [ба], q 4 , принимая
- аба, баба не на языке и никогда не может быть исправлена; [aba], q 5 , не принимает
- все остальные строки длины 3 неотличимы от уже увиденных строк; мы закончили
Итак, есть DFA с 6 состояниями - 1 начальное (q 0 ), 5 принимающих и 1 мертвое (q 5 ) - который принимает язык. Вы можете выяснить переходы следующим образом: каждое состояние достигается после любой строки, которая принадлежит его классу эквивалентности. Обратите внимание, что мертвое состояние q 5 должно иметь две самопетли в качестве своих переходов.