Z
Z
ZIK13372020-05-12 12:00:12
Algorithms
ZIK1337, 2020-05-12 12:00:12

How to build a Turing machine to multiply a decimal number by 11?

Используется алфавит A={0,1,2,⋯,9}. Нужно построить таблицу машины Тьюринга, которая умножает входное слово на 11.

Понятно, что последовательность такая:
1) Проверка, не равно ли нулю входное слово или не пустое ли оно, одновременно удаляя незначащие нули
2) Добавление 0 в конец, и после добавление "+"
3) Копирование справа от "+" входного слова без добавленного нуля
4) Сложение

Вопрос, как сделать это копирование нормально для десятичного числа?
Для 10 цифр это уже 10 состояний, а после записи нужно еще вернуться и восстановить заменённый символ обратно, получается еще 10 символов добавлять для каждой цифры (иначе как понять, на что восстанавливать)?
Кажется, перебор

Может нужно как-то по-другому?

Answer the question

In order to leave comments, you need to log in

1 answer(s)
R
Rsa97, 2020-05-12
@Rsa97

Let's assume that in the initial position the caret is on the last digit of the number.
We will have states from q 0 to q 10 corresponding to the sum of the least significant digit of the original number and the transfer from it. The initial state is q 0 .
q i a j → q ((i + j) div 10) + j a (i + j % 10) L,
q i ≠ 0 ε → q (i div 10) a (i % 10) L,
q 0 ε → q stop ,
where div is an integer division.
Now the caret is in an empty cell in front of the result.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question