Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 3000391.doc
Скачиваний:
36
Добавлен:
30.04.2022
Размер:
2.92 Mб
Скачать

3.2.2. Примеры машин Тьюринга

Рассмотрим машины Тьюринга, реализующие и обеспечивающие формирование рекурсивных функций.

Пример 1. Построить машину Тьюринга, вычисляющую функцию .

Пусть алфавит машины Тьюринга состоит из двух символов {0, 1}, где 0 – пустой символ, а 1 – символ занятой ячейки. В этом алфавите любое целое неотрицательное число k представляется k+1 символами 1, записанными в соседних ячейках ленты. В этом случая число 0 будет записано так …010…

Определим порядок вычисления значения этой функции машиной Тьюринга. Так как результат должен представлять массив из занятых ячеек, где - число ячеек, занятых аргументом x, то вычисление организуем следующим образом. В ячейку, занятую аргументом x, вместо символа 1 записываем пустой символ 0. В каждом таком случае символ 1 записывается в двух ячейках, представляющих результат. Этот результат формируем в виде массива ячеек, расположенных справа от массива ячеек, занятых аргументом x, через одну пустую ячейку. Когда вместо всех ячеек, занятых аргументом x, будут только пустые ячейки, в новом массиве занятых ячеек удаляется одна ячейка с символом 1.

Программа работы машины Тьюринга, вычисляющая функцию , имеет вид:

- удалена одна занятая ячейка аргумента.

- читаются занятые ячейки аргумента.

- найдена разделяющая пустая ячейка.

- читаются занятые ячейки результата.

- заполнена одна пустая ячейка результата.

- заполнена вторая ячейка результата.

- просматриваются в обратном порядке занятые ячейки результата.

- найдена пустая разделяющая ячейка.

- найдена вторая пустая ячейка.

- снова читается пустая разделительная ячейка.

- удаляется один занятый символ. Конец.

- найдена занятая ячейка аргумента.

- просматриваются в обратном порядке занятые ячейки аргумента.

- найдена пустая ячейка перед занятыми ячейками аргумента.

Пример 2. Построить машину Тьюринга, применимую ко всем словам в алфавите {a,b} и переводящую их в слово . Проверить работу построенной машины над некоторыми словами.

Решение. Опишем работу алгоритма, решающего эту задачу. Вначале с помощью команд , проходим до конца слова, не изменяя его символов. Признаком окончания слова будем считывание символа в состоянии .

С помощью команд , , движемся влево, не изменяя последнего символа.

Если в состоянии считываем символ a, значит, , надо стирать все символы слова , кроме последнего. Это можно сделать с помощью команд , , .

Если в состоянии считывается символ , значит, вся работа проделана, и пора останавливаться с помощью команды .

Если в состоянии считываем символ b, значит, , надо все символы, кроме , заменить буквами b. Это делаем с помощью команд , , .

Если в состоянии считываем символ , значит, все символы исходного слова пройдены, можно переходить в состояние с помощью команды .

Проверим работу построенной машины Тьюринга над словом abba:

abba,

abba,

abba,

abba,

abba,

abba,

abba,

abba,

1

1

1

1

2

3

5

5

bbba,

bbba.

5

0

Итак, в слове abba предпоследний символ - b, и все буквы исходного слова, кроме последнего, заменены буквой b.

Проверим работу построенной машины Тьюринга над словом bbaaa:

bbaaa

bbaaa

bbaaa

bbaaa

bbaaa

bbaaa

bbaaa

1

1

1

1

1

1

2

bbaaa

bbaa

bba

ba

a

a

3

4

4

4

4

0

В слове bbaaa предпоследний символ - a, и все буквы исходного слова, кроме последнего, заменены пустыми символами .

Итак, проверка сделана, результат работы машины Тьюринга удовлетворяет требованиям, которые ставились в условии задачи.

В приведенных примерах показана реализуемость на машинах Тьюринга основных свойств алгоритма: дискретности, детерминированности, массовости и результативности.

Чтобы можно было строить сложные машины Тьюринга, определяют понятие композиции машин Тьюринга.

Композицией машин Тьюринга М1 и М2 называется машина Тьюринга М, которая первоначально функционирует как машина Тьюринга М1, заключительное состояние которой q0 изменяют на начальное состояние машины Тьюринга М2. И далее машина М функционирует как машина Тьюринга М2.

Композицию машин Тьюринга обозначают: М = М1 º М2.

Из определения композиции машин Тьюринга следует, что М1 º М2М2 º М1.

Так, если необходимо построить машину Тьюринга, вычисляющую функцию ƒ(х, у) = х + у + 1, то достаточно выполнить композицию машин Тьюринга. Пусть машина М1 вычисляет функцию ƒ(х) = х + 1, а машина М2 вычисляет функцию ƒ(х + у). Тогда машина М = М1 º М2 будет вычислять, очевидно, функцию ƒ(х, у) = х + у + 1. Для этого нужно к программе, описывающей машину М1, присоединить команды машины М2. Состояния машины М1 будут также состояниями машины М. Заключительное состояние q0 машины М1 следует заменить состоянием q2,которое будет соответствовать начальному состоянию машины М2. тогда изменится соответствующим образом нумерация состояний машины М2: состояние q1 изменится на состояние q2 машины М, состояние q2 изменится на состояние q3 и так далее.

Существует много модификаций машин Тьюринга, среди которых можно выделить универсальные и многоленточные машины. Для универсальных машин характерно одновременное использование правой и левой полулент, на одной из которых записываются все команды для вычисления заданной функции, а на другой все текущие конфигурации.

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

Рекурсивные функции и машины Тьюринга дают косвенное определение понятие алгоритма: если возможно доказать, что некоторая функция примитивно-рекурсивна, или возможно построение машины Тьюринга для получения решения некоторой задачи, то такая задача разрешима.

С другой стороны, если доказано, что решение некоторой задачи не может быть получено вычисление примитивно-рекурсивных функций, или доказано, что для решения данной задачи не может быть построена машина Тьюринга, то такая задача называется алгоритмически неразрешимой.

Важность доказательства факта, что некоторая задача алгоритмически неразрешима, состоит в том, что исследователь не будет тратить время и силы на разработку алгоритма решения данной задачи в общем виде.