К содержанию

Подтема 5 из 6

Состояния и фазы

Таблицы из нескольких состояний: этапы работы, результат для любой длины и состояние как память.

Фазы работы

Что сделает таблица из четырёх состояний со словом 101?

Головка начинает в ближайшей пустой ячейке слева, в q0.

Когда состояний несколько, каждое из них — отдельная фаза работы. Назови, что машина делает в каждой фазе и чем фаза заканчивается, — и длинную трассу писать не придётся.

  1. Начало: q0, головка в клетке -1. Перед тактом 1: q0 читает λ в клетке -1 → записать λ, вправо, q1.
  2. Перед тактом 2: q1 читает 1 в клетке 0 → записать 1, вправо, q1.
  3. Перед тактом 3: q1 читает 0 в клетке 1 → записать 1, вправо, q1.
  4. Перед тактом 4: q1 читает 1 в клетке 2 → записать 1, вправо, q1.
  5. Перед тактом 5: q1 читает λ в клетке 3 → записать 0, влево, q2.
  6. Перед тактом 6: q2 читает 1 в клетке 2 → записать 1, влево, q2.
  7. Перед тактом 7: q2 читает 1 в клетке 1 → записать 1, влево, q2.
  8. Перед тактом 8: q2 читает 1 в клетке 0 → записать 1, влево, q2.
  9. Перед тактом 9: q2 читает λ в клетке -1 → записать 0, влево, q3.
  10. Перед тактом 10: q3 читает λ в клетке -2 → записать 1, стоп, q3.
  11. Остановка: на ленте 101110, тактов 10, головка на -2.
СостояниеЧто делаетЧем заканчивается
q0входит в словопервый сдвиг вправо
q1идёт вправо, все цифры → 1на λ справа пишет 0
q2идёт влево по единицамна λ слева пишет 0
q3пишет 1 ещё левееостановка

q1 повторяется много тактов подряд, но цикла нет: головка каждый раз в новой ячейке, и до края слова всё ближе. Каждая фаза конечна, машина остановится.

Результат для любой длины

Какое наибольшее число не больше 500 может получиться у этой таблицы?

Когда фазы названы, результат записывают для любой длины: здесь из слова длины k всегда получается 10, затем k единиц, затем 0. Цифры входа в первой фазе всё равно становятся единицами, поэтому результат зависит только от длины.

Вход длины 3 и результат: слева дописано 10, три цифры стали единицами, справа дописан 0.
Вручную

k = 1 — 1010 = 10, k = 2 — 22, k = 3 — 46, …, k = 6 — 101111110 = 382, k = 7 — уже 766. Ответ 382. Тактов 2k + 4: вход, k цифр, запись справа, k единиц обратно, запись слева, остановка.

Python

Раз важна только длина, достаточно запустить по одному слову каждой длины ('1' * k — k единиц подряд) функцией run_tm из подтемы 1:

rules = {    ('q0', 'λ'): ('λ', 'R', 'q1'),    ('q1', 'λ'): ('0', 'L', 'q2'),    ('q1', '0'): ('1', 'R', 'q1'),    ('q1', '1'): ('1', 'R', 'q1'),    ('q2', 'λ'): ('0', 'L', 'q3'),    ('q2', '1'): ('1', 'L', 'q2'),    ('q3', 'λ'): ('1', 'S', 'q3'),}for k in range(1, 8):    result, pos, steps = run_tm('1' * k, rules, -1)    print(k, result, int(result, 2), steps)
1 1010 10 6 2 10110 22 8 3 101110 46 10 4 1011110 94 12 5 10111110 190 14 6 101111110 382 16 7 1011111110 766 18

Цифры на краях

Таблица проходит число вправо, не меняя цифр, пишет 1 справа, возвращается и пишет 1 слева. Что станет с числом 13?

Состояниеλ01
q0λ, R, q1——
q11, L, q20, R, q11, R, q1
q21, S, q20, L, q21, L, q2

Если цифры слова сохраняются, а на краях дописываются разряды, результат выражают через N и длину k, как в подтеме 3. Единица справа даёт 2N + 1, единица слева от слова длины k + 1 добавляет 2ᵏ⁺¹. Итог 2ᵏ⁺¹ + 2N + 1: 13 = 1101, k = 4, 32 + 27 = 59.

Состояние как память

Таблица ниже дописывает к слову одну цифру. Какую — для слова 1011? Головка начинает на первой цифре, в q0.

Состояниеλ01
q00, S, q00, R, q01, R, q1
q11, S, q10, R, q11, R, q0

Состояние может хранить свойство уже просмотренной части: здесь q0 — «единиц пока чётное число», q1 — «нечётное». Ноль состояние не меняет, единица переключает. На пустой ячейке машина пишет 0 при чётном числе единиц и 1 при нечётном. В 1011 три единицы: 10111.

Смысл состояния проверяют по командам, а не по названию: каждый ноль должен сохранять смысл, каждая единица — менять его на противоположный. Перебором слов () и функцией run_tm это легко проверить на коротких строках.

Итого

  • Фазачто делает состояние и чем заканчивается
  • Не циклто же состояние, но новая ячейка
  • Любая длина10, k единиц, 0: важна только k
  • Тактысумма тактов всех фаз: 2k + 4
  • Края2ᵏ⁺¹ + 2N + 1 для 1 слева и справа
  • Памятьсостояние хранит чётность и подобное

Проверьте себя

Ответь сначала сам, потом открой ответ.

Вопрос 1
Таблица из четырёх состояний получает слово длины 5. Какое число получится?
ОтветСкрыть ответ
Ответ
190: 10111110.
Вопрос 2
Сколько тактов она выполнит на слове длины 5?
ОтветСкрыть ответ
Ответ
14: 2k + 4.
Вопрос 3
Таблица чётности получает слово 110. Что будет на ленте?
ОтветСкрыть ответ
Ответ
1100: две единицы — чётно, дописан 0.
Вопрос 4
Таблица «единица справа и слева» получает число 21 = 10101. Какое число получится?
ОтветСкрыть ответ
Ответ
107: 2⁶ + 2 · 21 + 1 = 64 + 43.
Вопрос 5
Почему 10 тактов подряд в одном состоянии ещё не значат, что машина зациклилась?
ОтветСкрыть ответ
Ответ
Цикл — повтор всей картины: ленты, ячейки и состояния. При проходе головка каждый раз в новой ячейке.

Практика

Для проверки ответов нужен JavaScript. Условия, подсказки и решения доступны ниже.

Такты на слове длины 5

На ленте исполнителя МТ записано слово 10110, остальные ячейки пустые (λ). Головка — в ближайшей пустой ячейке слева от строки, состояние q0. Программа:

Состояниеλ01
q0λ, R, q1——
q10, L, q21, R, q11, R, q1
q20, L, q3—1, L, q2
q31, S, q3——

Сколько тактов выполнит исполнитель, включая такт с остановкой?

Введите число.

Наибольший результат не больше 500

На ленте исполнителя МТ записана непустая строка из нулей и единиц, остальные ячейки пустые (λ). Головка — в ближайшей пустой ячейке слева от строки, состояние q0. Программа:

Состояниеλ01
q0λ, R, q1——
q10, L, q21, R, q11, R, q1
q20, L, q3—1, L, q2
q31, S, q3——

Какое наибольшее число, не превышающее 500, может получиться на ленте (в двоичной записи)? Ответ запиши в десятичной системе.

Введите число.

На ленте исполнителя МТ в соседних ячейках записано двоичное представление числа 2027 без ведущих нулей, остальные ячейки пустые (λ). Головка — в ближайшей пустой ячейке слева от строки, состояние q0. Программа:

Состояниеλ01
q0λ, R, q1——
q10, L, q21, R, q11, R, q1
q20, L, q3—1, L, q2
q31, S, q3——

Определи результат выполнения программы. В ответе запиши получившееся число в десятичной системе счисления.

Введите число.

Единицы слева и справа

На ленте исполнителя МТ в соседних ячейках записано двоичное представление числа 13 без ведущих нулей, остальные ячейки пустые (λ). Головка — в ближайшей пустой ячейке слева от строки, состояние q0. Программа:

Состояниеλ01
q0λ, R, q1——
q11, L, q20, R, q11, R, q1
q21, S, q20, L, q21, L, q2

Определи результат выполнения программы. В ответе запиши получившееся число в десятичной системе счисления.

Введите число.

Наименьшее N: больше 1000

На ленте исполнителя МТ в соседних ячейках записано двоичное представление натурального числа N без ведущих нулей, остальные ячейки пустые (λ). Головка — в ближайшей пустой ячейке слева от строки, состояние q0. Программа:

Состояниеλ01
q0λ, R, q1——
q11, L, q20, R, q11, R, q1
q21, S, q20, L, q21, L, q2

Определи наименьшее N, при котором результат работы программы в десятичной записи больше 1000.

Введите число.

Чётность слова 110

На ленте исполнителя МТ записано слово 110, остальные ячейки пустые (λ). Головка — на первой цифре слова, состояние q0. Программа:

Состояниеλ01
q00, S, q00, R, q01, R, q1
q11, S, q10, R, q11, R, q0

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

Введите слово — цифры подряд, без пробелов.

Чётность слова 100110

На ленте исполнителя МТ записано слово 100110, остальные ячейки пустые (λ). Головка — на первой цифре слова, состояние q0. Программа:

Состояниеλ01
q00, S, q00, R, q01, R, q1
q11, S, q10, R, q11, R, q0

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

Введите слово — цифры подряд, без пробелов.