пятница, 2 апреля 2010 г.

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

Машина Тьюринга – абстрактная машина, обрабатывающая слова в произвольном внешнем алфавите А={а0, а1, …, an}. Внешний алфавит для каждой задачи выбирается свой, но один символ присутствует в любом алфавите – это пустой символ («пробел»), а0= «_».

Устройство машины Тьюринга

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

Вдоль ленты движется каретка (считывающая и записывающая головка).

Каретка может передвигаться вдоль ленты влево и вправо. Когда она неподвижна, она стоит против ровно одной ячейки ленты; говорят, что каретка обозревает эту ячейку. А такая ячейка называется текущей или обозреваемой.

В каждый конкретный момент времени машина находится в одном из внутренних состояний и обозревает ровно одну ячейку. Множество всех внутренних состояний образует алфавит внутренних состояний машины Тьюринга Q={q0, q1, …,qm}. Состояние q1 – начальное состояние, а состояние q0 – конечное состояние; присутствуют в любой машине Тьюринга. В начальном и конечном состояниях каретка находится над крайним левым значащим символом.

Команды машины Тьюринга

Формат команды: ai qj ai΄ K qj΄, где

ai, ai΄ – символы внешнего алфавита А,

qj, qj΄– символы алфавита внутренних состояний Q,

K – команда сдвига каретки: L – сдвиг каретки влево, R – сдвиг каретки вправо, E – отсутствие сдвига каретки.

Последовательность команд – программа машины Тьюринга.

Порядок работы машины Тьюринга

Работа машины Тьюринга состоит из тактов. На каждом такте выполняется одна команда машины Тьюринга. Выбор команды определяется обозреваемым символом и тем внутренним состоянием, в котором находится машина в данный момент времени. Таким образом, если обозревается символ ai и машина находится во внутреннем состоянии qj, то машина выполняет команду ai qj ai΄ K qj΄, в ходе чего выполняются следующие действия:

1) символ ai в обозреваемой ячейке заменяется на символ ai΄;

2) каретка сдвигается в соответствии с командой К;

3) машина переводится во внутреннее состояние qj΄;

После выполнения команды происходит переход к следующему такту.

Действия машины прекращаются после выполнения команды останова.

Команда останова – это команда вида ai qj ai Е qj, т. е. команда, которая не меняет обозреваемого символа, не сдвигает каретку, не меняет внутреннего состояния машины.

Все команды останова содержатся в заключительном состоянии q0.

Если в ходе выполнения программы машина дойдет до выполнения команды останова, то программа в этом случае считается выполненной, и машина является применимой к входному слову.

Если в ходе выполнения программы машина не дойдет до выполнения ни одной из команд останова, то выполнение программы при этом никогда не прекращается, машина никогда не останавливается – процесс работы машины происходит бесконечно. В этом случае говорят, что машина не применима к входному слову.

Программу машины Тьюринга удобно отображать в виде таблицы. Например, команда ai qj ai΄ K qj΄ будет отображаться следующим образом:

А Q

q0

q1

qj

qm

a0

a1

ai

ai΄ K qj΄

an

Пример. Составить программу машины Тьюринга сложения двух чисел в десятичной системе счисления.

Внешний алфавит: А={_,0,1,2,3,4,5,6,7,8,9}.

Пример начальной конфигурации:

Заключительная конфигурация:

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

А Q

q0

q1

q2

q3

q4

q5

q6

q7

q8

_

_Eq0

_Rq2

_Lq3

_Rq6

_Lq5

1Rq1

_Lq7

_Lq7

_Rq0

0

0Eq0

0Rq1

0Rq2

9Lq3

0Lq4

1Rq1

0Lq8

0Lq8

1

1Eq0

1Rq1

1Rq2

0Lq4

1Lq4

2Rq1

1Lq8

1Lq8

2

2Eq0

2Rq1

2Rq2

1Lq4

2Lq4

3Rq1

2Lq8

2Lq8

3

3Eq0

3Rq1

3Rq2

2Lq4

3Lq4

4Rq1

3Lq8

3Lq8

4

4Eq0

4Rq1

4Rq2

3Lq4

4Lq4

5Rq1

4Lq8

4Lq8

5

5Eq0

5Rq1

5Rq2

4Lq4

5Lq4

6Rq1

5Lq8

5Lq8

6

6Eq0

6Rq1

6Rq2

5Lq4

6Lq4

7Rq1

6Lq8

6Lq8

7

7Eq0

7Rq1

7Rq2

6Lq4

7Lq4

8Rq1

7Lq8

7Lq8

8

8Eq0

8Rq1

8Rq2

7Lq4

8Lq4

9Rq1

8Lq8

8Lq8

9

9Eq0

9Rq1

9Rq2

8Lq4

9Lq4

0Lq5

_Rq6

9Lq8

9Lq8

Трассировка приведенного алгоритма (будем отображать текущее внутреннее состояние и содержимое только используемой части ленты):

стоп

Как видно из примера, каждое внутреннее состояние отвечает за определенный шаг алгоритма:

q1 – проход в конец первого числа;

q2 – проход слева направо в конец второго числа;

q3 – вычитание единицы из второго числа;

q4 – проход справа налево в конец первого числа;

q5 – прибавление единицы к первому числу;

q6 – удаление второго числа после окончания сложения;

q7 – проход справа налево по пустым ячейкам в конец первого числа;

q8 – проход справа налево в начало первого числа;

q0 – завершение работы алгоритма (содержит точки останова).

В таблице программы машины Тьюринга некоторые ячейки могут оставаться пустыми. В примере пустой остается ячейка, стоящая на пересечении строки символа «5» и столбца внутреннего состояния q6. Это означает, что во внутреннем состоянии q6 символ «5» обозреваться не может.