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

advertisement
Математическая логика и теория алгоритмов (Лекция 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
_____________________________________________________________________________________
_____________________________________________________________________________________
_____________________________________________________________________________________
_____________________________________________________________________________________
Download