Математическая логика и теория алгоритмов (Лекция 6) Нормальные алгоритмы Маркова Нормальные алгоритмы Маркова, введенные советским математиком А. А. Марковым, представляют собой класс алгоритмов, применимых к словам некоторого алфавита. Каждый нормальный алгоритм Маркова определяется указанием алфавита, в котором он действует, и схемы нормального алгоритма Маркова. Алфавитом может служить любой конечный алфавит. Нормальный алгоритм Маркова определяется следующими правилами: 1. ___________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ 2. ___________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ Рассмотрим пример. В произвольном слове, состоящем из букв {a, b, c}, все подряд стоящие одинаковые буквы заменить одной буквой. Схема нормального алгоритма Маркова имеет вид: 1a → a . a 2b → b . b 3c → c . c Применим эту схему с слову p0 abbbcaa : p0 abbbcaa p1 abbbca p2 abbca p3 abca _____________________________________________________________________________________ Рассмотрим еще пример. Удвоить слово, состоящее из одинаковых символов (для определенности — «x»). Т.е. слово «x» надо преобразовать в «xx», слово «xx» — в «xxxx» и т.д. Схема нормального алгоритма Маркова для этого примера сложнее, чем для примера 1. Нельзя написать x → xx, т.к. в этом случае на каждом шаге нормального алгоритма Маркова к слову будет добавляться символ «x» и этот процесс будет бесконечным. Необходимо контролировать удвоение каждого символа слова так, чтобы каждый символ удвоился только один раз. Для это введём маркер, с помощью которого будем обеспечивать контекст применения удваивающего правила. 1* x Математическая логика и теория алгоритмов (Лекция 6) . x . x* 2* 3 . * Последнее правило вводит «маркер» '*' (или «курсор»), который с помощью первого правила «перескакивает» через текущий символ слова и удваивает его. Применение этой схемы, например, к слову p0 xx последовательно даст слова: p1 *xx p2 xx* x p3 xxxx* p4 xxxx _____________________________________________________________________________________ Пример 3. Дано слово в алфавите {a, b, c}. Упорядочить буквы входного слова в лексикографическом порядке Составим схему: 1 . 2 . 3 . 4 . 5 . 6 . Применим эту схему с слову p0 abcbcabcaa : _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ Математическая логика и теория алгоритмов (Лекция 6) _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ Рекурсивные функции По сути один и тот же метод, применительно к различным областям носит различные названия – это индукция, рекурсия и рекуррентные соотношения – различия касаются особенностей использования. Под индукцией понимается ________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ Под рекурсией понимается ________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ Термин рекуррентные соотношения _______________________________________________ _____________________________________________________________________________________ Базовые схемы 1.___________________________________________________________________________________ _____________________________________________________________________________________ 2.___________________________________________________________________________________ _____________________________________________________________________________________ 3.___________________________________________________________________________________ _____________________________________________________________________________________ Схемы построения рекурсивных функций 4.___________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ 5a.__________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ 5b.__________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ Рассмотрим примеры рекурсивного задания функций: 1. f(0) = 0 f(n) = f(n - 1) + 1 Последовательная подстановка дает: _____________________________________________________________________________________ _____________________________________________________________________________________ Математическая логика и теория алгоритмов (Лекция 6) 2. f(0) = 1 f(n) = n * f(n - 1) Последовательная подстановка дает: _____________________________________________________________________________________ _____________________________________________________________________________________ 3. f(0) = 1 f(1) = 1 f(n) = f(n - 1) + f(n - 2), n >= 2 Последовательная подстановка дает: _____________________________________________________________________________________ _____________________________________________________________________________________ 4. f(0) = 1 f(n) = f(n - 1) + f(n - 2) +…+ 1 = f(i) + 1 Последовательная подстановка дает: _____________________________________________________________________________________ _____________________________________________________________________________________ 5. f(0) = 1 f(n) = 2*f(n - 1) Последовательная подстановка дает: _____________________________________________________________________________________ _____________________________________________________________________________________ 6. f(0) = 1 f(1) = 2 f(n) = f(n - 1) * f(n - 2) Последовательная подстановка дает: _____________________________________________________________________________________ _____________________________________________________________________________________ Построим рекурсивную схему для функций: f(n, m) = n + m _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ f(n, m) = n * m Математическая логика и теория алгоритмов (Лекция 6) _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ f(n, m) = mn _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________