- •Дискретная математика
- •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 Параллельные вычисления
- •Рекомендованная литература
5.4 Сжатие информации
Сжатие информации представляет собой операцию, в результате которой данному коду или сообщению ставится в соответствие белее короткий код или сообщение.
Сжатие информации имеет целью - ускорение и удешевление процессов механизированной обработки, хранения и поиска информации, экономия памяти ЭВМ.
5.4.1 Исключение повторения строк в последующих строках
Метод основан на том, что в сжатых массивах повторяющиеся элементы старших разрядов заменяются некоторым условным символом.
Очень часто обрабатываемая информация бывает представленной в виде набора однородных массивов, в которых элементы столбцов или строк массивов расположены в нарастающем порядке. Если считать старшими разряды, расположенные левее данного элемента, а младшими - расположенными правее, то можно заметить, что во многих случаях строки матриц отличаются друг от друга в младших разрядах. Если при записи каждого последующего элемента массива отбрасывать все повторяющиеся в предыдущем элементы, например в строке стоящие подряд элементы старших разрядов, то массивы могут быть сокращены от 2 до 10 и более разрядов.
1) Для учета выброшенных разрядов вводится знак раздела , который позволяет отделить элементы в свернутом массиве. В случае полного повторения строк записываются соответствующее количество . При развертке вместо знака восстанавливаются все пропущенные разряды, которые были до элемента, стоящего непосредственно за в сжатом тексте.
Для примера рассмотрим следующий массив:
9 5 7 0 1 2 4
9 5 7 0 1 2 5
9 5 7 0 3 8 6
9 5 7 0 3 9 0
1 2 3 4 5 6 7
1 2 3 4 5 9 1
1 2 3 4 5 9 3
Свернутый массив будет иметь вид:
9 5 7 0 1 2 4
5 3 8 6
9 0 1 2 3 4 5
6 7 9 1 3
Расшифровка (развертывание) происходит с конца массива. Переход на следующую строку происходит по двум условиям: либо по заполнению строки, либо при встрече :
9 5 7 0 1 2 4
. . . . . . 5
. . . . 3 8 6
. . . . . 9 0
1 2 3 4 5 6 7
. . . . . 9 1
. . . . . . 3
Пропущенные цифры заполняются автоматически по аналогичным разрядам предыдущей строки. Заполнение производится сначала массива.
2). Этот метод можно развить и для свертывания массивов, в которых повторяющиеся разряды встречаются не только с начала строки. Если в строке один повторяющийся участок, то кроме добавляется еще один дополнительный символ К, означающий конец строки массива. Расшифровка ведется от К до К. Длина строки известна. Нужно, чтобы оставшиеся между К цифры вместе с пропущенными разрядами составляли полную строку. При этом нам все равно, в каком месте строки выбрасывать повторяющиеся разряды, лишь бы в строке было не долее одного участка с повторяющимися разрядами.
Пример.
Исходный массив Свернутый массив
1 2 3 4 5 6 7 1 2 3 4 5 6 7
1 2 1 3 4 8 6 К 8 6 К 2 1
2 1 3 4 5 2 4 2 4 К 9 К
2 1 3 4 5 2 9 4 2 9 К К
4 2 9 4 5 2 9 К 5 1 К
4 2 9 4 5 2 9
4 2 9 4 5 2 9
5 2 9 4 5 2 1
Если в строке есть два повторяющихся участка, то, используя этот метод, выбрасываем больший
Процесс развертывания массива осуществляется следующим образом: переход на следующую строку происходит при встрече К
1 2 3 4 5 6 7
. . . . . 8 6
2 1 . . . 2 4
4 2 9 . . . .
. . . . . . .
. . . . . . .
5 . . . . . 1
Пропущенные цифры заполняются по аналогичным разрядам предыдущей строки, начиная с конца массива.
3). Если в строке массива несколько повторяющихся участков, то можно вместо вставлять специальные символы, указывающие на необходимое число пропусков.
Например, если обозначить количество пропусков, соответственно X - 2, Z - 3, Y - 5, то исходный и свернутый массивы будут иметь вид
Исходный массив Свернутый массив
1 9 7 1 1 3 7 4 3 0 1 9 7 1 1 3 7 4 3 0
1 9 7 1 1 3 7 4 3 1 Z X X 1 Z XX 2 Y2
1 9 7 1 1 3 7 4 3 2 Y X 0 Z X X1 ZXX
1 9 7 2 1 3 7 4 3 0 2
1 9 7 2 1 3 7 4 3 1
1 9 7 2 1 3 7 4 3 2
Процесс развертывания массива осуществляется следующими образом: длина строки известна, количество пропусков определяется символами Х, Y, Z:
1 9 7 2 1 3 7 4 3 0
. . . . . . . . . 1
. . . . . . . . . 2
. . . 2 . . . . . 0
. . . . . . . . . 1
. . . . . . . . . 2
Пропущенные цифры заполняются по аналогичным разрядам предыдущей строки. Условием перехода на следующую строку является заполнение предыдущей строки.