НОРМАЛЬНЫЕ АЛГОРИТМЫ
Каждый нормальный алгоритм (НА) является определенным процессом преобразования слов в некотором конечном алфавите и задается набором допустимых элементарных преобразований и правилами, определяющими порядок применения этих преобразований. При этом в качестве элементарного преобразования используется замена одного вхождения подслова в слове некоторым другим (или тем же словом). Всевозможные замены для заданного НА определяются его схемой, а последовательность проведения замен – схемой и некоторыми дополнительными соглашениями. Эти соглашения одни и те же для всех НА, а потому НА, по существу, однозначно определяются алфавитом и схемой.
Определение 1. Схемой нормального алгоритма в алфавите
называется упорядоченная последовательность
(1)
слов в алфавите
где
- слова в алфавите
, а
есть слово
или
При этом слово
схемы (1) называется ее
-й формулой с левой частью
и правой частью
.
Формула называется простой, если
есть
и заключительной, если есть
Действие НА на слово
в алфавите
описывается следующим определением.
Определение 2. Пусть - слово в алфавите
и хотя бы одно из слов
является его подсловом. Элементарным преобразованием слова
по нормальному алгоритму
со схемой (1) называется замена в
первого вхождения слова
с наименьшим номером
словом
Если результатом указанного элементарного преобразования является слово
то пишут
т. е.
или
.
Определение 3. Говорят, что НА в алфавите
применим к слову
в алфавите
и перерабатывает его в слово
, если существует конечная последовательность слов
(2)
в которой
или
и слово
не содержит подслов
В противном случае говорят, что алгоритм не применим к слову
Из приведенных определений естественным образом извлекается описание процесса переработки слова по нормальному алгоритму
(или нормальным алгоритмом
). А именно, по заданному слову
НА
строит последовательность слов. Если
не содержит подслов
то эта последовательность одноэлементна и состоит из единственного слова
. Если же
содержит хотя бы одно из подслов
, то производится его элементарное преобразование по НА
в результате чего получается вполне определенное слово
. Если при переходе от
к
использовалась заключительная формула, то искомая последовательность двухэлементная:
. В противном случае так же, как и выше, по слову
строится слово
и т. д. В процессе построения указанной последовательности могут представиться три различные возможности: или на каком-то шаге будет использована заключительная формула схемы алгоритма, или появится слово, не содержащее подслов
, или не произойдет ни того, ни другого. В превых двух случаях мы получим конечную последовательность, последнее слово которой называется результатом применения НА к слову
и обозначают через
. В третьем случае процесс преобразования слов по НА
будет длитться бесконечно, это и означает, что НА
не применим к
.
Таким образом, НА в алфавите
задает частичное отображение множества
всех слов в алфавите
в само себя. Выбирая различные схемы, мы будем получать различные НА.
Если - алфавит, содержащий
, то НА в алфавите
называется нормальным алгоритмом над алфавитом
.
Приведем примеры нормальных алгоритмов. При этом буквой будет всегда обозначаться пустое слово (в любом алфавите).
1. НА в алфавите со схемой
перерабатывает любое слово в себя, причем последовательность слов, соответствующая слову
имеет вид:
.
2. НА со схемой
не применим ни к одному слову. Последовательность, соответствующая слову будет бесконечной:
3. НА в алфавите
со схемой
приписывает к любому слову слева слово
:
4. Построим НА , приписывающий к любому слову
справа фиксированное непустое слово
Это сделать несколько сложнее, чем приписывание слова
слева. Для этого удобнее расширить алфавит
, добавив к нему одну новую букву
, и построить искомый НА в алфавите
(т. е. над
). Нетрудно проверить, что нужное нам преобразование будет осуществлять НА со схемой
……………..
Последовательность слов, соответствующая произвольному слову в алфавите
, для этого НА имеет вид:
Очевидно, что то же самое преобразование слов будет осущетвлять НА, полученный из любой перестановкой
формул его схемы. В связи сэтим вместо первых
формул схемы пишут просто
так, что вся схема запишется в виде:
Заметим, что, выполняя свою задачу приписывания к словам из справа слова
, мы совсем не интересовались переработкой слов в алфавите
, содержащих букву
. Здесь алгоритм
будет действовать иначе. А именно, слово
в алфавите
, содержащее
вхождений буквы
, он будет перерабатывать в слово
где количество букв
будет равно
,
где получается из
удалением всех вхождений буквы
(т. е.
есть проекция
в алфавит
).
5. Построим НА , перерабатывающий любое слово
в перевернутое слово
Для этого добавим к
две новые буквы
и возьмем следующую схему
в алфавите
Проследите в качестве упражнения, что для любого слова
в алфавите
.
Приведем еще примеры НА над числами. Условимся натуральное число записывать в виде
вертикальных палочек.
6. НА в алфавите со схемой
осуществляет сложение натуральных чисел.
7. НА в алфавите со схемой
осуществляет умножение натуральных чисел.
Дата добавления: 2014-12-02; просмотров: 1077;