Машина Тьюринга для вычисления суммы 2 двоичных чисел - PullRequest
2 голосов
/ 25 января 2020

Как я могу построить машину Тьюринга для вычисления суммы двух двоичных чисел, заданных X$Y* для ввода?

Например, предположим, X = 3 и Y = 5. Вход для машины будет #011$101*#. Состояние в конце должно быть #1000#.

Можно предположить, что X и Y имеют одинаковую длину битов.

1 Ответ

1 голос
/ 26 января 2020

Вам необходимо реализовать полный сумматор . Этот вопрос, вероятно, домашнее задание, поэтому я предоставлю общий обзор. Машина Тьюринга M имеет особые состояния Q(xyc), где x,y ∈ {0,1,U} и c ∈ {0,1}. Состояние Q(xyc) означает, что i th бит X равен x, i th бит Y равен y, а перенос - c. Символ U означает, что бит i th соответствующих входов неизвестен. Состояния Q(Uyc), где y ∈ {0,1} недопустимы, потому что i th бит X известен, если известен i th бит Y. Алгоритм выглядит примерно так:

  1. Начальное состояние M равно Q(UU0).
  2. Предположим, что i th битов X и Y добавляются, и перенос составляет c. Тогда M находится в состоянии Q(UUc). Если i больше, чем число битов в X и Y, перейдите к шагу (6). Поскольку младшие значащие входные биты перезаписываются на этапах (3) и (4), это условие легко обнаружить.
  3. Найти младший значащий бит x из X, перезаписать x с помощью $ и переход в состояние Q(xUc).
  4. Найти младший значащий бит y из Y, перезаписать y с помощью * и перейти в состояние Q(xyc).
  5. Запишите соответствующую сумму в конце ленты, перейдите в состояние Q(UUd), где d - новый перенос, и перейдите к шагу (2). Эти значения задаются таблицей истинности в приведенной выше ссылке.
  6. Если c = 1, напишите c в конце ленты.
  7. Скопируйте обратную сторону вычисленного значения в начало ленты. Очистите оставшуюся ленту.

Обратите внимание, что вывод построен в обратном порядке и, следовательно, должен быть обращен на шаге (7). Оставшаяся работа состоит из написания состояний и переходов для перемещения / манипулирования лентой.

...