Нормальные алгоритмы Маркова – 2

Данный алгоритм удаляет все буквы а в произвольном слове, например  . Выполнение алгоритма завершилось, так как формула невыполнима для слова bbc.

Пример 2. Алфавит {а, b, c}. Нормальный алгоритм:

a

Данный алгоритм приписывает к началу слова букву а, и его работа завершается, например,  .

Пример 3. Алфавит {а, b, c}. Нормальный алгоритм:

→a

Данный алгоритм неприменим ни к одному слову, так как его исполнение бесконечно, поскольку пустой текст существует в любом слове, например,  .

Пример 4. Дано слово в алфавите {a, b, c}. Приписать к слову справа букву а.

Например, из слова ababc надо получить слово ababca.

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

Введем дополнительный символ *, не входящий во внешний алфавит, и будем им помечать интересующее место в слове.

Последовательность действий       Соответствующие формулы подстановок

1) приписать слева к слову символ *        →*

2) передвижение * на правый конец слова          *a→a*

*b→b*

*c→c*

3) замена * на а         * a

Если указать формулы подстановки именно в такой последовательности, то исполнение алгоритма зациклится на выполнении первой формулы. Чтобы этого не произошло, поместим ее в конец алгоритма, после формулы завершающего типа

1) *a→a*

2) *b→b*

3) *c→c*

4) * a

5) →*

Так как входное слово состоит из символов алфавита {a, b, c}, то все остальные формулы на первом такте окажутся невыполнимыми, и, следовательно, последовательность действий не нарушится:

Пример 5. Составить нормальный алгоритм вычисления функции f(x)=x + 1.

Будем работать с числами, записанными в троичной системе счисления, т. е. со словами в алфавите {0, 1, 2}.

1) *0→0*

2) *1→1*

3) *2→2*

4) *→#

5) 0# 1

6) 1# 2

7) 2#→#0

8) # 1

9) →*

Проиллюстрируем работу алгоритма на примерах.

1. Входное слово – число 1023

2. Входное слово – число 223

В некоторых случаях (примеры 4, 5) не удается построить нормальный алгоритм, эквивалентный данному в алфавите А, если использовать в подстановках алгоритма только символы данного алфавита. Однако можно произвести расширение алфавита. В этом случае говорят, что построенный алгоритм является алгоритмом над алфавитом А, хотя он будет применяться только к словам из А.

Сформулируем два достаточных признака применимости нормального алгоритма к любому входному слову:

1) во всех формулах подстановок левые части непустые, а в правых нет тех символов, которые встречаются в левых частях (гарантирует отсутствие зацикливания, так как в конце концов все формулы станут невыполнимы);

2) в каждой формуле подстановки правая часть короче левой (гарантирует уменьшение длины слова).

Похожие записи

Добавить комментарий