logo
Elektronny_praktikum_po_MLTA_2014

3. Составьте программу машины Тьюринга, подсчитывающую число вхождений символа a в слово р в алфавите {a, b, c}.

Решение: пусть начальная конфигурация машины имеет вид q1P.

Надо перевести ее в конфигурацию q0nP, где n – двоичное число, выражающее число вхождений символа a в слово Р в алфавите {a, b, c}.

Внешний алфавит машины: А = {a, b, c, a, 0, 1, , }.

Внутренний алфавит машины: Q = {q0, q1, q2, q3, q4, q5, q6, q7}.

Опишем алгоритм решения задачи в словесной форме:

  1. Слева от слова Р приписываем символы 0 и .

  2. Находим в слове Р вхождение символа a, заменяем его на a, запоминаем, перемещаем головку влево, прибавляем 1 к двоичному числу n («счетчику»).

  3. Повторяем п. 2 до тех пор, пока не пройдем все слово P.

  4. Убираем все штрихи в слове Р.

  5. Устанавливаем головку машины под крайней левой цифрой двоичного числа n и останавливаем машину.

Программа работы машины имеет вид:

q1a q2aL

q1b q2bL

q1c q2cL

q2 q3L

q3 q40R

q40 q40R

q41 q41R

q4 q5R

q5b 5bR

q5c q5cR

q5aq5aR

q5a 6aH

q6b q6bL

q6c q6cL

q6a q6aL

q6 q6L

q60 q41R

q61 q60L

q6 q41L q5 q7L q7a q7aL

q7b q7bL

q7c q7cL

q7a q7aL

q7 q7L

q70 q70L

q71 q71L

q7 q0R