Модуль: Вопрос 12. Машина Тьюринга


МТ - однофазные программы


Войдите на сайт, чтобы ответы сохранялись и баллы за тетрадь засчитывались.

Одна фаза — один проход

Самые простые программы номера 12 состоят из двух состояний.

Первое заводит головку на край. Второе делает всю работу за один проход.

Сквозное число этого урока — 88. В двоичной записи это 1011000. Оно будет проходить через все программы урока.


Разбор: программа вычитания единицы
  λ 0 1
q0 λ, L, q1    
q1 λ, S, q1 1, L, q1 0, S, q1

Головка стоит справа от записи, на пустой клетке. Команда λ, L, q1 заводит её на младший разряд.

Дальше в q1 всего два правила:

  • увидела 0 — записала 1, поехала влево;
  • увидела 1 — записала 0 и встала.

Это заём при вычитании: хвостовые нули становятся единицами, ближайшая единица — нулём. При исходном положении головки в конце записи числа, происходит вычитание единицы.

Микропаттерн: 0→1,L и 1→0,S = вычесть единицу.

1011000 — вычитание единицы за 5 шаговстарт1011000шаг 11011000шаг 21011001шаг 31011011шаг 41011111шаг 51010111

На ленте 1010111, то есть 87. Проверка: 88 − 1 = 87.


Та же таблица, одна буква иначе

Теперь смотри внимательно. Меняем в клетке для единицы S на L:

  λ 0 1
q0 λ, L, q1    
q1 λ, S, q1 1, L, q1 0, L, q1

Головка больше не останавливается на первой единице. Она едет дальше и переворачивает каждый бит до конца ленты.

Было вычитание. Стала инверсия.

Сравнение двух программq1: 1 → 0, S, q1q1: 1 → 0, S, q1останов на первой единице1011000↓1010111q1: 1 → 0, L, q1идёт дальше до конца ленты1011000↓0100111

Из 1011000 получается 0100111 — это 39, а вовсе не 87.

Микропаттерн: ищи, где стоит S. Она отделяет «остановись на первом попавшемся» от «пройди всё».


Ведущий ноль: куда девается разряд

Исходная запись начинается с единицы — так устроена запись без ведущих нулей.

После инверсии на первом месте оказывается ноль. Лента 0100111 как число читается без него: 100111 = 39.

Поэтому «что записано на ленте» и «какое число на ленте» — разные вопросы. Перечитывай, о чём спросили.

Микропаттерн: инверсия всегда рождает ведущий ноль.


Проверь себя


Программа для МТ

  λ 0 1
q0 λ, L, q1    
q1 λ, S, q1 1, L, q1 0, L, q1

Что делает эта программа?


Программа для МТ

  λ 0 1
q0 λ, L, q1    
q1 λ, S, q1 1, L, q1 0, S, q1

На ленте записано 1011000, головка справа. Что окажется на ленте после остановки? Запиши последовательность символов без пробелов.


На ленте двоичная запись числа 375, головка справа.
Программа:

  λ 0 1
q0 λ, L, q1    
q1 λ, S, q1 1, L, q1 0, L, q1

Какое число окажется на ленте?


Программа МТ прибавления единицы выглядит так

  λ 0 1
q0 λ, L, q1    
q1 λ, S, q1 1, S, q1 0, L, q1

Головка стоит справа от записи. Отметь верное.


Что проверить перед ответом
  • Нашёл клетку с S? Записал ли символ из неё?
  • Спросили число или последовательность символов?
  • Если была инверсия — отбросил ли ведущий ноль при переводе в десятичную?