- •Дискретная математика
- •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.6 Проблема самоприменимости
- •6.2.5 Тезис Черча-Тьюринга
- •6.3 Языки и грамматики
- •6.3.1 Общие понятия
- •6.3.2 Формальные грамматики
- •6.3.3 Иерархия языков
- •6.4 Параллельные вычисления
- •Рекомендованная литература
6.3.2 Формальные грамматики
Терминальные символы – это символы алфавита Т. Нетерминальные символы образуют множество символов N, не входящих в Т и использующиеся на промежуточных шагах порождающего процесса.
Начальным символом называется нетерминальный символ, из которого выводятся все строки языка.
Сам по себе порождающий процесс состоит в применении на каждом шагу одного из правил преобразований или продукции. Этот процесс преобразует заданную строку в новую строку; процесс заканчивается либо когда ни одна из продукций не может быть применена, либо когда строка состоит из одних термальных символов.
Формальная
грамматика G
есть четверка G=(N,T,E,P),
где N
–
множество нетерминальных символов, T
– множество терминальных символов, E
– начальный символ, P
– множество продукций , и
Каждая новая строка в процессе вывода должна получаться из уже выведенной строки применением продукции.
Предложение – это строка, состоящая только из терминальных символов, выводимая из начального символа.
Язык
L,
определяемый грамматикой G,
есть множество предложений, выводимых
в G
из L:
.
6.3.3 Иерархия языков
Продукции позволяют осуществлять самые pазные трансформации строк. Чаще всего языки делят на четыре типа, в зависимости от ограничений, налагаемых на грамматику.
В наиболее общем типе грамматике на продукции не накладывается никаких ограничений. В частности, допустимы продукции, исключающие символы. И на промежуточных шагах допустимы изменения и укорачивания строк. Грамматика без ограничений называется грамматикой типа 0.
Простейшим ограничением является требование, чтобы правая часть каждой продукции имела по крайней мере столько же символов, что и левая. Грамматика такого вида называется грамматикой типа 1 или неукорачивающей контекстно-зависимой грамматикой.
Если левая часть продукции ограничивается одним нетерминальным символом, то ее применение не зависит от контекста, в котором этот символ появляется в исходной строке. Грамматика с таким ограничением называется грамматикой типа 2 или контекстно-свободной грамматикой.
Третий тип ограничений, накладываемых на продукции, ограничивает число терминальных и нетерминальных символов на каждом шаге вывода.
Когда не более чем один нетерминальный символ используется как в правой, так и в левой части продукции, то такая продукция называется линейной. Если нетерминал находится справа от всех символов правой части, такая продукция называется праволинейной. Если нетерминал находится левее всех других символов, то продукция называется леволинейной. Грамматика называется праволинейной, если каждая из ее продукций является праволинейной.
Язык называется регулярным, если он может быть порожден праволинейной или леволинейной грамматикой.
6.4 Параллельные вычисления
Быстродействие ЭВМ повышалось за счет увеличения скорости срабатывания логических элементов. За последние десятилетия скорость выполнения операций и взаимодействия с памятью возросла на несколько порядков. Дальнейшее увеличение скорости стало ограничиваться причинами физического характера.
Одним из путей обхода ограничения скорости явялется перестройка вычислительных систем на параллельное выполнение большого числа операций.
Пусть при решении некоторого класса задач удалось заставить каким-то образом каждый процессор выполнять полезную работу и при этом использовать каждое устройство памяти. При благоприятных условиях можно рассчитывать на пропорциональное числу процессоров и числу устройств памяти увеличение эффективности. Эта идея привела к развитию многопроцессорных систем, структурированных процессоров для обработки массивов, ассоциативных процессоров и конвейерных процессоров: eсли ЭВМ с одним процессором и с одним устройством памяти не удовлетворяет потребностям решения, то возьмем несколько устройств памяти, несколько процессоров и объединим их в единую систему, связав каналами передачи информации.
Не возникло бы проблем, если бы большое число устройств всегда можно было бы связать коммуникационной сетью, обеспечивающей передачу информации между устройствами со скоростью, существенно превышающей скорость переработки информации процессорами или хотя бы соизмеримой с ней. Пока таких коммуникационных сетей нет.
Прямая связь каждого устройства с каждым приводит к резкому усложнению сети с ростом числа устройств.
За краткую историю параллельных вычислений выработалось эмпирическое правило, называемое эффектом Амдаля: для достаточной эффективности вычислений на параллельной машине с m процессорами вычисления должны распадаться на m потоков данных, причем нужно, чтобы последовательно выполнялась существенно меньшая, чем 1/m доля сегментов. Эффект Амдаля основан на отсутствии внутреннего параллелизма в большинстве современных программ.
Имеется много численных методов, которые нельзя эффективно реализовать ни на каких многопроцессорных системах.
Следующая идея повышения быстродействия – организация конвейера.
Процесс выполнения операции в процессоре распадается реально на ряд этапов. В общем случае при реализации одной операции в каждый момент времени работает только одно из устройств, остальные простаивают из-за отсутствия работы. Положение меняется, если нужно выполнить не одну операцию а большое их число, причем не зависящих друг от друга. По принципу конвейера не нужно ждать окончания всего процесса выполнения предыдущей операции, достаточно, чтобы у нее был закончен первый этап. Реализация конвейера позволяет максимально загрузить процессор выполнением полезной работы. Однако за это приходится платить необходимостью организовывать данные специальным образом, объединяя в отдельные потоки независимые однотипные операции.
Если при реализации какого-либо алгоритма можно так организовать вычисления, что все функциональные устройства будут загружены выполнением полезной работы, то в целом на данной вычислительной системе будет достигнута максимально возможная, при данном составе устройств, скорость решения задачи.
