- •Оглавление
- •Глава 1. Алгебраические системы 17
- •Глава 2. Элементы комбинаторики 88
- •Глава 3. Основы теории графов 101
- •Глава 4. Основы математической логики 169
- •4.1.1.4. Эквивалентные преобразования формул 179
- •4.1.4. Выполнить подстановку: 247
- •Глава 5. Основы теории алгоритмов 252
- •Глава 6. Конечные автоматы 289
- •Введение
- •Глава 1. Алгебраические системы
- •1.1 Множества
- •1.1.1. Четкие множества
- •1.1.2. Нечеткие множества
- •1.2. Соответствия, отображения и функции
- •1.2.1. Четкие отображения и функции
- •1.2.2. Нечеткие отображения
- •1.3. Отношение
- •1.3.1. Четкие отношения
- •1.3.2. Нечеткое отношение
- •1.4. Элементы общей алгебры
- •1.5. Булева алгебра
- •1.5.1. Булевы операции
- •1.5.2. Законы булевой алгебры
- •1.5.3. Формула булевой функции
- •1.5.4. Описание булевой функции
- •1.5.5. Суперпозиция булевых функций
- •1.5.6. Свойства булевых функций
- •1.5.6.1. Самодвойственные булевы функции
- •1.5.6.2. Монотонные булевы функции
- •1.5.6.3. Линейные булевы функции
- •1.5.6.4. Функции, сохраняющие “0”
- •1.5.6.5. Функции, сохраняющие “1”
- •1.5.6.6. Функционально полные системы
- •1.5.7. Разложение булевых функции
- •1.5.7.1. Днф булевой функции
- •1.5.7.2. Кнф булевой функции
- •Алгоритм преобразования формулы к скнф:
- •1.5.8. Минимизация булевых функций.
- •1.5.8.1.Минимизация днф булевой функции
- •1.5.8.2. Минимизация кнф булевой функции
- •1.6. Алгебра четких множеств
- •1.6.1. Операции над множествами
- •1.6.2. Законы алгебры множеств
- •1.6.3. Эквивалентные преобразования формул
- •1.6.4. Композиция отображений и отношений
- •1.6.5. Поиск неизвестного множества
- •1.7. Алгебра нечетких множеств
- •1.7.1. Операции над нечеткими множествами
- •1.7.2. Композиция нечетких отображений
- •1.7.3. Композиция нечетких отношений
- •1.7.4. Свойства нечетких отношений
- •Вопросы и задачи
- •Глава 2. Элементы комбинаторики
- •2.1. Размещение из n элементов по k
- •2.2. Перестановка элементов
- •2.3 Сочетание из n элементов по k
- •2.4. Разбиение множества
- •2. 5 Правила комбинаторики
- •Вопросы и задачи
- •Глава 3. Основы теории графов
- •3.1. Граф и его характеристики
- •3.2. Описание графа
- •3. 3. Числа графа
- •3.4. Операции над графами
- •3.4.1. Унарные операции
- •3.4.1.1 Поиск дополнительного графа
- •3.4.1.2. Введение и удаление вершин графа
- •3.4.1.3. Стягивание вершин графа
- •3.4.1.4. Введение и удаление ребер графа
- •3.4.1.5. Поиск плотности и неплотности графа
- •3.4.1.6. Поиск числа компонент связности графа
- •3.4.1.7. Поиск устойчивости графа
- •3.4.1.8. Поиск цикломатического числа графа
- •3.4.1.9. Поиск хроматического числа графа
- •3.4.2. Бинарные операции
- •3.4.2.1. Объединение графов
- •3.4.2.2. Пересечение графов
- •3.4.2.3. Композиция графов
- •3.4.2.4. Соединение графов
- •3.4.2.5. Прямое произведение графов
- •3.4.2.6. Изоморфизм графов
- •3.5. Некоторые алгоритмы на графах
- •3.5.1. Построение покрывающего остова
- •3.5.2. Построение остова минимального веса
- •3.5.3. Поиск кратчайших путей в сети.
- •3.5.4. Поиск максимального потока в сети
- •3.5.5. Метод критического пути в управлении
- •3.6. Нечеткие графы
- •Вопросы и задачи
- •Глава 4. Основы математической логики
- •4.1. Логика высказываний
- •4.1.1. Алгебра высказываний
- •4.1.1.1. Логические операции
- •4.1.1.2. Правила записи сложных формул.
- •4.1.1.3. Законы алгебры высказываний
- •4.1.1.4. Эквивалентные преобразования формул
- •4.1.1.5. Нормальные формы формул
- •4.1.2. Исчисление высказываний
- •4.1.2.1. Интерпретация формул
- •4.1.2.2. Аксиомы и правила введения и удаления логических связок
- •4.1.2.3. Метод дедуктивного вывода
- •4.1.2.4. Принцип резолюции
- •4. 2. Логика предикатов
- •4.2.1. Алгебра предикатов
- •4.2.1.1. Законы алгебры предикатов
- •4.2.1.2. Предваренная нормальная форма формулы
- •4.2.1.3 Сколемовская стандартная форма формулы
- •4. 2. 2. Исчисление предикатов
- •4.2.2.1. Правила подстановки
- •4.2.2.2. Правила введения и удаления кванторов
- •4.2.2.3. Правила заключения
- •4.2.2.4. Метод дедуктивного вывода
- •4.2.2.5. Принцип резолюции
- •4.2.2.6. Логическое программирование
- •4.3. Логика реляционная
- •4.3.1 Реляционная алгебра
- •4.3.1.1. Унарные операции
- •4.3.1.2. Бинарные операции
- •4.3.1.3. Правила реляционной алгебры
- •4.3.2. Реляционное исчисление
- •4.3.3. Языки реляционной логики
- •4.4. Нечеткая логика
- •4.4.1. Нечеткое исчисление
- •4.4.2. Экспертные системы
- •Вопросы и задачи
- •Глава 5. Основы теории алгоритмов
- •5.1. Рекурсивные функции
- •5.1.1. Базовые функции
- •5.1.2. Элементарные операции
- •5.2. Машина Тьюринга
- •5.2.1. Описание машины Тьюринга
- •5.2.2. Примеры машин Тьюринга
- •5.2.3. Композиция машин Тьюринга
- •5.3. Нормальные алгоритмы Маркова
- •5.4 Сложность вычислений
- •Вопросы и задачи
- •Глава 6. Конечные автоматы
- •6.1. Абстрактный автомат
- •6.1.1. Типы конечных автоматов
- •6.1.2. Описание автоматов
- •6.1.3. Автоматное моделирование алгоритмов
- •6.1.3.1. Автомат Мили - модель управляющего автомата
- •6.1.3.2. Автомат Мура - модель управляющего автомата
- •6.1.3.3. Микропрограммный автомат
- •6.1.4. Эквивалентность автоматов
- •6.1.5. Эквивалентность внутренних состояний автомата
- •6.1.5.1. Детерминированный автомат
- •6.1.5.2. Недетерминированный автомат
- •6.2. Структурный автомат
- •6.2.1. Произведение автоматов
- •6.2.1.1. Последовательное соединение автоматов
- •6.2.1.2. Параллельное соединение автоматов
- •Обратная связь автоматов
- •6.2.3. Сумма автоматов
- •6.2.4. Структурный автомат и кодирование
- •6.3. Логическое проектирование автоматов
- •6.3.1. Кодирование алфавитов автомата
- •6.3.2. Автоматы без “памяти”.
- •6.3.2.1. Формирование оператора
- •6.3.2.2. Формирование системы операторов
- •Логическая схема комбинационного автомата
- •6.3.3. Автоматы с “памятью”
- •6.3.3.1. Формирование оператора
- •6.3.3.2. Формирование оператора
- •.3.3.3. Логическая схема автомата с “памятью”
- •Вопросы и задачи
- •Литература
- •Предметный указатель
5.2.3. Композиция машин Тьюринга
Для графического изображения основных операций алгоритма приняты обозначения блоков, показанные на рис. 5.15
Последовательное и/или параллельное соединение различных блоков позволяет организовать вычисление любых частично-рекурсивных функций. Общую схему соединения нескольких блоков от “начало” до “конец” называют блок-схемой алгоритма.
Оператор суперпозиции. Если даны m-местная функция h=(z1, z2,...zm, у) и m n-местных функций gi=(x1, х2,....хn, zi), где 1 i m, которые вычислимы по Тьюрингу, то функция f=(x1, х2,...хn, у) также вычислима на машине Тьюринга.
Рассмотрим машину Тьюринга только для одного случая, когда n=1 и m=1. Тогда f=(x, y)=S11 h((z, y), g(x, z)).
Для того, чтобы вычислить по заданным значениям x функцию у=f(х), необходимо и достаточно вычислить значение z=g(х), а по ее значениям вычислить y=h(z)=h(g(х))=f(x).
Таким образом, если h=(z, у) и g=(х, z) вычислимы по Тьюрингу, то их суперпозиция h(g(х))=f(х)=у также вычислима.
Весь процесс вычисления опирается на две машины Тьюринга:
шаг 1: вычислить для х значение z=g (х):
Tg: qí|x+1qk|g (x+1) +1.
шаг 2: вычислить для z=g(х) значение y=h(g(х)):
Th : qí|g (x+1) +1qk|h (g (x+1)) +1.
Вычисленное значение функции h есть значение искомой функции, т.е. y=f(x)=h(g(x)).
Если каждый шаг вычислительного процесса представить отдельной машиной Тьюринга, то их последовательное соединение исполняет оператор суперпозиции.
Если п 1и m 1, то необходимо вычислять m функций gi,, каждая из которых опирается на n независимых переменных xi, а затем значения этих функций использовать в качестве независимых переменных zi функции h.
Алгоритм вычисления оператора суперпозиции:
шаг 1: вычислить для заданных значений x1, х2,...хn функции
gi (x1, х2,...хn) , где I i m:
Tg:qо|x1+1 #|x2+1#...#|xn+1 qk|g1(x1+1, x2 +1,.. xn+1)+1#..|gm (x1+1, x2+1,... xn+1) +1;
шаг 2: вычислить для полученных значений gi (x1, х2,...хn) функцию
h(g1, g2,...gn):
Th:qо|g1(x1+1, x2+1,.. xn+1) +1 #...|gm(x1+1, x2+1,.. xn+1) +1
qk|h(g1+1, g2 +1,.. gm+1)+1.
Вычисленное значение функции h есть значение искомой функции у=f(x1, х2,...хn)=h(gi(x1, х2,...хn), g2(x1, х2,...хn),...gm(x1, х2,...хn)).
Оператор рекурсии. Если даны n-местная функция g(x1, х2,...хn) и (n+2)-местная функция h(x1, х2,...хn, y, f(x1, х2,...хn, y)), которые вычислимы на машине Тьюринга, то функция f(x1, х2,...хn,, y+1)=h(x1, х2,...хn, у, f(x1, х2,...хn, y)) также вычислима на машине Тьюринга.
Для иллюстрации этой схемы рассмотрим случай для n=1, т.е.
g(x), h(x, y, f(x, y)) и f(x, y+1)= h(х, у, f(х, у)).
При реализации на машине Тьюринга оператора примитивной рекурсии последняя должна вычислять значения f(x, i+1) до тех пор, пока iу. При достижении i=у процесс вычисления прекращается, и результат вычисления имеет вид f(х, у+1)=h(х, у, f(х, у)).
Итак, машина Тьюринга имеет задание:
Tf: qо|x+1# |y+1# qk|f (x+1; y+1) +1 # .
Алгоритм вычисления оператора рекурсии:
шаг 1: вычислить для заданного значения х функцию g(х);
Tg: qо|x+1 #|y+1qk|x+1 #|y+1#|g(x+1) +1 ,
если g является базовой функцией, то процесс ее вычисления приведен на машинах Т1, Т2, Т3;
шаг 2: ввести переменную i для счета символов слова (у+1):
Ti: qо|x+1#|y+1#|g (x+1) +1qk|i+1#|x+1#|y+1 #|g (x+1) +1;
установить i = 0;
шаг 3: вычислить значение функции h(х, i, f (х, i)):
Th: qo|i+1#|x+1#|y+1 #|g(x+1) +1 qk|i+1#|x+1#|y+1 #|h((x+1), i, f (x +1, i)) +1;
шаг 4: проверить i = у;
a) если i у, то принять i = i+1 и перейти к шагу 3,
b) если i = у перейти к шагу 5;
для проверки условия i = у использовать Т12;
шаг 5: удалить с ленты слова |y+1, |x+1 , | y+1:
Tk : qí|y+1#|x+1#|y+1#|h (x+1, y, f (x+1, y))+1# qk|h (x+1), y, f (x +1, y))+1#;
шаг 6: выдать результаты расчетов:
qk|h (x+1), y, f (x +1, y))+1# |f (x +1, y+1)+1#.
Если каждый шаг вычислительного процесса представить отдельной машиной Тьюринга, то их последовательное соединение (кроме машины, реализующей шаг 4), обеспечивает поиск значения функции f (х; у). Выход на шаге 4 должен поступить на входы машины Тh или Tk, т.е. машина, реализующая шаг 4, имеет два выхода и реализует предикат. На рис. 5.19 приведена схема соединения машин Тьюринга для оператора примитивной рекурсии.
Если функции g(х) и h(х, у, f(х, у)) не базовые, но вычислимые по схеме примитивной рекурсии, то функция f(х, у) также вычислима на машине Тьюринга.
Оператор минимизации. Для определения наименьшего корня (x1, х2,...хn)=y(f(x1, х2,...хn, y)=0) необходимо организовать последовательное приращение вспомогательного аргумента у = 0. 1. 2.... и сравнивать значение функции f(x1, х2,...хn, y) с базовой функцией Сn=0.
Алгоритм вычисления оператора минимизации:
шаг 1: ввести переменную i в функцию f(x1, x2, .. xn, y):
Ti: qо| f(x1+1# x2+1#... Xn+1, y+1)qk| f(x+11# x2+1#... Xn+1# i+1)#;
установить i = 0;
шаг 2: вычислить значение функции f(х1, x2,...xn, i):
Tf: qo| f(x+11# x2+1#... Xn+1# i+1)# qk| f(x+11# x2+1#... Xn+1# i+1)#;
если f(x1, x2, .. xn, i)=0, то конец. Принять |i+1=| (x+11# x2+1#... Xn+1)#;
если f(x1, x2, .. xn, i) 0, то принять i=i+1 и перейти к шагу 2:
Tf: qo| f(x+11# x2+1#... Xn+1# (i+1))+1# qk| f(x+11# x2+1#... Xn+1# (i+1))+!#.
В приведенных примерах показано, что базовые функции и элементарные операторы рекурсивных функций вычислимы на машине Тьюринга. Следовательно, любая частично рекурсивная функция может быть вычислена на машине Тьюринга. И наоборот, любая вычислимая на машине Тьюринга функция является частично рекурсивной.
В 70-е годы прошлого века была предложена алгоритмическая модель, представляющая собой идеализированную ЭВМ. Эта модель состоит из бесконечного числа регистров R1, R2, R3,..., в каждом из которых может быть записано натуральное число из N0.. Часть этих регистров используют для хранения команд (аналог левой полуленты), остальные - для хранения исходных данных, промежуточных и окончательных результатов вычислений (аналог правой полуленты). Такая модель позволяет организовать произвольный доступ к ячейкам памяти (МПД).
Набор команд МПД включает:
команду обнуления: действие команды Z(n) заключается в замене содержимого регистра Rn на 0;
команду прибавления единицы: действие команды S(n) заключается в увеличении содержимого регистра Rn на 1;
команду переадресации: действие команды T(m, n) заключается в замене содержимого регистра Rn числом rm, хранящимся в регистре Rm;
команду условного перехода: действие команды заключается в сравнении содержимого регистров Rn и Rm:
- если rn=rm, то перейти к исполнению команды qi;
- если rnrm, то перейти к исполнению команды qj.
Алгоритм может быть реализован двояко: он может быть ”встроен” в управляющее устройство или записан программой в память машины. В первом случае машина является специализированной и может выполнять только данный алгоритм. Во втором машина является универсальной и может выполнять алгоритм, заданный программой.