- •Алгоритмы и сложность вычислений. Введение
- •49. Определение нормальных алгоритмов Маркова.
- •§ 1. Нормальные алгоритмы
- •50. Определение Машины Тьюринга.
- •§ 2. Машины тьюринга
- •51. Определение частично рекурсивных функций. Основные функции.
- •1. Матрицы Адамара и их свойства.
- •2. Матрицы Силъвестра-Адамара их свойства.
- •3. Преобразования Уолша-Адамара булевых функций.
- •4. Преобразование Фурье булевой функции.
- •5. Схема Грина быстрых преобразований Уолша и Фурье.
- •6. Критерий нелинейности булевых функций.
- •7. Расстояние до линейных структур.
- •8. Порядок нелинейности.
- •9. Совершенно нелинейные функции.
- •10. Расстояние до аффинных функций и корреляция.
- •11. Булевы функции от нечетного числа аргументов.
49. Определение нормальных алгоритмов Маркова.
§ 1. Нормальные алгоритмы
Каждый нормальный алгоритм (НА) является определенным процессом преобразования слов в некотором конечном алфавите и задается набором допустимых элементарных преобразований и правилами, определяющими порядок применения этих преобразований. При этом в качестве элементарного преобразования используется замена одного вхождения подслова в слове некоторым другим (или тем же словом). Всевозможные замены для заданного НА определяются его схемой, а последовательность проведения замен – схемой и некоторыми дополнительными соглашениями. Эти соглашения одни и те же для всех НА, а потому НА, по существу, однозначно определяются алфавитом и схемой.
Определение 1.
Схемой нормального алгоритма
в алфавите
![]()
называется упорядоченная последовательность
(1)
слов
в алфавите
где
- слова в алфавите
,
а
есть слово
или
При этом слово
схемы (1) называется ее
-й
формулой с левой частью
и правой частью
.
Формула
называется простой, если
есть
и заключительной, если есть
Действие
НА
на слово
в алфавите
описывается следующим определением.
Определение
2. Пусть
- слово в алфавите
и хотя бы одно из слов
является его подсловом. Элементарным
преобразованием слова
по нормальному алгоритму
со схемой (1) называется замена в
первого вхождения слова
с наименьшим номером
словом
Если результатом указанного элементарного
преобразования является слово
то пишут
т. е.
или
.
Определение
3. Говорят, что НА
в алфавите
применим к слову
в алфавите
и перерабатывает его
в слово
,
если существует конечная последовательность
слов
(2)
![]()
в которой
![]()
![]()
![]()
или
и слово
не содержит подслов
![]()
В
противном случае говорят, что алгоритм
не применим к слову
Из
приведенных определений естественным
образом извлекается описание процесса
переработки слова
по нормальному алгоритму
(или нормальным алгоритмом
).
А именно, по заданному слову
НА
строит последовательность слов. Если
не содержит подслов
то эта последовательность одноэлементна
и состоит из единственного слова
.
Если же
содержит хотя бы одно из подслов
,
то производится его элементарное
преобразование по НА
в результате чего получается вполне
определенное слово
.
Если при переходе от
к
использовалась заключительная формула,
то искомая последовательность
двухэлементная:
.
В противном случае так же, как и выше,
по слову
строится слово
и т. д. В процессе построения указанной
последовательности могут представиться
три различные возможности: или на
каком-то шаге будет использована
заключительная формула схемы алгоритма,
или появится слово, не содержащее подслов
,
или не произойдет ни того, ни другого.
В превых двух случаях мы получим конечную
последовательность, последнее слово
которой называется результатом применения
НА к слову
и обозначают через
.
В третьем случае процесс преобразования
слов по НА
будет длитться бесконечно, это и означает,
что НА
не применим к
.
Таким
образом, НА
в алфавите
задает частичное отображение множества
всех слов в алфавите
в само себя. Выбирая различные схемы,
мы будем получать различные НА.
Если
- алфавит, содержащий
,
то НА в алфавите
называется нормальным алгоритмом над
алфавитом
.
Приведем
примеры нормальных алгоритмов. При этом
буквой
будет всегда обозначаться пустое слово
(в любом алфавите).
НА в алфавите
со схемой
![]()
перерабатывает
любое слово
в себя, причем последовательность слов,
соответствующая слову
имеет вид:
.
НА со схемой
![]()
не
применим ни к одному слову. Последовательность,
соответствующая слову
будет бесконечной:
![]()
НА
в алфавите
со схемой
![]()
приписывает
к любому слову
слева слово
:
![]()
4.
Построим НА
,
приписывающий к любому слову
справа фиксированное непустое слово
Это сделать несколько сложнее, чем
приписывание слова
слева. Для этого удобнее расширить
алфавит
,
добавив к нему одну новую букву
,
и построить искомый НА в алфавите
(т. е. над
).
Нетрудно проверить, что нужное нам
преобразование будет осуществлять НА
со схемой
![]()
![]()
……………..

Последовательность
слов, соответствующая произвольному
слову
в алфавите
,
для этого НА имеет вид:
![]()
![]()
Очевидно,
что то же самое преобразование слов
будет осущетвлять НА, полученный из
любой перестановкой
формул его схемы. В связи сэтим вместо
первых
формул схемы пишут просто
![]()
так, что вся схема запишется в виде:
![]()

Заметим,
что, выполняя свою задачу приписывания
к словам из
справа слова
,
мы совсем не интересовались переработкой
слов в алфавите
,
содержащих букву
.
Здесь алгоритм
будет действовать иначе. А именно, слово
в алфавите
,
содержащее
вхождений буквы
,
он будет перерабатывать в слово
![]()
где
количество букв
будет равно
,
где
получается из
удалением всех вхождений буквы
(т. е.
есть проекция
в алфавит
).
5.
Построим НА
,
перерабатывающий любое слово
в перевернутое слово
Для этого добавим к
две новые буквы
и возьмем следующую схему
в алфавите
![]()

Проследите в
качестве упражнения, что
для любого слова
в алфавите
.
Приведем еще
примеры НА над числами. Условимся
натуральное число
записывать в виде
вертикальных палочек.
6. НА в алфавите
со схемой
![]()
осуществляет сложение натуральных чисел.
7. НА в алфавите
со схемой

осуществляет умножение натуральных чисел.
