Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
матлог / avtomat / GLAVA-5.doc
Скачиваний:
166
Добавлен:
16.04.2015
Размер:
830.46 Кб
Скачать

5.3 Реализация машины Тьюринга

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

Команда

Пояснение

сдвиг{влево,вправо}

Сдвиг головки на 1 позицию на ленте влево или вправо

переход,р

Безусловный переход к команде с номером р

если,s,р

Условный переход к команде с номером р, если в обозреваемой ячейке находится символs

печать, s

Печать символа sв обозреваемую ячейку

стоп

Останов

Например, начало программы машины Тьюринга, которая находит наибольший общий делитель (рис.5.4), имеет вид:

00: если,а, 02;{если в начальном состоянии прочитан символа, то на команду 02}

01: переход, 05;{если нет, то на проверку другого символа}

02: печать,а;

03: сдвиг,влево;

04: переход,00;{возврат в начальное состояние}

05: если,b, 07; {если в начальном состоянии прочитан символb, то на команду 07}

06:переход, 10; {если нет, то на проверку другого символа}

07:печать,b;

08:сдвиг,влево;

09:....

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

Другой интересный вывод связан с возможностью реализации машины Тьюринга на языке высокого уровня. Поставим вопрос: какие управляющие конструкции достаточны для реализации любой машины Тьюринга? Очевидно, что c помощью последовательности операторов, выбора (if-then-else), цикла (while)и перехода(goto) любую программу машины Тьюринга можно реализовать. Однако, справедливо и более сильное утверждение: оператор перехода в этом наборе лишний. Действительно, пустьstate - переменная типасостояние,symbol - переменная типасимвол. Пусть элементарными операциями языка являютсяЧитать(с)- чтение очередного символа из обозреваемой ячейки входной ленты (или моделирующего ее массива) и помещение его в переменнуюс,Писать(с)- печатать символсв обозреваемую ячейку входной ленты иСдвиг (D)- имитация сдвига головки чтения-записи по рабочей ленте МТ (фактически, изменение индекса читаемого элемента одномерного массива). Очевидно, что любая программа машины Тьюринга может быть построена так:

begin

state = s0; //начальное состояние

while ( state != стоп ) do // повторяем цикл, пока не придем в заключительное состояние

{

Читать(symbol);

if (state = = s & symbol = = x ) // реализация

{ // команды машины Тьюринга

state = p; //<(s,x)(p,y,D)>

Писать(y);

Сдвиг (D)

}

else

if (state = = …

end

Отсюда следует важный вывод: любую машину Тьюринга (и, следовательно, любой алгоритм) можно реализовать на языке высокого уровня с использованием только трех управляющих конструкций: последовательность, выбор и цикл. Тем самым мы доказали известную основную теорему структурного программирования, доказанную впервые из других соображений Бомом и Якопини.

Соседние файлы в папке avtomat