
- •Оглавление
- •1 Интуитивное понятие алгоритма. Необходимость его уточнения. 7
- •1.4 Вычислительные алгоритмы 16
- •1.1 Свойства, характерные для интуитивного понятия алгоритма
- •1.2 История развития понятия алгоритма
- •1.3 Алгоритмические модели и их представление
- •1.4 Вычислительные алгоритмы
- •1.5 Алгоритмы для исполнителей
- •1.6 Символьные алгоритмы
- •2 Машины тьюринга (одноленточные детерминированные)
- •2.1 Неформальное описание машины Тьюринга
- •2.2 Формальное определение машины Тьюринга
- •2.3 Операции над машинами Тьюринга
- •2.4 Варианты машины Тьюринга
- •2.5 Вычислимость по Тьюрингу и разрешимость
- •3 Проблема самоприменимости
- •3.1. Нумерация алгоритмов
- •3.2 Нумерация наборов чисел
- •3.3 Нумерация слов и словарные функции
- •3.4 Нумерация машин Тьюринга
- •Заключение
- •Список использованных источников
- •Контрольные вопросы
- •Глоссарий
- •Если аргумент и значения принадлежат к натуральным числам
1.6 Символьные алгоритмы
Второй тип модели алгоритма основывается на символьных алгоритмах. В частности, сюда также можно отнести формальные грамматики. Однако сначала рассмотрим стандартного представителя данного типа алгоритмической модели – нормальный алгоритм Маркова (НАМ). Он связывает понятие алгоритма с элементарными преобразованиями слов произвольного алфавита, замещая части или всего слова другим словом. Нормальные алгоритмы являются вербальными, то есть предназначенными для применения к словам в различных алфавитах.
Одним из уточнений понятия алгоритма является НАМ, введенный советским математиком А. А. Марковым. НАМ работает над конструктивными объектами — словами (цепочками символов), построенными из букв конечного алфавита. Принцип нормализации, предложенный А. А. Марковым, гласит:
а) объекты любой природы могут быть представлены (закодированы) словами в подходящем алфавите;
б) сколь угодно сложный процесс преобразования слов может быть представлен в виде НАМ.
Определение всякого
нормального алгоритма состоит из двух
частей:
определения алфавита алгоритма
Vt
(к словам
из символов которого алгоритм будет
применяться) и определения его схемы.
Схемой нормального алгоритма называется
конечный упорядоченный набор так
называемых формул подстановки, каждая
из которых может быть простой или
заключительной. Простыми формулами
подстановки называются
слова вида
,
где
и
—
два произвольных слова в алфавите
алгоритма (называемые, соответственно,
левой и правой частями формулы
подстановки). Аналогично, заключительными
формулами подстановки
называются слова вида
,
где
и
—
два произвольных слова в алфавите
алгоритма. При этом предполагается, что
вспомогательные буквы
и
не
принадлежат алфавиту алгоритма Vt
(в противном
случае на исполняемую ими роль разделителя
левой и правой частей следует избрать
другие две буквы).
Для организации последовательного и упорядоченного просмотра формул или правил они должны быть индексированы i {1, 2, 3,...}.
Если слово Рi есть цепочка вида (γ1αIγ2) в алфавите Vт, где γ1 и γ2 – слова в этом же алфавите и среди множества правил первым в упорядоченном списке есть правило αI→βI, то нужно выполнить подстановку (γ1αiγ2) → (γ1βi γ2).
Суть упорядоченного использования правил состоит в том, что каждое переработанное слово вновь поступает в «начало» алгоритма и вновь проверяется на подстановку правил в соответствии с протоколом.
Среди множества правил выделяют заключительное αi → • β i , результатом подстановки которого формируется слово Q и дается указание об окончании работы алгоритма.
Процесс может оборваться на некотором слове Рi, для которого нет соответствующего правил. Тогда это слово направляется в «тупик».
Для того чтобы построить модель алгоритма, необходимо выделить упорядоченную последовательность левых частей правил подстановки, так называемых распознавателей вхождения слов αi в слово Pi, и множество соответствующих операторов подстановки слова βI в слово Pi+1.
На схеме алгоритма (смотри Рисунок 1.2) эти блоки обозначены так:
• распознаватели вхождения - PBi ;
• операторы подстановки - ОПi.
Распознаватели вхождения соединяются последовательно в соответствии с заданной последовательностью правил. Второй выход распознавателя вхождения при обнаружении αi в слове Рi передает информацию о слове Pi=γ1αiγ2 в ОПi, где выполняется соответствующая замена слова αi на слово βi, т. е. γ1αiγ2 ⇒ γ1βiγ2=Pi+1.
Оператор подстановки направляет слово Pi+1 в «начало» алгоритма, если применена простая подстановка, и в «конец» алгоритма, если применена заключительная подстановка.
Рисунок 1.2 – Схема нормального алгоритма Маркова
Примером схемы
нормального алгоритма в пятибуквенном
алфавите
может
служить схема
Процесс применения
нормального алгоритма к произвольному
слову
в
алфавите этого алгоритма представляет
собой дискретную последовательность
элементарных шагов, состоящих в следующем.
Пусть
—
слово, полученное на предыдущем шаге
работы алгоритма (или исходное слово
,
если текущий шаг является первым). Если
среди формул подстановки нет такой,
левая часть которой входила бы в
,
то работа алгоритма считается завершённой,
и результатом этой работы считается
слово
.
Иначе среди формул подстановки, левая
часть которых входит в
,
выбирается самая первая. Если эта формула
подстановки имеет вид
,
то из всех возможных представлений
слова
в
виде
выбирается
такое, при котором
—
самое короткое, после чего работа
алгоритма считается завершённой с
результатом
.
Если же эта формула подстановки имеет
вид
,
то из всех возможных представлений
слова
в
виде
выбирается
такое, при котором
—
самое короткое, после чего слово
считается
результатом текущего шага, подлежащим
дальнейшей переработке на следующем
шаге.
Например, в ходе
процесса применения алгоритма с указанной
выше схемой к слову
последовательно
возникают слова
,
,
,
,
,
,
,
,
,
и
,
после чего алгоритм завершает работу
с результатом
.
Любой нормальный алгоритм эквивалентен некоторой машине Тьюринга, и наоборот — любая машина Тьюринга эквивалентна некоторому нормальному алгоритму. Вариант тезиса Чёрча — Тьюринга, сформулированный применительно к нормальным алгоритмам, принято называть «принципом нормализации».
Нормальные алгоритмы оказались удобным средством для построения многих разделов конструктивной математики. Кроме того, заложенные в определении нормального алгоритма идеи используются в ряде ориентированных на обработку символьной информации языков программирования — например, в языке Рефал.
На основе НАМ развивается одно из самых мощных и современных направлений в программировании — продукционное программирование.
Формальная грамматика или просто грамматика в теории формальных языков — способ описания формального языка, то есть выделения некоторого подмножества из множества всех слов некоторого конечного алфавита. Различают порождающие и распознающие (или аналитические) грамматики — первые задают правила, с помощью которых можно построить любое слово языка, а вторые позволяют по данному слову определить, входит оно в язык или нет. В рассматриваемый алгоритмический тип отнесем порождающие грамматики. Распознающие грамматики будут являться представителями следующего типа алгоритмов, к которому мы и перейдем.