- •Дискретная математика
- •6.050102 “Компьютерная инженерия” содержание
- •1 Теория множеств 7
- •2 Математическая логика 15
- •3 Формальные теории 35
- •4 Теория графов 47
- •5 Элементы теории чисел 80
- •6 Теория алгоритмов 121
- •Введение
- •1 Теория множеств
- •1.1 Множества и подмножества
- •1.1.1 Элементы множества
- •1.2 Аксиомы теории множеств
- •1.3 Способы задания множеств
- •1.4 Операции над множествами
- •1.5 Элементы алгебры множеств
- •1.5.1 Определение алгебры множеств
- •1.5.2 Основные законы алгебры множеств
- •1.5.3 Принцип двойственности
- •2 Математическая логика
- •2.1 Функции алгебры логики (булевые функции)
- •2.1.1 Способы задания булевых функций
- •2.1.2 Логические функции одной переменной
- •2.1.3 Логические функции двух переменных
- •2.2.6 Функционально полные системы булевых функций
- •2.3 Алгебра буля
- •2.3.1 Определение алгебры. Теорема Стоуна
- •2.3.2 Законы алгебры логики
- •2.3.3 Разложения функций по переменным
- •2.3.4 Приведение логических функций
- •2.3.5 Импликанты и имплициенты булевых функций
- •2.3.6 Методы минимизации логических функций
- •2.4 Алгебра жегалкина
- •2.4.1 Преобразование функций в алгебре Жегалкина
- •2.4.2 Переход от булевой алгебры к алгебре Жегалкина
- •3 Формальные теории
- •3.1 Основные принципы построения формальных теорий исчисления
- •3.2 Определение исчисления высказываний
- •3.2.1 Метатеоремы исчисления высказываний
- •3.2.2 Схемы исчисления высказываний
- •3.3 Исчисление предикатов
- •3.3.1 Определение формальной теории pl
- •3.3.2 Принцип резолюции в исчислении предикатов
- •3.3.3 Схемы доказательств в исчислении предикатов
- •4 Теория графов
- •4.1 История теории графов
- •4.2 Основные определения
- •4.3 Способы представления графов
- •4.3.1 Матрицей смежности
- •4.3.2 Матрицей инцидентности
- •4.4 Пути в графах
- •4.4.1 Задача о кратчайшем пути
- •4.4.2 Алгоритм Дейкстры нахождения кратчайшего пути в графе
- •4.5 Транспортные сети
- •4.5.1 Потоки в транспортных сетях
- •4.5.2 Задача нахождения наибольшего потока в транспортной сети
- •4.5.3 Алгоритм Форда и Фалкерсона нахождения максимального потока транспортной сети
- •4.5.4 Транспортная задача
- •4.6 Обходы в графах
- •4.6.1 Эйлеровы графы
- •4.6.2 Алгоритм Флёри нахождения эйлерова цикла
- •4. Если получился цикл, но не ейлеров, то отбрасываем данную последнюю вершину и повторяем пункт 2.
- •4.6.3 Гамильтоновы циклы
- •4.6.4 Метод ветвей и границ.
- •4.6.5 Метод ветвей и границ в задаче о коммивояжёре
- •4.7 Деревья
- •4.7.1 Построение экономического дерева
- •4.7.2 Алгоритм Краскала
- •5 Элементы теории чисел
- •5.1 Модулярная арифметика
- •5.1.1 Алгоритм Евклида для нахождения наибольшего общего делителя
- •5.1.2 Вычисление обратных величин
- •5.1.3 Основные способы нахождения обратных величин
- •5.1.4 Китайская теорема об остатках
- •5.2 Кодирование
- •5.2.1 Оптимальное кодирование
- •5.3 Обнаружение и исправление ошибок
- •5.3.1 Общие понятия
- •5.3.2 Линейные групповые коды
- •5.3.2 Код Хэмминга
- •5.3.3 Циклические коды
- •5.3.4 Построение и декодирование конкретных циклических кодов
- •5.4 Сжатие информации
- •5.4.1 Исключение повторения строк в последующих строках
- •5.4.2 Алгоритм lzw
- •6 Теория алгоритмов
- •6.1. Основные понятия
- •6.1.1 Основные требования к алгоритмам
- •6.1.2 Блок–схемы алгоритмов
- •6.1.3 Представление данных
- •6.1.4 Виды алгоритмов
- •6.1.5 Правильность программ
- •6.1.6 Эффективность алгоритмов
- •6.1.7 Сходимость, сложность, надежность
- •6.2 Универсальные алгоритмы
- •6.2.1 Основные понятия
- •6.2.2 Машины Тьюринга
- •6.2.3 Рекурсивные функции
- •6.2.5 Тезис Черча-Тьюринга
- •6.2.6 Проблема самоприменимости
- •6.3 Языки и грамматики
- •6.3.1 Общие понятия
- •6.3.2 Формальные грамматики
- •6.3.3 Иерархия языков
- •6.4 Параллельные вычисления
- •Рекомендованная литература
6.2.3 Рекурсивные функции
Первоначальной целью теории вычислимости (рекурсии) было придать строгость интуитивной идее вычислимой функции, т.е. функции, значения которой могут быть вычислены или автоматически или каким-либо другим эффективным способом
Рекурсивные функции уже в силу характера своего определения оказываются вычислимыми, т.к. каждая рекурсивная функция задается конечной системой равенств точно охарактеризованного типа в том смысле, что ее значения вычисляются с помощью этой системы равенств по точно формулируемым правилам, причем таким образом, что в итоге для вычисления значений заданной рекурсивной функции получается алгоритм определенного типа.
Очевидно, что к вычислимым функциям следует отнести все константы, т.е. все натуральные числа 0,1,2... . Нет необходимости включать в базис бесконечное множество констант. Достаточно 0 и функции следования f(x)= x+1, (x').
Кроме того в базис включается семейство функций тождества (или введения фиктивных переменных)
(x1,...xn)=xm (m<=n)
Мощным средством получения новых функций из уже имеющихся является суперпозиция. Оператором суперпозиции называется подстановка
(h,g1,...gm)=h(g1(x1,...xn)...gm(x1,...xn)).
Если заданы функции и операторы , то можно считать заданными всевозможные операторы подстановки функций в функции, а также переименования, перестановки и отождествления переменных.
Оператором примитивной рекурсии называются подстановки, удовлетворяющие системе уравнений
f(x1,...,xn)= g(x1,...,xn)
f(x1,...,xn,y+1)= h(x1,...,xn,y,f(x1,...,xn,y)),
которая называется схемой примитивной рекурсии.
Функция называется примитивно-рекурсивной, если она может быть получена из константы 0, функции следования и функций с помощью конечного числа применений операторов суперпозиции и примитивной рекурсии .
В формально-индуктивном виде это определение выглядит следующим образом:
1. Функции 0, Х', для всех натуральных m и n являются примитивно-рекурсивными.
2. Если h,g1,...gm – примитивно-рекурсивные функции, то – примитивно-рекурсивная функция.
3. Если g(x1,...xn),h(x1,...xm,y,z) – примитивно-рекурсивные функции, то – примитивно-рекурсивная функция.
4. Других примитивно-рекурсивных функций нет.
Примерами примитивно-рекурсивных функций являются
1. .
2. .
3. .
Отношение R(x1,...xn) называется примитивно-рекурсивным, если примитивно-рекурсивна его характеристическая функция
.
6.2.4 ПР-операторы
Оператор называется примитивно-рекурсивным (ПР), если он сохраняет примитивную рекурсивность функций, т.е. если результат его применения дает снова примитивно-рекурсивную функцию.
Операторы и являются ПР-операторами по определению.
Еще один ПР-оператор – оператор условного перехода , который по функциям и и предикату строит функцию
Существует теорема: если , и вычислимы по Тьюрингу, то разветвление и по также вычислимо.
В силу этой теоремы ПР-оператор вычислим по Тьюрингу.
Обобщение опреатора перехода на случай многозначного перехода по , из которых истиннен всегда только один , также примитивно-рекурсивно.
Ограниченный оператор минимизации m – применяется к предикатам.
Из предиката с помощью оператора получается функция .
Ограничение z в операторе дает гарантию окончания вычислений, поскольку оно оценивает сверху число вычислений предиката .
Если (ПР-оператор), то для вычисления f понадобится k+1 вычисление g и k вычислений h. В силу конечности общего числа операторов и , использованных для построения f из базисных функций, для любого k можно оценить количество элементарных действий для вычисления f.
Еще один ПР-оператор – оператор одновременной рекурсии – точнее целое семейство .
C его помощью строится рекурсивное описание сразу нескольких функций от (n-1)-ой переменной, причем значение каждой функции в точке y+1 зависит от значения всех функций в точке y.
По существу, совместная рекурсия дает рекурсивное описание функции-вектора.
Подведем некоторые итоги. Из простейших функций - константы 0, функции следования и функций тождества с помощью операторов суперпозиции и примитивной рекурсии может быть получено огромное разнообразие функций, включающих основные функции арифметики, алгебры и анализа (с поправкой на целочисленность). Следует сделать два замечания
1. Все примитивно-рекурсивные функции всюду опре-делены. Это следует из того, что простейшие функции всюду определены, а и это свойство сохраняют.
2. Строго говоря, мы имеем дело не с функциями, а с их примитивно-рекурсивным описанием. Различие здесь имеет тот же смысл, что и различие между функциями и их представлением в виде формул.
Возникает вопрос: все ли функции являются примитивно-рекурсивными? Простые теоретико-множественные соображения пока-зывают, что нет.
Функция называется частично-рекурсивной, если она может быть построена из простейших функций: 0, х`, с помощью конечного числа применений , и m-оператора.
По определению m-оператор применяется к предикатам. Поскольку в теории рекурсивных функций истинность предиката всегда связана со справедливостью некоторого равенства, то m-оператору можно придать стандартную форму:
Будучи применен к вычислимой функции m-оператор снова дает вычислимую функцию.
Однако эта процедура может не привести к результату: когда на данном наборе уравнение не имеет решения. В таком случае функция считается неопределенной.
Т.о. среди рекурсивных функций появляются неполностью опреде-ленные, т.е. частичные функции. Операторы над частичными функциями по-рождают новые частичные функции. При этом характер неопределенности может оказаться довольно сложным, а именно: для данного набора не най-дется способа установить определена ли на этом наборе и придется про-должать процесс вычисления неопределенное время, не зная, остановится он или нет.
Частично-рекурсивная функция называется общерекурсивной, если она всюду определена.