- •Часть 1
- •Содержание
- •Введение
- •1. Введение в теорию множеств
- •Операции над множествами
- •Диаграммы Эйлера – Венна
- •Понятие алгебры
- •Упражнения
- •2. Отношения
- •Операции над отношениями
- •Свойства бинарных отношений
- •Задачи и упражнения
- •3. Нечеткие множества
- •Операции над нечеткими множествами.
- •Задачи и упражнения
- •Элементарные функции k-значных логик и соотношение между ними
- •Разложение функций k-значных логик в первую и вторую формы
- •Замкнутые классы и полнота в k-значных логиках
- •Задачи и упражнения
- •5. Логика высказываний
- •Тождества в алгебре высказываний
- •Булевы формулы
- •Интерпретации
- •6. Булевы функции
- •Способы задания булевой функции
- •Равносильные преобразования формул
- •Нормальные формулы Совершенные нормальные формулы
- •Разложение Шеннона Декомпозиция булевых функций
- •Представление булевой функции картами Карно (Вейча)
- •Минимизация булевых функций
- •Классы булевых функций
- •7. Комбинаторика Введение
- •8. Кодирование
- •Алфавитное кодирование
- •Кодирование с минимальной избыточностью
- •Помехоустойчивое кодирование
- •Сжатие данных
- •Шифрование
- •Криптография
- •Цифровая подпись
- •9. Графы Определение графа
- •Задание графов
- •Связность графа
- •Эйлеровы и гамильтоновы графы
- •Деревья
- •Понятие метрики графа
- •Цикломатическое число, раскраска
- •Изоморфизм графов
- •Орграфы
- •Сети Петри
- •Контрольная работа №1 (варианты заданий)
- •Контрольная работа № 2.
- •Контрольная работа №3
- •Список литературы
8. Кодирование
Вопросы кодирования издавна играли заметную роль в математике. Пример
1. Десятичная позиционная система счисления — это способ кодирования натуральных чисел. Римские цифры — другой способ кодирования натуральных чисел, причем гораздо более наглядный и естественный: палец — I, пятерня — V, две пятерни — X. Однако при этом способе кодирования труднее выполнять арифметические операции над большими числами, поэтому он был вытеснен позиционной десятичной системой.
2. Декартовы координаты — способ кодирования геометрических объектов числами.
Ранее средства кодирования играли вспомогательную роль и не рассматривались как отдельный предмет математического изучения, но с появлением компьютеров ситуация радикально изменилась. Кодирование буквально пронизывает информационные технологии и является центральным вопросом при решении самых разных (практически всех) задач программирования:
представление данных произвольной природы (например, чисел, текста, графики) в памяти компьютера;
защита информации от несанкционированного доступа;
обеспечение помехоустойчивости при передаче данных по каналам связи;
сжатие информации в базах данных.
составление текста программы.
Не ограничивая общности, задачу кодирования можно сформулировать следующим образом. Пусть заданы алфавиты А = {ai,...,аn}, В = {bi,...,bm} и функция F: S В*, где S — некоторое множество слов в алфавите A, S А*. Тогда функция F называется кодированием, элементы множества S — сообщениями, а элементы = F(), S, В* — кодами (соответствующих сообщений). Обратная функция F-1 (если она существует!) называется декодированием.
Если |В| = т, то F называется т-ичным кодированием. Наиболее распространенный случай В = {0,1} — двоичное кодирование. Именно этот случай рассматривается в последующих разделах; слово «двоичное» опускается.
Типичная задача теории кодирования формулируется следующим образом: при заданных алфавитах А, В и множестве сообщений S найти такое кодирование F, которое обладает определенными свойствами (то есть удовлетворяет заданным ограничениям) и оптимально в некотором смысле. Критерий оптимальности, как правило, связан с минимизацией длин кодов. Свойства, которые требуются от кодирования, бывают самой разнообразной природы:
существование декодирования — это очень естественное свойство, однако даже оно требуется не всегда. Например, трансляция программы на языке высокого уровня в машинные команды — это кодирование, для которого не требуется однозначного декодирования;
помехоустойчивость, или исправление ошибок: функция декодирования F-1 обладает таким свойством, что F-1 () = F-1 (’), если ’ в определенном смысле близко к ;
заданная сложность (или простота) кодирования и декодирования. Например, в криптографии изучаются такие способы кодирования, при которых имеется просто вычисляемая функция F, но определение функции F~J требует очень сложных вычислений.
Большое значение для задач кодирования имеет природа множества сообщений S. При одних и тех же алфавитах А, B и требуемых свойствах кодирования F оптимальные решения могут кардинально отличаться для разных S. Для описания множества S (как правило, очень большого или бесконечного) применяются различные методы:
теоретико-множественное описание, например S = { | А* & |а| = n};
вероятностное описание, например S = А*, и заданы вероятности pi появления букв в сообщении,;
логико-комбинаторное описание, например, S задано порождающей формальной грамматикой.