Учебник Дискретная математика для начинающих
Дискретная математика — фундамент программирования и Computer Science. Этот курс проведёт вас от множеств и логики до графов, комбинаторики, булевой алгебры и теории чисел: строго, но по-человечески, с интуицией, доказательствами «на пальцах» и множеством запускаемых примеров на Python. Каждая тема показывает, зачем она нужна программисту, и закрепляется живым кодом, который можно запустить прямо в браузере. Подойдёт старшеклассникам, студентам 1–2 курса и всем, кто хочет твёрдую математическую базу для CS.
Курс «Дискретная математика» состоит из 8 разделов и 25 уроков: Множества и операции, Отношения и функции, Математическая логика, Математическая индукция и рекурсия, Комбинаторика, Теория графов, Булева алгебра и Элементы теории чисел. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.
Программа курса
1 Множества и операции
- Множества: язык, на котором говорит вся математика
Что такое множество, элементы, пустое множество, способы задания и подмножества — с живой проверкой на Python через set.
- Операции над множествами и диаграммы Венна
Объединение, пересечение, разность, симметрическая разность и дополнение множеств; диаграммы Венна и проверка операций на Python.
- Законы алгебры множеств, мощность и декартово произведение
Законы де Моргана, дистрибутивность, булеан и его размер 2^n, декартово произведение и его мощность — с компьютерной проверкой.
- Множества: язык, на котором говорит вся математика
2 Отношения и функции
- Бинарные отношения и их свойства
Что такое бинарное отношение, как его задают; рефлексивность, симметричность, антисимметричность и транзитивность — с проверкой на Python.
- Отношения эквивалентности и порядка
Отношение эквивалентности и классы эквивалентности, разбиение множества; частичный и линейный порядок, диаграммы Хассе — с примерами на Python.
- Функции: инъекция, сюръекция, биекция
Функция как особое отношение; область определения и значений, образ; инъекция, сюръекция и биекция; обратная функция — с проверкой перебором на Python.
- Бинарные отношения и их свойства
3 Математическая логика
- Высказывания, логические операции и таблицы истинности
Высказывания и логические связки: отрицание, конъюнкция, дизъюнкция, импликация, эквивалентность; таблицы истинности — с построением на Python.
- Тавтологии, противоречия и логические эквивалентности
Тавтология и противоречие, логические законы (де Морган, дистрибутивность, контрапозиция), проверка равносильности формул перебором на Python.
- Предикаты, кванторы и методы доказательства
Предикаты и кванторы «для всех» и «существует», отрицание кванторов; методы доказательства: прямое, от противного, контрапозиция — с примерами.
- Высказывания, логические операции и таблицы истинности
4 Математическая индукция и рекурсия
- Принцип математической индукции
Метод математической индукции: база, предположение и шаг; почему он работает; доказательство формул суммы — с компьютерной проверкой на Python.
- Рекуррентные соотношения и их решение
Рекуррентные соотношения, числа Фибоначчи, метод характеристического уравнения для линейных рекуррент — с проверкой замкнутой формулы на Python.
- Рекурсия: от математики к коду
Рекурсивные определения и рекурсия в программировании, связь с индукцией, классические примеры: факториал, Ханойские башни — запускаемо на Python.
- Принцип математической индукции
5 Комбинаторика
- Правила суммы и произведения
Два базовых правила комбинаторики — сумма (или) и произведение (и); как считать число вариантов в составных выборах — с перебором на Python.
- Перестановки, размещения и сочетания
Перестановки, размещения и сочетания: формулы, когда порядок важен, а когда нет; разница между ними — с перебором и проверкой на Python.
- Бином Ньютона и треугольник Паскаля
Биномиальные коэффициенты, формула бинома Ньютона, треугольник Паскаля и его свойства, связь с сочетаниями — с построением на Python.
- Принцип включения-исключения и принцип Дирихле
Формула включения-исключения для подсчёта объединений и принцип Дирихле (голубей и ящиков) — два мощных приёма комбинаторики с проверкой на Python.
- Правила суммы и произведения
6 Теория графов
- Графы: основные понятия, степени и матрицы
Что такое граф, вершины и рёбра, виды графов; степень вершины и лемма о рукопожатиях; матрица смежности и список смежности — с кодом на Python.
- Обходы графа, связность и деревья
Обход в ширину (BFS) и в глубину (DFS), компоненты связности, деревья и их свойства (n−1 рёбер) — с работающими алгоритмами на Python.
- Эйлеровы и гамильтоновы циклы, раскраска графов
Эйлеров путь и критерий чётности степеней (мосты Кёнигсберга), гамильтонов цикл, раскраска графа и хроматическое число — с проверками на Python.
- Графы: основные понятия, степени и матрицы
7 Булева алгебра
- Булевы функции, СДНФ и СКНФ
Булевы функции и таблицы истинности, число булевых функций; построение совершенной ДНФ и КНФ по таблице — с генерацией формулы на Python.
- Минимизация булевых функций и логические схемы
Зачем упрощать булевы функции, законы поглощения и склеивания, идея карт Карно, превращение формулы в логическую схему из вентилей — с проверкой на Python.
- Полные системы булевых функций
Функциональная полнота, базис {И, ИЛИ, НЕ}, штрих Шеффера (НЕ-И) как единственная операция, теорема Поста — с проверкой выразимости на Python.
- Булевы функции, СДНФ и СКНФ
8 Элементы теории чисел
- Делимость, простые числа, НОД и алгоритм Евклида
Делимость и её свойства, простые числа и решето Эратосфена, НОД и НОК, алгоритм Евклида и расширенный Евклид — с реализациями на Python.
- Сравнения по модулю и модулярная арифметика
Сравнения по модулю, классы вычетов, свойства сложения и умножения по модулю, арифметика «часов» — с проверкой свойств на Python.
- Малая теорема Ферма и её применения
Малая теорема Ферма, быстрое возведение в степень по модулю, нахождение обратного элемента и идея теста на простоту — с живыми вычислениями на Python.
- Делимость, простые числа, НОД и алгоритм Евклида