Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
учебное пособие по информатике 2 часть.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
724.99 Кб
Скачать

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

В 1936 г. английский математик Алан Тьюринг опубликовал статью «О вычислимых числах», в которой для уточнения понятия алгоритма использовал абстрактную математическую конструкцию, впоследствии названную машиной Тьюринга.

М ашина Тьюринга состоит из бесконечной ленты, разбитой на клетки (ячейки) равной величины. В каждой ячейке может быть записана в точности одна буква. Пустая ячейка означает наличие в ней пустой буквы. Для передвижения ленты машина снабжена простым лентопротяжным механизмом, который позволяет передвигать ленту на одну ячейку влево или вправо. Для того чтобы считать написанный на ленте символ и записать его на ленту, машина Тьюринга снабжена головкой чтения - записи. При этом головка за один прием может прочитать только одну букву, написанную на той ячейке ленты, которая расположена под головкой. Чтение буквы не заменяет того, что написано в ячейке

Ячейка

Логический блок

Бесконечная лента

Головка чтения-записи

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

  1. он заставляет головку прочитать букву, которая находится на ленте под головкой;

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

  1. записать на ленте в той клетке, находящейся под головкой, некоторую букву;

  2. передвинуть ленту влево, вправо или оставить на месте;

  3. изменить свое собственное состояние;

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

Итак, мы имеем:

  1. некий алфавит Р={ро,…, pi, ..., рn}, содержащий буквы, которые могут быть записаны на ленте. Этот алфавит называется алфавитом машины Тьюринга;

  2. алфавит А={a1, a2, …, am}, содержащий состояния, в которых может находиться логический блок;

  3. алфавит D={d-1, d0, d1}, предназначенный для обозначения движения ленты влево или вправо и остановки ленты.

Помним, что алфавитом мы называем совокупность упорядоченных в определенном смысле символов в данном языке или системе. Эти символы называются буквами. Только символы, принадлежащие данному алфавиту, могут использоваться для построения слов.

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

Если головка читает букву pi, и блок находится в состоянии ai, то поведение машины определяется записью pxdyaz, которая соответствует командам:

  • записать на ленте вместо буквы pi букву рх;

  • совершить перемещение ленты dy;

  • перейти логическому блоку в состояние az.

Очевидно, что от реакции на сочетание pi, aj для i≠j будет зависеть работа машины Тьюринга. Реакцию машины на сочетания pi, aj можно представить в виде таблицы, в клетках которой стоят тройки символов вида pxdyaz.

a1

a2

az

am

p0

p1

px

pxdyaz

pn

Если записать на ленте некоторое слово в алфавите Р и нажать кнопку запуска, то в результате работы машины возможны два исхода:

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

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

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

Пусть задана функция f(x)=х+1, при х≥0. Построить машину Тьюринга, реализующую эту функцию.

Решение:

1) введем условные обозначения и определим исходное состояние ленты:

a) значения х будем записывать на ленте в виде строки, состоящей из единиц, а пустые клетки будем обозначать нулями;

b) расположим ленту так, чтобы самая левая единица находилась под головкой;

c) переведем логический блок в исходное состояние ai;

2) проанализируем работу логического блока:

a) если в состоянии ai головка считает символ 1, то нужно, чтобы логический блок снова записал в эту ячейку 1, ленту продвинул на одну позицию влево и сам остался в прежнем состоянии ai;

b) если в состоянии ai головка считает символ 0, то логиче­ский блок должен записать в эту ячейку 1, ленту оставить в этой же позиции и сам перейти в состояние а2;

c) находясь в состоянии a2 и при считывании головкой символа 1, логический блок должен снова записать в эту клетку 1, ленту не перемещать и оставаться в состоянии а2. При этом машина остановится;

3) построим функциональную таблицу машины Тьюринга, вычисляющей значение функции f(х)= х+1, при х≥0:

A1

a2

0

1d0a2

1

1d1a1

1d0a2

4) проиллюстрируем работу машины Тьюринга при х =2: