Скачиваний:
105
Добавлен:
01.05.2014
Размер:
7.48 Mб
Скачать

Машина Тьюринга.

Понятие машины Тьюринга было введено для того, чтобы формализовать интуитивные понятия алгоритма и вычислимости функции. Впервые это понятие было введено в работах английского математика Алана Матисона Тьюринга (Alan Matison Turing) в 1936-37 годах.

Опишем процесс вычислений на этой абстрактной вычислительной машине. Будем предполагать, что вычисления производятся на разделенной на клетки и бесконечной в обоих направлениях ленте. В каждой клетке ленты в данный момент времени записан один из конечного множества символов S0,..., Sn. Это множество символов называетсяалфавитом машины.

На каждом шаге работы вычислитель (человек, марсианин, электронное или механическое устройство) читает содержимое одной из клеток, над которой он находится. Машина устроена так, что в каждый момент времени она находится в одном из конечного числа внутренних состояний q1 ,...,qm. В каждом состоянииqi машина выполняет инструкцию с номеромi . Каждая инструкция имеет условный характер. Она говорит вычислителю, какое действие выполнять и в какое состояние перейти на следующем шаге в зависимости от того, какой символ находится в считываемой клетке. Предписываемое инструкцией действие может иметь одно изn+4 видов:

1) Остановить вычисления.

2) Сдвинуться вдоль ленты на одну клетку вправо.

3) Сдвинуться на одну клетку влево.

4) Записать в считываемую клетку символ S0 вместо того, что там было.

5) Записать в считываемую клетку символ S1.

n+4) Записать в считываемую клетку символ Sn.

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

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

Считываемый символ /

состояние

S0

S1

q1

S1q1

Lq2

q2

S1q2

Lq3

q3

S1q3

Буква L означает здесь сдвиг на одну клетку влево. БукваR означает здесь сдвиг на одну клетку вправо.Siздесь означает запись символаSiв текущую клетку. Элементом машинной таблицы является обозначение действия (L,R,S0,..., Sn) и следующего состояния (q1 ,...,qm).

Граф переходов изображен на следующем рисунке.

Рисунок 1

Каждая вершина в этом орграфе соответствует одному из состояний. Вместо символов S0и S1для краткости пишем здесь 0и1. Каждая дуга помечена следующим образом:

текущее считываемый символ: действие следующее

состояние состояние

Рисунок 2

Множество четверок выглядит следующим образом:

{q1S0S1q1 , q2S0S1q2 , q3S0S1q3 , q1S1Lq2 , q2S1Lq3}

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

Будем далее считать, что машина начинает работу в состоянии с наименьшим номером. Рассматриваемая машина остановится, когда в состоянии q3 она считает символS1, так как в ее таблице нет записи (соответственно нет дуги в графе переходов), говорящей, что необходимо делать в этом случае.

Показать, как такая машина работает, можно с помощью последовательности ее конфигураций. Каждая конфигурация показывает, что находится на ленте во время выполнения некоторого шага вычисления, в каком из состоянийq1 ,...,qmнаходится машина и какую клетку при этом считывает. Будем изображать конфигурацию приводя имеющуюся на ленте запись и записывая текущее состояние под символом, расположенном в считываемой клетке ленты. Последовательность конфигураций нашей машины выглядит следующим образом:

S0 S0 S0 S0 S0 S0 S0

q1

S0 S0 S0 S0 S1 S0 S0

q1

S0 S0 S0 S0 S1 S0 S0

q2

S0 S0 S0 S1 S1 S0 S0

q2

S0 S0 S0 S1 S1 S0 S0

q3

S0 S0 S1 S1 S1 S0 S0

q3

Пример 2. Рассмотрим теперь более сложную машину с алфавитом {0,1}. Эта машина будет удваивать число единиц на ленте. В начальной конфигурации на ленте находится блок изn (n>0 ) единиц. Во всех остальных клетках находятся нули. Наша машина считывает самую левую единицу этого блока. После остановки машины в конечной конфигурации на ленте будет находится блок из 2n единиц и машина будет стоять на самой левой единице. Граф переходов этой машины изображен на следующем рисунке.

Рисунок 3

Выпишите в качестве упражнения конфигурации данной машины, начиная с исходной конфигурации 000111000. Вы увидите, что машина сначала пишет две единицы слева после этого стирает единицу справа в исходном блоке. Эти действия продолжаются в цикле до тех пор, пока в исходном блоке не будут стерты все1.

Пример 3. Машина, которая пишет на пустой ленте блок из 2nединиц. Эту задачу можно решить “в лоб”, создав машину с 2nсостояниями, как в примере 1. Но при n>11 можно сэкономить в числе состояний последовательно соединив машину, которая рисуетn единиц, и машину из примера 2, которая удваивает количество единиц на ленте. Вот как выглядит граф нашей машины, которая имеетn+11 состояний.