Два приведенных вами примера — это регулярные выражения, и действительно существуют простые алгоритмические способы превращения регулярных выражений в автоматы, а именно NFA. Когда у вас есть NFA, вы можете превратить их в TM, используя простую конструкцию.
Алгоритм превращения регулярных выражений в NFA выглядит следующим образом:
Правило 1: Если r = a
для некоторого символа алфавита a, то NFA для r
:
a
--->q0--->(q1)
Правило 2. Если r = st
для регулярных выражений s, t
, а M1
и M2
являются NFA для s
и t
соответственно, то NFA для r
будет следующим:
e
--->M1--->M2
То есть начальным состоянием является состояние M1
, допускающими состояниями являются состояния M2
, и есть новые пустые переходы из всех (ранее) допускающих состояний M1
в (ранее) начальное состояние M2
.
Правило 3: если r = s + t
для регулярных выражений s, t
, а M1
и M2
являются NFA для s
и t
соответственно, то NFA для r
будет следующим:
e
--->q0--->M1
| e
+--->M2
То есть начальным состоянием является новое состояние q0
, конечными состояниями являются состояния M1
и M2
, и добавляются два пустых перехода, ведущих из нового начального состояния в (ранее) начальные состояния M1
и M2
.
Правило 4: Если r = s*
для регулярного выражения s
, а M
является NFA для s
, то NFA для r
будет следующим:
+------+
| e |
V |
--->(q0)--->M
То есть добавляется новое начальное состояние q0
, состояния принятия — это состояния M
вместе с q0
, и добавляются новые пустые переходы из состояний принятия M
в q0
.
В ваших примерах мы получаем NFA следующим образом:
a: Rule 1 a
--->q0--->(q1)
b: Rule 1 b
--->q0--->(q1)
a*: Rule 4 +-------------+
| e |
V |
--->(q0)--->q0'--->(q1)
e a
b*: Rule 4 +-------------+
| e |
V |
--->(q0)--->q0'--->(q1)
e b
a*b*: Rule 2 +-----------+
| | e
V e a |
--->q0--->q0'--->q1
| |
e | | e
+-----------+--+
| | e
V e b |
(q2)--->q2'--->(q3)
a*b*: Rule 2 +-----------+
| | e
V e a |
--->q0--->q0'--->q1
| |
e | | e
+-----------+
| | e
V e b |
q2--->q3'--->q3
| |
e | | e
+-----------+--+
| | e
V e a |
(q4)--->q5'--->(q5)
Имея на руках NFA, TM можно построить следующим образом:
- Те же состояния, что и NFA
- Переходы, потребляющие ввод, перемещают головку ленты вправо.
- Пустые переходы вообще не двигают головку ленты.
- ТМ никогда не перезаписывает свой ввод.
- Когда TM встречает пустое место после достаточно далекого перемещения вправо, он переходит в состояние останова-принятия, если он находится в состоянии принятия для DFA, или в остановке-отклонении в противном случае.
person
Patrick87
schedule
13.10.2017