Первый вид формальной модели алгоритма основан на представлении об алгоритме, как о программе для некоторого детерминированного устройства. Одним из таких устройств является одноленточная детерминированная машина Тьюринга (ДМТ), которая представляет собой логическое устройство, состоящее из:
1) неограниченной в обе стороны ленты, разделенной на одинаковые пронумерованные ячейки;
2) читающей/пишущей головки;
3) управляющего устройства с конечным числом состояний.
Программу
для ДМТ определяют следующие компоненты:
1) G – конечное множество символов, записываемых на ленте,
– множество входных символов,
– выделенный пустой символ;
2) Q – конечное множество состояний, в котором выделено начальное состояние
и два конечных –
;
3) функция переходов
.
Т.е.
.
Задание 1. Построить ДМТ-программу, которая копирует на ленте заданное натуральное число.
Решение. Как задача распознавания эта задача звучит следующим образом: существует ли копия заданного натурального числа.
Для представления натурального числа будем использовать символ 1, при такой схеме кодирования число n записывается в виде последовательности из n единиц. Для разделения исходного числа и копии используем символ *, в качестве вспомогательного символа выберем 0. Таким образом,
,
.
Отрицательный ответ в данной задаче при такой схеме кодирования будет только в случае, когда лента пуста или в записи исходного числа присутствуют символы, отличные от 1.
Копирование числа n будем выполнять за n проходов с возвратом. На каждом проходе заменим первую нескопированную единицу на вспомогательный символ 0, затем, двигаясь вправо, дойдём до конца записи, повторяя все символы, стоящие перед пустым, и запишем 1 в конец записи. Во время первого прохода перед записью 1 нужно вставить разделительный символ *. Затем будем двигаться влево, также повторяя символы, до тех пор, пока не достигнем 0, после чего действия повторяются. Когда все единицы будут скопированы (после символа 0 стоит *), нужно восстановить исходное число, заменив все 0 на 1, двигаясь влево.
Построим вначале ориентированный граф, соответствующий функции переходов, которая реализует последовательность действий, описанных выше. Затем выпишем множество состояний и табличное задание функции переходов. Вершинами графа будут являться состояния управляющего устройства, дуги графа означают переход из одного состояния в другое, причём, над каждой дугой будем писать символ(ы), по которому выполняется переход, а после знака ® – замещающий символ(ы) и на
правление движения головки.
Следовательно,
.
Функцию переходов представим в виде таблицы, содержащей значения
.–
| q | s | |||
| * | b | |||
| q 0 | (qN, b, 1) | (q 1, 0, 1) | (qN, b, 1) | (qN, b, 1) |
| q 1 | (qN, b, 1) | (q 1, 1, 1) | (qN, b, 1) | (q2, *, 1) |
| q 2 | – | – | – | (q3, 1, -1) |
| q 3 | (q4, 0, 1) | (q3, 1, -1) | (q3, *, -1) | – |
| q 4 | – | (q5, 0, 1) | (q6, *, -1) | – |
| q 5 | – | (q5, 1, 1) | (q5, *, 1) | (q3, 1, -1) |
| q 6 | (q6, 1, -1) | – | – | (qY, b, 1) |
Второй подход основан на понятии вычисления и числовой функции, основная теоретическая модель этого вида – рекурсивные функции.
Работу ДМТ-программы
можно рассматривать, как вычисление некоторой функции
. Если слово
и программа
останавливается на любом входе из S*, то результатом вычисления
будет слово, составленное из символов, записанных на ленте после остановки машины в ячейках с 1-ой по последнюю непустую ячейку.
Классом функций, для которых вычисляющий их алгоритм существует, являются частично-рекурсивные функции.
Функция называется частично рекурсивной, если она может быть построена из 0, функций
и
с помощью конечного числа применений операторов суперпозиции, примитивной рекурсии и m-оператора.
Задание 2. Доказать примитивную рекурсивность следующих функций:
1)
;
2)
;
3)
;
4)
;
5)
.
Решение.
1)
2)