Вы находитесь на странице: 1из 4

Алгоритм как абстрактная машина

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

Чем проще устройство описанной машины и чем элементарнее ее шаги, тем больше
оснований считать, что ее работа и есть выполнение алгоритма. Чтобы ответить на
вопрос, какие шаги работы машины следует отнести к элементарным, вернемся к тому
обстоятельству, что нас интересует преобразование информации, представленной с
помощью некоторого конечного алфавита. Требование конечности алфавита является
очевидным следствием того обстоятельства, что решение должно быть получено за
конечное число шагов. Если информация не представлена в дискретной форме, например
вещественное число, то его обработка в общем случае может содержать бесконечное
число шагов (например, нахождение цифр числа или извлечение квадратного корня из
числа 2). Таким образом, алгоритм оказывается конечной последовательностью действий,
производимых над данными, представленными с помощью конечного алфавита. С учетом
сказанного становится понятным определение алгоритма, которое дает В.М. Глушков
[Глушков В.М. Основы безбумажной информатики. — M.:Наука, 1987. — 552 с.]:
Алгоритм — это любая конечная система правил преобразования
информации (данных) над любым конечным алфавитом.
Пусть исходные данные из области определения алгоритма представлены
посредством алфавита A и образуют при этом конечную последовательность знаков
{a1 ,…,an} — такая последовательность называется словом. B результате выполнения
алгоритма сформируется новое слово {b1 ,…, bm}, представленное, в общем случае, в
другом алфавите B. На первый взгляд для проведения такого преобразования в качестве
элементарных выделяются следующие операции (шаги):
1) замена одного знака исходного слова ai знаком bj из алфавита B;
2) удаление знака исходного слова;
3) добавление к исходному слову знака из алфавита B.
Однако если в алфавиты включен знак, имеющий смысл пустого знака, добавление
которого к слову слева или справа не изменяет этого слова (аналог числового нуля), то
легко видеть, что операция (2) есть не что иное, как замена ai пустым знаком, а операция
(3) есть замена пустого знака знаком bj. Таким образом, все возможные алфавитные
преобразования сводится к операции (1) — замене одного знака другим. Именно по этой
причине функционирование абстрактной машины сводится к тому, что она считывает и
распознает символы, записанные в памяти (в этом качестве выступает бесконечная
лента), и в зависимости от своего состояния и того, каков обозреваемый символ, она
заменяет его другим символом; после этого она переходит в новое состояние, читает
следующий символ и т. д. до команды о прекращении работы. Поскольку подобные
машины являются чисто модельным, теоретическим построением, они получили название
абстрактных машин и рассматриваются в качестве одной из возможных универсальных
алгоритмических систем.
Концепция алгоритма как абстрактной машины была выдвинута практически
одновременно (1936–1937 гг.) английским математиком Аланом Тьюрингом и его
американским коллегой Эмилем Постом. Высокая значимость их построений еще и в том,
что они в абстрактной форме предвосхитили основные принципиальные черты реальных
устройств по обработке данных (вычислительных машин), которые появились лишь
спустя 8–9 лет.

Алгоритмическая машина Поста

На самом деле, Пост, в отличие от Тьюринга, не пользовался термином ≪машина≫, а


называл свою модель алгоритмической системой. Мы же, как принято в литературе, все
же будем говорить о машине Поста, подчеркивая тем самым единство подходов обоих
авторов [Успенский В.А. Машина Поста. — M.: Наука, 1988. — 96 с.].

Маши́на По́ста — абстрактная вычислительная машина, предложенная Эмилем


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

Абстрактная машина Поста состоит из бесконечной ленты, разделенной на равные секции,


а также считывающе записывающей головки. Каждая секция может быть либо пуста (т. е.
в нее ничего не записано), либо заполнена (отмечена, т. е. в нее записана метка).
Вводится понятие состояние ленты как информация о том, какие секции пусты, а какие
отмечены (по-другому: состояние ленты — это распределение меток по секциям, т. е. это
функция, которая каждому числовому номеру секции ставит в соответствие либо метку,
либо знак ≪пусто≫). Естественно, в процессе работы машины состояние ленты
меняется. Состояние ленты и информация о положении головки характеризуют
состояние машины Поста.
№ Команда Запись Описание действий машины
команды
1 Шаг вправо X→y Сдвиг головки на одну секцию вправо
2 Шаг влево X← y Сдвиг головки на одну секцию влево
3 Установить метку XMy В обозреваемую секцию ставится метка
4 Стереть метку XCy Из обозреваемой секции удаляется метка
5 Передача y1 При отсутствии метки в обозреваемой
управления x↗ секции управление передается команде
↘ y2 y1, при наличии — команде y2

6 Остановка x стоп Прекращение работы машины

Условимся обозначать головку знаком ≪∇≫ над обозреваемой секцией, а метку —


знаком ≪M≫ внутри секции. Пустая секция никакого знака не содержит. За один такт
(его называют шагом) головка может сдвинуться на одну секцию вправо или влево и
поставить или удалить метку. Работа машины Поста заключает в переходе от одного
состояния машины к другому в соответствии с заданной программой, которая строится из
отдельных команд. Каждая команда имеет следующую структуру: xKy, где x — номер
исполняемой команды; K — указание о выполняемом действии; y — номер следующей
команды (наследника). Система команд машины, включающая 6 действий, представлена в
таблице. Данный перечень должен быть дополнен следующими условиями:
- команда ⟨xMy⟩ может быть выполнена только в пустой секции;
- команда ⟨xCy⟩ может применяться только к заполненной секции;
- номер наследника любой команды (y) должен соответствовать номеру команды,
обязательной имеющейся в данной программе.
Если данные условия не выполняются, происходит безрезультатная остановка
машины, т. е. остановка без получения запланированного результата. B отличие от этой
ситуации остановка по команде ⟨x стоп⟩ является результативной, т. е. она происходит
после того, как результат действия алгоритма получен. Кроме того, возможна ситуация,
когда машина не останавливается никогда — это происходит, если ни одна из команд не
содержит в качестве последователя номера команды остановки или программа не
переходит к этой команде. Еще одним исходным соображением является следующее: по-
скольку знаки любого конечного алфавита могут быть закодированы цифрами,
преобразование исходного слова может быть представлено в виде некоторых правил
обработки чисел. По этой причине в машине Поста предусматривается только запись
(представление) целых положительных чисел. Целое число k записывается на ленте
машины Поста посредством k + 1 следующих подряд отмеченных секций, т. е.
применяется унарная система счисления (см. Системы счисления).

Уна́рная (едини́чная, ра́зная) систе́ма счисле́ния  —  непозиционная система


счисления с единственной цифрой, обозначающей 1.
В качестве единственной «цифры» используется «1», чёрточка (|), камешек,
костяшка счётов, узелок, зарубка и др.
В этой системе число n записывается при помощи n единиц. Например, 3 в
этой системе будет записано как |||. По-видимому, это хронологически первая
система счисления каждого народа, овладевшего счётом.

Соседние записи чисел на ленте разделяются одной или несколькими пустыми секциями.
Ниже приведен пример записи чисел 0, 2 и 3.

M M M M M M M M

Круг вычислительных задач, решаемых с помощью машины Поста, весьма широк.


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

M M M M
Программа, обеспечивающая решение задачи, состоит из 4-х команд:

1↗ 3 2 →1 3M4 4 стоп:
1
Последовательное исполнение команд 1 и 2 приводит к тому, что головка за два
такта работы машины сдвигается на одну позицию вправо. Это передвижение
продолжается до тех пор, пока после очередного сдвига под головкой не окажется пустой
ячейки — тогда по команде 3 в нее будет поставлена метка и по команде 4 машина
остановится.
Можно показать что, с помощью машины Поста реализуются (хотя и довольно
громоздко) все арифметические действия над числами в системе счисления (машина
Поста обеспечивает весьма неплохую и полезную практику программирования.
Недостатком оказывается чисто теоретический (т. е. непроверяемый) характер программ,
однако он достаточно легко преодолевается, если построить эмуляцию машины на каком-
либо языке программирования). Числа же, как было показано ранее, могут быть
использованы для кодирования любой дискретной информации. B частности, состояние
ленты можно представить словом в двоичном алфавите, где 0 будет соответствовать
пустой секции, а 1 — отмеченной. B процессе работы меняется состояние ленты и,
следовательно, от исходного слова происходит переход к выходному, представленному в
том же двоичном алфавите.

Вам также может понравиться