- •Предисловие
- •Введение
- •Раздел 1. ИСЧИСЛЕНИЯ
- •Глава 1. Исчисление высказываний
- •1.1. Алгебра высказываний
- •1.2. Приложения алгебры высказываний
- •1.2.1. Функции алгебры высказываний (булевы функции)
- •1.2.2. Полнота и замкнутость систем булевых функций
- •1.2.4. Приложение в теории множеств
- •1.2.3. Метод синтеза релейно – контактных схем
- •1.3. Аксиоматическая система в исчислении высказываний
- •Глава 2. Исчисление предикатов
- •2.1. Предикаты
- •2.2. Система аксиом в исчислении предикатов
- •2.3. Формальная арифметика
- •Раздел 2. АЛГОРИТМЫ
- •Глава 1. Алгоритмы и вычислимые функции
- •1.1. Машина Тьюринга
- •1.2. Частично рекурсивные функции
- •1.2.1. Класс примитивно рекурсивных функций
- •1.2.2. Рекурсивно перечислимые множества и предикаты
- •1.2.3. Порожденные множества
- •1.2.4. Функции на n-ках
- •1.2.5. Рекурсия 2-й ступени
- •1.2.6. Универсальные функции
- •1.2.7. Универсальные частично рекурсивные функции
- •Глава 2. Приложения теории алгоритмов
- •2.1. Теоремы о рекурсии и неполноте
- •2.2. Разрешимость и неразрешимость формальных систем
- •Глава 3. Сложность вычислений
- •3.1. Меры сложности
- •3.2. Теорема об ускорении
- •3.3. Классы сложности. Элементарные функции
- •Список рекомендуемой литературы
- •Оглавление
Раздел 2. АЛГОРИТМЫ
Г л а в а 1
АЛГОРИТМЫ И ВЫЧИСЛИМЫЕ ФУНКЦИИ
А л г о р и т м есть точное предписание, согласно которому по любому входному объекту из данного класса входных объектов можно эффективно получать выходные объекты. Например, алгоритм деления целых (вещественных) чисел «углом» или алгоритм умножения двух квадратных матриц порядка n. Ограничимся дискретными предписаниями, входные и выходные данные которых представляют собой конструктивные объекты. Конструктивные объекты можно кодировать словами в некотором алфавите, отсюда свойство массовости алгоритма. Получив входное слово, алгоритм через конечное число элементарных шагов должен построить выходное слово и закончить работу, или на данном входном слове предписание ведет к бесконечной последовательности элементарных шагов, тогда алгоритм не определен на этом слове. Алгоритм должен обладать свойством детерминированности, т. е. каждый элементарный шаг определяется предыдущей ситуацией. Наконец, выполнение вычислений определяется только предписанием (программой) и не зависит от внешних факторов. Точное (математическое) понятие алгоритма было дано А. Тьюрингом в 1936 году, которое получило название машины Тьюринга. А. Тьюринг привел ряд доводов в пользу того, что любые вычислительные процедуры могут быть реализованы на его машине: ТЕЗИС ЧЕРЧА – ТЬЮРИНГА.
1.1.Машина Тьюринга
Ма ш и н а Т ь ю р и н г а снабжена потенциально бесконечной памятью – лентой, разделенной на ячейки, где накапливается информация.
Вкаждый момент количество информации конечно и не имеет верхней грани. На ленте записывается входное слово, черновая работа и выходное слово. Это – слова над внешним алфавитом A. У нас алфавит A = {0,1}
предназначен для вычисления арифметических функций f : Nk → N. Собственно машина, которая осуществляет вычисление, имеет конеч-
ное число возможных «состояний» – внутренний алфавит Q = {q0, q1, …, qs}, и представляет собой конечный список правил вида: qia → bδqj, где
53
i = 1, …, s, j = 0, …, s; δ {R,L,S}; a,b A; qi,qj Q. В каждой ячейке рабочей части ленты записан один из символов внешнего алфавита. В
каждый момент времени t = 0, 1, … считывается содержимое одной ячейки и, согласно команде qia → bδqj,, символ a заменяется символом b, и происходит сдвиг на следующую ячейку, соответственно, вправо (R), влево (L), на месте (S), после чего управление передается команде qjc → ..., где c – символ ячейки, куда сдвинулась головка. Состояние q0 означает прекращение работы машины. Машина Тьюринга вычисляет частичную арифметическую функцию f (k)(x1, …, xk), если машина Тьюринга всякий набор (a1, …, ak) Arg f перерабатывает в число b = f (k)(a1, …, ak). Функция называется вычислимой на машине Тьюринга, если существует вычисляющая ее машина.
Для удобства вычислений договоримся о следующем: 0 будет изображаться «|», 1, соответственно, – «||» и т. д.; вычисления начинать с левого конца слова, записанного на ленте машины, и заканчивать в начале заключительного слова, стерев предварительно черновую работу; кортежи изображать наборами «|» с пробелами из 0. Для удобства «|» будем изображать 1.
Примеры вычислений на машине Тьюринга
1. x + y: |
2. rm (x,3): |
q11 → 1Rq1 |
q11 → 0Rq2 |
q10 → 1Lq2 |
q21 → 0Rq3 |
q21 → 1Lq2 |
q31 → 0Rq4 |
q20 → 0Rq3 |
q41 → 0Rq2 |
q31 → 0Rq4 |
q20 → 1Sq0 |
q41 → 0Rq0 |
q30 → 1Lq2 |
|
q40 → 1Lq3 |
3. χx<y(x,y): q11 → 1Rq1
q10 → 0Lq2 q21 → 0Lq3
q31 → 1Rq4 q40→ 0Rq4 q41 → 0Rq5
*q51 → 1Lq6
q60 → 0Lq6 q61 → 1Sq2 q30 → 0Sq7 q70 → 0Rq7 q71 → 0Rq8
|
|
q81 1Sq9 |
|
|
|
q |
|
0 |
|
0Sq12 |
|
|
|
|
|
|
|||||
|
8 |
|
|
8q5 |
|
0→ |
|
0Lq |
|
|
|
|
|
|
|
||||||
|
|
→ |
|
|
> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
> |
|
|
|
> |
|
12 |
|
→ |
|
|
12 |
q |
|
|
|
Lq |
|
|||
|
< |
|
→ |
|
|
> |
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
< |
|
|
|
|
|
|
|
|
|
|
80 |
|
1 –11 |
|||
(x < y) |
|
q9 |
1 0Rq9 (x |
|
y) |
> |
|
|
|
|
|
|
|
Sq |
|
(x = y) |
→ |
||||
|
|
>q |
12 |
1 |
|
|
1 |
13 |
|
|
|
|
|||||||||
|
> |
|
|
|
> |
|
→ |
|
(q 0 1Sq |
|
|||||||||||
|
|
|
|
|
> |
|
|
|
|
|
|
|
|
||||||||
|
> |
|
|
|
|
> |
|
|
|
1 → 0Lq13 |
|
|
→ |
|
|
||||||
|
>q90 → 1Sq0 |
|
|
>q13 |
|
11 |
|
0 |
|||||||||||||
|
> |
|
|
|
|
> |
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
: |
|
|
|
|
> |
|
|
|
|
→ |
|
|
|
|
|
|
|
|
|
|
|
> |
|
|
|
|
> |
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
: |
|
|
|
0 |
|
|
0S–q8 |
|
|
|
|
|
|
|||
|
|
|
|
|
>q13 |
|
|
|
|
|
|
|
|
||||||||
54
