Дискретная математика, алгоритмы и структуры данных — различия между версиями
Creep (обсуждение | вклад) (→Теория расписаний) |
м (rollbackEdits.php mass rollback) |
||
(не показана 451 промежуточная версия, сделанная более чем 100 участниками) | |||
Строка 1: | Строка 1: | ||
[[Категория:Дискретная математика и алгоритмы]] | [[Категория:Дискретная математика и алгоритмы]] | ||
[[Категория: Алгоритмы и структуры данных]] | [[Категория: Алгоритмы и структуры данных]] | ||
+ | Убедительная просьба читать [[Обсуждение:Дискретная_математика_и_алгоритмы | правила оформления вики-конспектов]]. | ||
− | + | Символом <tex> \star </tex> помечены дополнительные темы (возможно, сложные), которые не были подробно рассмотрены (или вообще рассмотрены) в рамках курса. | |
= Первый семестр = | = Первый семестр = | ||
Строка 8: | Строка 9: | ||
== Отношения == | == Отношения == | ||
*[[Определение отношения]] | *[[Определение отношения]] | ||
− | *[[ | + | *[[Композиция отношений|Композиция отношений, степень отношения, обратное отношение]] |
*[[Рефлексивное отношение|Рефлексивное отношение. Антирефлексивное отношение.]] | *[[Рефлексивное отношение|Рефлексивное отношение. Антирефлексивное отношение.]] | ||
*[[Симметричное отношение]] | *[[Симметричное отношение]] | ||
*[[Антисимметричное отношение]] | *[[Антисимметричное отношение]] | ||
− | |||
*[[Транзитивное отношение]] | *[[Транзитивное отношение]] | ||
− | |||
− | |||
*[[Отношение порядка]] | *[[Отношение порядка]] | ||
+ | *[[Изоморфизмы упорядоченных множеств]]<tex>^\star</tex> | ||
*[[Отношение эквивалентности]] | *[[Отношение эквивалентности]] | ||
+ | *[[Транзитивное замыкание|Транзитивное замыкание отношения]] | ||
*[[Алгоритм Флойда — Уоршелла|Алгоритм Флойда-Уоршалла построения транзитивного замыкания отношения]] | *[[Алгоритм Флойда — Уоршелла|Алгоритм Флойда-Уоршалла построения транзитивного замыкания отношения]] | ||
+ | *[[Транзитивный остов]] | ||
== Булевы функции == | == Булевы функции == | ||
*[[Определение булевой функции]] | *[[Определение булевой функции]] | ||
+ | *[[Побитовые операции]]<tex>^\star</tex> | ||
*[[Суперпозиции]] | *[[Суперпозиции]] | ||
*[[ДНФ]] | *[[ДНФ]] | ||
+ | *[[Сокращенная и минимальная ДНФ | Сокращенная и минимальная ДНФ, минимизация ДНФ методами гиперкубов, карт Карно, Квайна]] | ||
*[[КНФ]] | *[[КНФ]] | ||
− | *[[Полином Жегалкина]] | + | *[[2-SAT]] |
+ | *[[XOR-SAT]]<tex>^\star</tex> | ||
+ | *[[Специальные формы КНФ|Специальные формы КНФ: КНФ в форме Хорна и КНФ в форме Крома]] | ||
+ | *[[Полином Жегалкина | Полином Жегалкина, преобразование Мёбиуса]] | ||
*[[Полные системы функций. Теорема Поста о полной системе функций]] | *[[Полные системы функций. Теорема Поста о полной системе функций]] | ||
− | |||
− | |||
− | |||
− | |||
*[[Представление функции класса DM с помощью медианы]] | *[[Представление функции класса DM с помощью медианы]] | ||
*[[Пороговая функция]] | *[[Пороговая функция]] | ||
+ | *[[Троичная логика]]<tex>^\star</tex> | ||
== Схемы из функциональных элементов == | == Схемы из функциональных элементов == | ||
*[[Реализация булевой функции схемой из функциональных элементов]] | *[[Реализация булевой функции схемой из функциональных элементов]] | ||
+ | *[[Простейшие методы синтеза схем из функциональных элементов]] | ||
+ | *[[Метод Лупанова синтеза схем]] | ||
*[[Cумматор]] | *[[Cумматор]] | ||
*[[Каскадный сумматор]] | *[[Каскадный сумматор]] | ||
*[[Двоичный каскадный сумматор]] | *[[Двоичный каскадный сумматор]] | ||
+ | *[[Троичный сумматор]]<tex>^\star</tex> | ||
*[[Реализация вычитания сумматором]] | *[[Реализация вычитания сумматором]] | ||
*[[Матричный умножитель]] | *[[Матричный умножитель]] | ||
*[[Дерево Уоллеса]] | *[[Дерево Уоллеса]] | ||
+ | *[[Контактная схема]] | ||
+ | *[[Триггеры]]<tex>^\star</tex> | ||
+ | *[[Квантовые гейты]]<tex>^\star</tex> | ||
== Представление информации == | == Представление информации == | ||
Строка 47: | Строка 56: | ||
*[[Представление целых чисел: прямой код, код со сдвигом, дополнительный код]] | *[[Представление целых чисел: прямой код, код со сдвигом, дополнительный код]] | ||
*[[Представление вещественных чисел]] | *[[Представление вещественных чисел]] | ||
− | *[[Представление символов, таблицы кодировок]] | + | *[[Представление символов, таблицы кодировок]]<tex>^\star</tex> |
== Алгоритмы сжатия == | == Алгоритмы сжатия == | ||
− | *[[Алгоритм Хаффмана]] | + | * [[Алгоритм Хаффмана]] |
− | *[[Алгоритм | + | * [[Оптимальное хранение словаря в алгоритме Хаффмана]] |
− | *[[Алгоритмы LZ77 и LZ78]] | + | * [[Алгоритм Хаффмана за O(n)]] |
− | *[[ | + | * [[Алгоритм Ху-Таккера]]<tex>^\star</tex> |
− | *[[ | + | * [[Неравенство Крафта]] |
− | *[[Преобразование MTF]] | + | * [[Неравенство Макмиллана]] |
− | *[[Расстояние Хэмминга]] | + | * [[Код Шеннона]] |
− | *[[Избыточное кодирование, код Хэмминга]] | + | * [[Оптимальный префиксный код с длиной кодового слова не более L бит]]<tex>^\star</tex> |
− | *[[ | + | * [[Алгоритмы LZ77 и LZ78]] |
− | + | * [[Алгоритм LZW]] | |
+ | * [[Алгоритм LZSS]]<tex>^\star</tex> | ||
+ | * [[Алгоритм LZMA]]<tex>^\star</tex> | ||
+ | * [[Преобразование Барроуза-Уиллера | Преобразование Барроуза-Уиллера и обратное ему]] | ||
+ | * [[Преобразование MTF]] | ||
+ | * [[Расстояние Хэмминга]] | ||
+ | * [[Избыточное кодирование, код Хэмминга]] | ||
+ | * [[Гамма-, дельта- и омега-код Элиаса]]<tex>^\star</tex> | ||
== Комбинаторика == | == Комбинаторика == | ||
− | *[[Комбинаторные объекты]] | + | === Комбинаторные объекты === |
− | *[[Лексикографический порядок]] | + | * [[Комбинаторные объекты]] |
− | *[[ | + | * [[Лексикографический порядок]] |
− | *[[Генерация комбинаторных объектов в лексикографическом порядке]] | + | * [[Коды Грея]] |
− | *[[Получение номера по объекту]] | + | * [[Коды Грея для перестановок]] |
− | *[[Получение объекта по номеру]] | + | * [[Коды антигрея]] |
− | *[[Получение следующего объекта]] | + | * [[Монотонный код Грея]] |
− | *[[ | + | * [[Цепные коды]] |
− | *[[ | + | * [[Правильные скобочные последовательности]] |
− | *[[ | + | |
− | *[[ | + | === Генерация комбинаторных объектов === |
− | *[[ | + | * [[Генерация комбинаторных объектов в лексикографическом порядке]] |
− | *[[ | + | * [[Получение номера по объекту]] |
− | *[[ | + | * [[Получение объекта по номеру]] |
− | *[[Умножение перестановок, обратная перестановка, группа перестановок]] | + | * [[Получение следующего объекта]] |
− | *[[Теорема Кэли]] | + | * [[Получение предыдущего объекта]]<tex>^\star</tex> |
− | *[[Матричное представление перестановок]] | + | * [[Метод генерации случайной перестановки, алгоритм Фишера-Йетса]] |
− | *[[Задача о минимуме/максимуме скалярного произведения]] | + | * [[Методы генерации случайного сочетания]]<tex>^\star</tex> |
− | *[[Задача о монотонных подпоследовательностях, теорема о связи длины НВП и НУП | + | |
− | + | === Подсчёт числа объектов === | |
− | + | * [[Формула включения-исключения | Формула включения-исключения, подсчет числа беспорядков]] | |
+ | * [[Нахождение количества разбиений числа на слагаемые | Нахождение количества разбиений числа на слагаемые. Пентагональная теорема Эйлера]] | ||
+ | * [[Производящая функция]] | ||
+ | * [[Лемма Бёрнсайда и Теорема Пойа]] | ||
+ | * [[Задача об ожерельях]] | ||
+ | * [[Числа Стирлинга первого рода]] | ||
+ | * [[Числа Стирлинга второго рода]] | ||
+ | * [[Числа Эйлера I и II рода | Числа Эйлера первого и второго рода. Подъемы в перестановках]]<tex>^\star</tex> | ||
+ | * [[Числа Каталана]] | ||
+ | |||
+ | === Свойства комбинаторных объектов === | ||
+ | * [[Умножение перестановок, обратная перестановка, группа перестановок]] | ||
+ | * [[Действие перестановки на набор из элементов, представление в виде циклов]] | ||
+ | * [[Таблица инверсий]] | ||
+ | * [[Теорема Кэли]] | ||
+ | * [[Матричное представление перестановок]] | ||
+ | * [[Задача о минимуме/максимуме скалярного произведения]] | ||
+ | * [[Задача о монотонных подпоследовательностях, теорема о связи длины НВП и НУП]] | ||
== [[Динамическое программирование]] == | == [[Динамическое программирование]] == | ||
+ | === Классические задачи динамического программирования === | ||
*[[Кратчайший путь в ациклическом графе]] | *[[Кратчайший путь в ациклическом графе]] | ||
+ | *[[Задача о числе путей в ациклическом графе]] | ||
*[[Задача о расстановке знаков в выражении]] | *[[Задача о расстановке знаков в выражении]] | ||
+ | *[[Задача о порядке перемножения матриц]] | ||
*[[Задача о наибольшей общей подпоследовательности]] | *[[Задача о наибольшей общей подпоследовательности]] | ||
− | |||
*[[Задача о наибольшей возрастающей подпоследовательности]] | *[[Задача о наибольшей возрастающей подпоследовательности]] | ||
− | *[[ | + | *[[Быстрый поиск наибольшей возрастающей подпоследовательности]]* |
− | * | ||
− | |||
*[[Задача коммивояжера, ДП по подмножествам]] | *[[Задача коммивояжера, ДП по подмножествам]] | ||
− | |||
*[[Задача о редакционном расстоянии, алгоритм Вагнера-Фишера]] | *[[Задача о редакционном расстоянии, алгоритм Вагнера-Фишера]] | ||
− | *[[Задача о | + | *[[Задача о рюкзаке]] |
+ | |||
+ | === Способы оптимизации методов динамического программирования === | ||
+ | *[[Метод четырех русских для умножения матриц]] | ||
+ | *[[Применение метода четырех русских в задачах ДП на примере задачи о НОП]]<tex>^\star</tex> | ||
*[[Задача об оптимальном префиксном коде с сохранением порядка. Монотонность точки разреза]] | *[[Задача об оптимальном префиксном коде с сохранением порядка. Монотонность точки разреза]] | ||
+ | *[[Meet-in-the-middle]]<tex>^\star</tex> | ||
+ | *[[Convex hull trick]] | ||
+ | |||
+ | === Другие задачи === | ||
+ | *[[Задача о расстоянии Дамерау-Левенштейна]]<tex>^\star</tex> | ||
+ | *[[Задача о выводе в контекстно-свободной грамматике, алгоритм Кока-Янгера-Касами]] | ||
+ | *[[Задача о наибольшей подпоследовательности-палиндроме]] | ||
+ | *[[Задача о наибольшей общей возрастающей последовательности]]<tex>^\star</tex> | ||
+ | *[[Задача о наибольшей общей палиндромной подпоследовательности]]<tex>^\star</tex> | ||
+ | *[[Динамическое программирование по профилю]]<tex>^\star</tex> | ||
+ | *[[Динамика по поддеревьям]] | ||
== Теория вероятностей == | == Теория вероятностей == | ||
Строка 103: | Строка 150: | ||
*[[Независимые события]] | *[[Независимые события]] | ||
*[[Условная вероятность]] | *[[Условная вероятность]] | ||
+ | *[[Формула полной вероятности]] | ||
*[[Формула Байеса]] | *[[Формула Байеса]] | ||
− | |||
*[[Дискретная случайная величина]] | *[[Дискретная случайная величина]] | ||
*[[Независимые случайные величины]] | *[[Независимые случайные величины]] | ||
*[[Математическое ожидание случайной величины]] | *[[Математическое ожидание случайной величины]] | ||
+ | *[[Дисперсия случайной величины]] | ||
*[[Ковариация случайных величин]] | *[[Ковариация случайных величин]] | ||
− | *[[ | + | *[[Корреляция случайных величин]] |
+ | *[[Неравенство Маркова]] | ||
*[[Энтропия случайного источника]] | *[[Энтропия случайного источника]] | ||
*[[Симуляция одним распределением другого]] | *[[Симуляция одним распределением другого]] | ||
*[[Арифметическое кодирование]] | *[[Арифметическое кодирование]] | ||
− | *[[ | + | *[[Парадоксы теории вероятностей]]<tex>^\star</tex> |
+ | *[[Схема Бернулли]]<tex>^\star</tex> | ||
− | == | + | == Марковские цепи == |
+ | * [[Марковская цепь]] | ||
* [[Теорема о поглощении]] | * [[Теорема о поглощении]] | ||
* [[Фундаментальная матрица]] | * [[Фундаментальная матрица]] | ||
Строка 123: | Строка 174: | ||
* [[Эргодическая марковская цепь]] | * [[Эргодическая марковская цепь]] | ||
* [[Регулярная марковская цепь]] | * [[Регулярная марковская цепь]] | ||
+ | * [[Примеры использования Марковских цепей]] | ||
+ | * [[Скрытые Марковские модели]]<tex>^\star</tex> | ||
+ | * [[Алгоритм Витерби]]<tex>^\star</tex> | ||
+ | * [[Алгоритм "Вперед-Назад"]]<tex>^\star</tex> | ||
+ | * [[Алгоритм Баума-Велша]]<tex>^\star</tex> | ||
= Второй семестр = | = Второй семестр = | ||
Строка 128: | Строка 184: | ||
== Амортизационный анализ == | == Амортизационный анализ == | ||
* [[Амортизационный анализ]] | * [[Амортизационный анализ]] | ||
− | * [[ | + | * [[Динамический массив]] |
− | * [[ | + | * [[Hashed Array Tree]]<tex>^\star</tex> |
+ | * [[Список]] | ||
* [[Стек]] | * [[Стек]] | ||
* [[Очередь]] | * [[Очередь]] | ||
− | * [[ | + | * [[Дек]] |
+ | * [[Мажорирующий элемент]] | ||
+ | * [[Счетчик Кнута]] | ||
+ | * [[Мастер-теорема]]<tex>^\star</tex> | ||
+ | * [[List order maintenance]]<tex>^\star</tex> | ||
+ | |||
+ | == Персистентные структуры данных == | ||
+ | * [[Персистентные структуры данных]] | ||
* [[Персистентный стек]] | * [[Персистентный стек]] | ||
+ | * [[Персистентная очередь]] | ||
* [[Персистентный дек]] | * [[Персистентный дек]] | ||
+ | * [[Персистентная приоритетная очередь]] | ||
− | == Приоритетные очереди == | + | == [[Приоритетные очереди]] == |
− | |||
* [[Двоичная куча]] | * [[Двоичная куча]] | ||
* [[Биномиальная куча]] | * [[Биномиальная куча]] | ||
* [[Фибоначчиева куча]] | * [[Фибоначчиева куча]] | ||
+ | * [[Левосторонняя куча]] | ||
+ | * [[Тонкая куча]] | ||
+ | * [[Толстая куча на избыточном счетчике]] | ||
+ | * [[Куча Бродала-Окасаки]]<tex>^\star</tex> | ||
== Система непересекающихся множеств == | == Система непересекающихся множеств == | ||
Строка 146: | Строка 215: | ||
* [[СНМ (списки с весовой эвристикой) | Списки с весовой эвристикой]] | * [[СНМ (списки с весовой эвристикой) | Списки с весовой эвристикой]] | ||
* [[СНМ(реализация с помощью леса корневых деревьев) | Реализация с помощью леса корневых деревьев]] | * [[СНМ(реализация с помощью леса корневых деревьев) | Реализация с помощью леса корневых деревьев]] | ||
− | * [[ | + | * [[СНМ с операцией удаления за О(1)]]<tex>^\star</tex> |
− | == | + | == [[Поисковые структуры данных]] == |
* [[Упорядоченное множество]] | * [[Упорядоченное множество]] | ||
* [[Дерево поиска, наивная реализация]] | * [[Дерево поиска, наивная реализация]] | ||
Строка 156: | Строка 225: | ||
* [[Красно-черное дерево]] | * [[Красно-черное дерево]] | ||
* [[Декартово дерево]] | * [[Декартово дерево]] | ||
+ | * [[Декартово дерево по неявному ключу]] | ||
* [[Splay-дерево]] | * [[Splay-дерево]] | ||
− | * [[ | + | * [[Взвешенное дерево]] |
+ | * [[Tango-дерево]]<tex>^\star</tex> | ||
+ | * [[Рандомизированное бинарное дерево поиска]] | ||
* [[Дерево ван Эмде Боаса]] | * [[Дерево ван Эмде Боаса]] | ||
− | * [[ | + | * [[Список с пропусками]] |
+ | * [[Fusion tree]]<tex>^\star</tex> | ||
+ | * [[Сверхбыстрый цифровой бор]] | ||
+ | * [[Rope]]<tex>^\star</tex> | ||
+ | * [[AA-дерево]]<tex>^\star</tex> | ||
== Дерево отрезков == | == Дерево отрезков == | ||
− | |||
* [[Статистики на отрезках. Корневая эвристика]] | * [[Статистики на отрезках. Корневая эвристика]] | ||
+ | * [[Корневая декомпозиция с операциями: get, insert, erase]] | ||
* [[Дерево отрезков. Построение]] | * [[Дерево отрезков. Построение]] | ||
* [[Реализация запроса в дереве отрезков сверху]] | * [[Реализация запроса в дереве отрезков сверху]] | ||
Строка 178: | Строка 254: | ||
== Хеширование == | == Хеширование == | ||
− | * [[ | + | * [[Хеш-таблица]] |
− | * [[ | + | * [[Разрешение коллизий]] |
− | |||
* [[Хеширование кукушки]] | * [[Хеширование кукушки]] | ||
− | * [[ | + | * [[Идеальное хеширование]] |
− | * [[Перехеширование | + | * [[Перехеширование]] |
* [[Фильтр Блума]] | * [[Фильтр Блума]] | ||
+ | * [[Quotient filter]]<tex>^\star</tex> | ||
* [[Универсальное семейство хеш-функций]] | * [[Универсальное семейство хеш-функций]] | ||
+ | * [[Расширяемое хеширование]]<tex>^\star</tex> | ||
− | == | + | == [[Сортировки]] == |
+ | === Квадратичные сортировки === | ||
* [[Сортировка выбором]] | * [[Сортировка выбором]] | ||
* [[Сортировка пузырьком]] | * [[Сортировка пузырьком]] | ||
+ | * [[Сортировка вставками]] | ||
+ | === Сортировки на сравнениях === | ||
+ | * [[Сортировка Шелла]]<tex>^\star</tex> | ||
+ | * [[Сортировка кучей]] | ||
+ | * [[Быстрая сортировка]] | ||
* [[Сортировка слиянием]] | * [[Сортировка слиянием]] | ||
* [[Cортировка слиянием с использованием O(1) дополнительной памяти]] | * [[Cортировка слиянием с использованием O(1) дополнительной памяти]] | ||
− | * [[ | + | * [[Терпеливая сортировка]]<tex>^\star</tex> |
+ | * [[Timsort]]<tex>^\star</tex> | ||
+ | * [[Smoothsort]]<tex>^\star</tex> | ||
+ | * [[Теорема о нижней оценке для сортировки сравнениями]] | ||
+ | |||
+ | === Многопоточные сортировки === | ||
+ | * [[Многопоточная сортировка слиянием]]<tex>^\star</tex> | ||
+ | * [[PSRS-сортировка]]<tex>^\star</tex> | ||
+ | === Другие сортировки === | ||
+ | * [[Поиск k-ой порядковой статистики]] | ||
+ | * [[Поиск k-ой порядковой статистики за линейное время]] | ||
+ | * [[Поиск k-ой порядковой статистики в двух массивах]]<tex>^\star</tex> | ||
* [[Сортировка подсчетом]] | * [[Сортировка подсчетом]] | ||
− | |||
* [[Цифровая сортировка]] | * [[Цифровая сортировка]] | ||
− | * [[ | + | * [[Карманная сортировка]] |
− | * [[ | + | * [[Сортировка Хана]]<tex>^\star</tex> |
− | * [[ | + | * [[Задача флага Нидерландов]]<tex>^\star</tex> |
− | * [[ | + | * [[Блинная сортировка]]<tex>^\star</tex> |
− | == [[Сортирующие сети]] | + | == Сортирующие сети == |
+ | * [[Сортирующие сети]] | ||
* [[0-1 принцип | Проверка сети компараторов на то, что она сортирующая. 0-1 принцип]] | * [[0-1 принцип | Проверка сети компараторов на то, что она сортирующая. 0-1 принцип]] | ||
* [[Сортирующие сети для квадратичных сортировок]] | * [[Сортирующие сети для квадратичных сортировок]] | ||
+ | * [[Сортировочные сети с особыми свойствами]]<tex>^\star</tex> | ||
* [[Сеть Бетчера]] | * [[Сеть Бетчера]] | ||
== Алгоритмы поиска == | == Алгоритмы поиска == | ||
+ | * [[Целочисленный двоичный поиск]] | ||
+ | * [[Поиск в матрице]]<tex>^\star</tex> | ||
+ | * [[Вещественный двоичный поиск]] | ||
* [[Троичный поиск]] | * [[Троичный поиск]] | ||
* [[Поиск с помощью золотого сечения]] | * [[Поиск с помощью золотого сечения]] | ||
* [[Интерполяционный поиск]] | * [[Интерполяционный поиск]] | ||
− | * [[ | + | * [[Метод Фибоначчи]]<tex>^\star</tex> |
+ | |||
+ | == Связь между структурами данных == | ||
+ | * [[Связь между структурами данных]] | ||
= Третий семестр = | = Третий семестр = | ||
Строка 220: | Строка 321: | ||
* [[Теорема о существовании простого цикла в случае существования цикла]] | * [[Теорема о существовании простого цикла в случае существования цикла]] | ||
* [[Матрица смежности графа]] | * [[Матрица смежности графа]] | ||
− | |||
* [[Матрица инцидентности графа]] | * [[Матрица инцидентности графа]] | ||
− | * [[Циклическое пространство графа]] | + | * [[Циклическое пространство графа]]<tex>^\star</tex> |
− | * [[Фундаментальные циклы графа]] | + | * [[Фундаментальные циклы графа]]<tex>^\star</tex> |
* [[Дерево, эквивалентные определения]] | * [[Дерево, эквивалентные определения]] | ||
+ | * [[Алгоритмы на деревьях]]<tex>^\star</tex> | ||
+ | * [[Двудольные графы]] | ||
+ | * [[Дополнительный, самодополнительный граф]] | ||
+ | * [[Теоретико-множественные операции над графами]]<tex>^\star</tex> | ||
+ | * [[Рёберное ядро]] | ||
+ | * [[Факторизация графов]]<tex>^\star</tex> | ||
+ | * [[Группы графов]]<tex>^\star</tex> | ||
+ | * [[Гиперграфы]]<tex>^\star</tex> | ||
== Связность в графах == | == Связность в графах == | ||
Строка 230: | Строка 338: | ||
* [[Отношение реберной двусвязности]] | * [[Отношение реберной двусвязности]] | ||
* [[Отношение вершинной двусвязности]] | * [[Отношение вершинной двусвязности]] | ||
+ | * [[Точка сочленения, эквивалентные определения]] | ||
+ | * [[Мост, эквивалентные определения]] | ||
* [[Граф компонент реберной двусвязности]] | * [[Граф компонент реберной двусвязности]] | ||
* [[Граф блоков-точек сочленения]] | * [[Граф блоков-точек сочленения]] | ||
− | |||
− | |||
* [[k-связность]] | * [[k-связность]] | ||
* [[Теорема Менгера]] | * [[Теорема Менгера]] | ||
* [[Теорема Менгера, альтернативное доказательство]] | * [[Теорема Менгера, альтернативное доказательство]] | ||
* [[Вершинная, реберная связность, связь между ними и минимальной степенью вершины]] | * [[Вершинная, реберная связность, связь между ними и минимальной степенью вершины]] | ||
+ | * [[Задача о динамической связности оффлайн]]<tex>^\star</tex> | ||
== Остовные деревья == | == Остовные деревья == | ||
+ | === Построение остовных деревьев === | ||
+ | * [[Остовные деревья: определения, лемма о безопасном ребре]] | ||
+ | * [[Алгоритм Прима]] | ||
+ | * [[Алгоритм Краскала]] | ||
+ | * [[Алгоритм Борувки]] | ||
+ | * [[Критерий Тарьяна минимальности остовного дерева|Теорема Тарьяна (критерий минимальности остовного дерева)]] | ||
+ | * [[Алгоритм двух китайцев]] | ||
+ | * [[Минимально узкое остовное дерево]] | ||
+ | * [[Остовное дерево в планарном графе]] | ||
+ | |||
+ | === Свойства остовных деревьев === | ||
* [[Матрица Кирхгофа]] | * [[Матрица Кирхгофа]] | ||
* [[Связь матрицы Кирхгофа и матрицы инцидентности]] | * [[Связь матрицы Кирхгофа и матрицы инцидентности]] | ||
Строка 247: | Строка 367: | ||
== Обходы графов == | == Обходы графов == | ||
+ | === Эйлеровы графы === | ||
* [[Эйлеров цикл, Эйлеров путь, Эйлеровы графы, Эйлеровость орграфов]] | * [[Эйлеров цикл, Эйлеров путь, Эйлеровы графы, Эйлеровость орграфов]] | ||
− | * [[Покрытие | + | * [[Покрытие рёбер графа путями]] |
* [[Алгоритм построения Эйлерова цикла]] | * [[Алгоритм построения Эйлерова цикла]] | ||
* [[Произвольно вычерчиваемые из заданной вершины графы]] | * [[Произвольно вычерчиваемые из заданной вершины графы]] | ||
+ | * [[Деревья Эйлерова обхода]]<tex>^\star</tex> | ||
+ | |||
+ | === Гамильтоновы графы === | ||
* [[Гамильтоновы графы]] | * [[Гамильтоновы графы]] | ||
* [[Теорема Хватала]] | * [[Теорема Хватала]] | ||
− | + | * [[Теорема Дирака]] | |
− | |||
* [[Теорема Оре]] | * [[Теорема Оре]] | ||
+ | * [[Теорема Поша]]<tex>^\star</tex> | ||
+ | * [[Теорема Гуйя-Ури]]<tex>^\star</tex> | ||
+ | * [[Алгоритм нахождения Гамильтонова цикла в условиях теорем Дирака и Оре]] | ||
+ | * [[Теорема Гринберга]]<tex>^\star</tex> | ||
* [[Турниры]] | * [[Турниры]] | ||
* [[Теорема Редеи-Камиона]] | * [[Теорема Редеи-Камиона]] | ||
Строка 267: | Строка 394: | ||
* [[Укладка графа с планарными компонентами вершинной двусвязности]] | * [[Укладка графа с планарными компонентами вершинной двусвязности]] | ||
* [[Теорема Понтрягина-Куратовского]] | * [[Теорема Понтрягина-Куратовского]] | ||
+ | * [[Теорема Вагнера]] | ||
+ | * [[Род, толщина, крупность, число скрещиваний]]<tex>^\star</tex> | ||
* [[Двойственный граф планарного графа]] | * [[Двойственный граф планарного графа]] | ||
+ | * [[Теорема Фари]]<tex>^\star</tex> | ||
+ | * [[Гамма-алгоритм]] | ||
+ | * [[Разрез в планарных графах]] | ||
== Раскраски графов == | == Раскраски графов == | ||
Строка 273: | Строка 405: | ||
* [[Двудольные графы и раскраска в 2 цвета]] | * [[Двудольные графы и раскраска в 2 цвета]] | ||
* [[Хроматический многочлен]] | * [[Хроматический многочлен]] | ||
− | |||
− | |||
− | |||
− | |||
− | |||
* [[Формула Зыкова]] | * [[Формула Зыкова]] | ||
* [[Формула Уитни]] | * [[Формула Уитни]] | ||
+ | * [[Теорема Брукса]] | ||
+ | * [[Верхние и нижние оценки хроматического числа]]<tex>^\star</tex> | ||
+ | * [[Хроматическое число планарного графа]] | ||
+ | * [[Многочлен Татта]]<tex>^\star</tex> | ||
+ | * [[Теория Рамсея]]<tex>^\star</tex> | ||
== Обход в глубину == | == Обход в глубину == | ||
Строка 285: | Строка 417: | ||
* [[Лемма о белых путях]] | * [[Лемма о белых путях]] | ||
* [[Использование обхода в глубину для проверки связности]] | * [[Использование обхода в глубину для проверки связности]] | ||
− | * [[Использование обхода в глубину для поиска цикла | + | * [[Использование обхода в глубину для поиска цикла]] |
* [[Использование обхода в глубину для топологической сортировки]] | * [[Использование обхода в глубину для топологической сортировки]] | ||
* [[Использование обхода в глубину для поиска компонент сильной связности]] | * [[Использование обхода в глубину для поиска компонент сильной связности]] | ||
Строка 298: | Строка 430: | ||
* [[Алгоритм Дейкстры]] | * [[Алгоритм Дейкстры]] | ||
* [[Алгоритм Флойда]] | * [[Алгоритм Флойда]] | ||
− | |||
* [[Алгоритм Джонсона]] | * [[Алгоритм Джонсона]] | ||
− | + | * [[Алгоритм Левита]]<tex>^\star</tex> | |
− | + | * [[Алгоритм A*]] <tex>^\star</tex> | |
− | * [[ | + | * [[Алгоритм D*]] <tex>^\star</tex> |
− | * [[Алгоритм | + | * [[Эвристики для поиска кратчайших путей]]<tex>^\star</tex> |
− | * [[Алгоритм | ||
− | * | ||
− | * [[ | ||
== Задача о паросочетании == | == Задача о паросочетании == | ||
− | * [[ | + | * [[Паросочетания: основные определения, теорема о максимальном паросочетании и дополняющих цепях]] |
* [[Алгоритм Форда-Фалкерсона для поиска максимального паросочетания]] | * [[Алгоритм Форда-Фалкерсона для поиска максимального паросочетания]] | ||
* [[Алгоритм Куна для поиска максимального паросочетания]] | * [[Алгоритм Куна для поиска максимального паросочетания]] | ||
+ | * [[Теорема Холла]] | ||
* [[Связь максимального паросочетания и минимального вершинного покрытия в двудольных графах]] | * [[Связь максимального паросочетания и минимального вершинного покрытия в двудольных графах]] | ||
* [[Связь вершинного покрытия и независимого множества]] | * [[Связь вершинного покрытия и независимого множества]] | ||
+ | * [[Рёберное ядро]]<tex>^\star</tex> | ||
* [[Матрица Татта и связь с размером максимального паросочетания в двудольном графе]] | * [[Матрица Татта и связь с размером максимального паросочетания в двудольном графе]] | ||
+ | * [[Теорема Татта о существовании полного паросочетания]] | ||
* [[Алгоритм вырезания соцветий|Паросочетания в недвудольных графах. Алгоритм вырезания соцветий]] | * [[Алгоритм вырезания соцветий|Паросочетания в недвудольных графах. Алгоритм вырезания соцветий]] | ||
+ | * [[Декомпозиция Эдмондса-Галлаи]] | ||
+ | * [[Задача об устойчивом паросочетании]]<tex>^\star</tex> | ||
+ | * [[Совершенное паросочетание в кубическом графе]]<tex>^\star</tex> | ||
== Задача о максимальном потоке == | == Задача о максимальном потоке == | ||
Строка 321: | Строка 455: | ||
* [[Разрез, лемма о потоке через разрез]] | * [[Разрез, лемма о потоке через разрез]] | ||
* [[Дополняющая сеть, дополняющий путь]] | * [[Дополняющая сеть, дополняющий путь]] | ||
− | * [[ | + | * [[Сложение и разность потоков]] |
* [[Теорема Форда-Фалкерсона]] | * [[Теорема Форда-Фалкерсона]] | ||
* [[Алгоритм Форда-Фалкерсона, реализация с помощью поиска в глубину]] | * [[Алгоритм Форда-Фалкерсона, реализация с помощью поиска в глубину]] | ||
* [[Алоритм Эдмондса-Карпа]] | * [[Алоритм Эдмондса-Карпа]] | ||
+ | * [[Алгоритм масштабирования потока]] | ||
+ | * [[Блокирующий поток]] | ||
+ | * [[Схема алгоритма Диница]] | ||
+ | * [[Теоремы Карзанова о числе итераций алгоритма Диница в сети с целочисленными пропускными способностями]] | ||
+ | * [[Алгоритм Голдберга-Тарьяна]]<tex>^\star</tex> | ||
+ | * [[Алгоритм поиска блокирующего потока в ациклической сети]] | ||
+ | * [[Метод проталкивания предпотока]] | ||
+ | * [[Алгоритм "поднять-в-начало"]] | ||
* [[Теорема о декомпозиции]] | * [[Теорема о декомпозиции]] | ||
* [[Теорема о декомпозиционном барьере]] | * [[Теорема о декомпозиционном барьере]] | ||
− | |||
− | |||
* [[Циркуляция потока]] | * [[Циркуляция потока]] | ||
− | * [[Алгоритм | + | * [[Алгоритм Штор-Вагнера нахождения минимального разреза]] |
− | * [[Алгоритм | + | * [[Алгоритм Каргера для нахождения минимального разреза]]<tex>^\star</tex> |
− | * [[ | + | * [[Примеры сведения к задачам поиска потока]] |
== Задача о потоке минимальной стоимости == | == Задача о потоке минимальной стоимости == | ||
Строка 342: | Строка 482: | ||
* [[Сведение задачи о назначениях к задаче о потоке минимальной стоимости]] | * [[Сведение задачи о назначениях к задаче о потоке минимальной стоимости]] | ||
* [[Венгерский алгоритм решения задачи о назначениях]] | * [[Венгерский алгоритм решения задачи о назначениях]] | ||
+ | * [[Алгоритм отмены цикла минимального среднего веса]]<tex>^\star</tex> | ||
= Четвертый семестр = | = Четвертый семестр = | ||
Строка 350: | Строка 491: | ||
* [[Слово Фибоначчи]] | * [[Слово Фибоначчи]] | ||
* [[Слово Туэ-Морса]] | * [[Слово Туэ-Морса]] | ||
+ | * [[Декомпозиция Линдона]]<tex>^\star</tex> | ||
+ | * [[Алгоритм Ландау-Шмидта]]<tex>^\star</tex> | ||
+ | * [[Алгоритм Крочемора]]<tex>^\star</tex> | ||
+ | * [[Алгоритм Мейна-Лоренца]]<tex>^\star</tex> | ||
+ | * [[Алгоритм Манакера]]<tex>^\star</tex> | ||
+ | * [[Дерево палиндромов]]<tex>^\star</tex> | ||
− | == Поиск подстроки в строке == | + | == [[Поиск подстроки в строке]] == |
+ | === Точный поиск === | ||
* [[Наивный алгоритм поиска подстроки в строке]] | * [[Наивный алгоритм поиска подстроки в строке]] | ||
* [[Поиск подстроки в строке с использованием хеширования. Алгоритм Рабина-Карпа]] | * [[Поиск подстроки в строке с использованием хеширования. Алгоритм Рабина-Карпа]] | ||
Строка 357: | Строка 505: | ||
* [[Префикс-функция]] | * [[Префикс-функция]] | ||
* [[Алгоритм Кнута-Морриса-Пратта]] | * [[Алгоритм Кнута-Морриса-Пратта]] | ||
+ | * [[Автомат Кнута-Морриса-Пратта]] | ||
* [[Z-функция]] | * [[Z-функция]] | ||
− | |||
* [[Бор]] | * [[Бор]] | ||
* [[Алгоритм Ахо-Корасик]] | * [[Алгоритм Ахо-Корасик]] | ||
+ | * [[Суффиксный автомат]] | ||
+ | * [[Алгоритм Бойера-Мура]] | ||
+ | * [[Алгоритм Апостолико-Крочемора]]<tex>^\star</tex> | ||
+ | * [[Алгоритм Колусси]]<tex>^\star</tex> | ||
+ | * [[Алгоритм Райта]]<tex>^\star</tex> | ||
+ | * [[Алгоритм Shift-And]]<tex>^\star</tex> | ||
+ | * [[Двусторонний алгоритм]]<tex>^\star</tex> | ||
+ | * [[Турбо-алгоритм Бойера-Мура]]<tex>^\star</tex> | ||
+ | |||
+ | === Нечёткий поиск === | ||
+ | * [[Алгоритм Ландау-Вишкина (k несовпадений)]]<tex>^\star</tex> | ||
+ | * [[Алгоритм Ландау-Вишкина (k различий)]]<tex>^\star</tex> | ||
− | == | + | == Суффиксное дерево == |
* [[Суффиксный бор]] | * [[Суффиксный бор]] | ||
* [[Сжатое суффиксное дерево]] | * [[Сжатое суффиксное дерево]] | ||
* [[Алгоритм Укконена]] | * [[Алгоритм Укконена]] | ||
+ | * [[Алгоритм МакКрейта]]<tex>^\star</tex> | ||
+ | * [[Алгоритм Фарача]]<tex>^\star</tex> | ||
− | + | == Суффиксный массив == | |
* [[Суффиксный массив]] | * [[Суффиксный массив]] | ||
* [[Построение суффиксного массива с помощью стандартных методов сортировки]] | * [[Построение суффиксного массива с помощью стандартных методов сортировки]] | ||
− | |||
* [[Алгоритм цифровой сортировки суффиксов циклической строки]] | * [[Алгоритм цифровой сортировки суффиксов циклической строки]] | ||
* [[Алгоритм Касаи и др.]] | * [[Алгоритм Касаи и др.]] | ||
* [[Алгоритм Карккайнена-Сандерса]] | * [[Алгоритм Карккайнена-Сандерса]] | ||
* [[Алгоритм поиска подстроки в строке с помощью суффиксного массива]] | * [[Алгоритм поиска подстроки в строке с помощью суффиксного массива]] | ||
+ | * [[Количество подпалиндромов в строке]]<tex>^\star</tex> | ||
== Задача о наименьшем общем предке == | == Задача о наименьшем общем предке == | ||
+ | * [[Алгоритм Мо]] | ||
+ | * [[Сведение задачи LCA к задаче RMQ]] | ||
+ | * [[Сведение задачи RMQ к задаче LCA]] | ||
* [[Метод двоичного подъема]] | * [[Метод двоичного подъема]] | ||
− | |||
* [[Решение RMQ с помощью разреженной таблицы]] | * [[Решение RMQ с помощью разреженной таблицы]] | ||
− | * [[Алгоритм Фарака-Колтона и Бендера]] (решение +/-1 RMQ с помощью метода | + | * [[Двумерная разреженная таблица]] |
− | * [[ | + | * [[Алгоритм Фарака-Колтона и Бендера]] (решение +/-1 RMQ с помощью метода четырех русских) |
+ | * [[Алгоритм Хьюи]] | ||
+ | * [[Heavy-light декомпозиция]] | ||
+ | * [[Алгоритм Шибера-Вишкина]]<tex>^\star</tex> | ||
+ | * [[Алгоритм Тарьяна поиска LCA за O(1) в оффлайн]]<tex>^\star</tex> | ||
+ | * [[Link-Cut Tree]]<tex>^\star</tex> | ||
+ | * [[Rake-Compress деревья]]<tex>^\star</tex> | ||
== Матроиды == | == Матроиды == | ||
+ | === Основные факты теории матроидов === | ||
* [[Определение матроида]] | * [[Определение матроида]] | ||
* [[Примеры матроидов]] | * [[Примеры матроидов]] | ||
* [[Прямая сумма матроидов]] | * [[Прямая сумма матроидов]] | ||
* [[Теорема Радо-Эдмондса (жадный алгоритм)]] | * [[Теорема Радо-Эдмондса (жадный алгоритм)]] | ||
− | |||
* [[Теорема о базах]] | * [[Теорема о базах]] | ||
* [[Аксиоматизация матроида базами]] | * [[Аксиоматизация матроида базами]] | ||
Строка 394: | Строка 564: | ||
* [[Аксиоматизация матроида циклами]] | * [[Аксиоматизация матроида циклами]] | ||
* [[Ранговая функция, полумодулярность]] | * [[Ранговая функция, полумодулярность]] | ||
+ | * [[Аксиоматизация матроида рангами]] | ||
* [[Двойственный матроид]] | * [[Двойственный матроид]] | ||
* [[Оператор замыкания для матроидов]] | * [[Оператор замыкания для матроидов]] | ||
+ | * [[Покрытия, закрытые множества]] | ||
+ | * [[Матроид Вамоса]]<tex>^\star</tex> | ||
+ | |||
+ | === Пересечение матроидов === | ||
* [[Пересечение матроидов, определение, примеры]] | * [[Пересечение матроидов, определение, примеры]] | ||
− | + | * [[Граф замен]] | |
− | |||
− | * [[Граф замен | ||
− | |||
* [[Алгоритм построения базы в пересечении матроидов]] | * [[Алгоритм построения базы в пересечении матроидов]] | ||
− | + | ||
+ | === Объединение матроидов === | ||
* [[Объединение матроидов, проверка множества на независимость]] | * [[Объединение матроидов, проверка множества на независимость]] | ||
* [[Объединение матроидов, доказательство того, что объединение является матроидом]] | * [[Объединение матроидов, доказательство того, что объединение является матроидом]] | ||
* [[Алгоритм построения базы в объединении матроидов]] | * [[Алгоритм построения базы в объединении матроидов]] | ||
− | ==Теория расписаний== | + | |
+ | == Теория расписаний == | ||
+ | === Общая теория === | ||
* [[Классификация задач]] | * [[Классификация задач]] | ||
* [[Методы решения задач теории расписаний]] | * [[Методы решения задач теории расписаний]] | ||
* [[Правило Лаулера]] | * [[Правило Лаулера]] | ||
− | * [[QpmtnCmax|<tex>Q|pmtn|C_{max}</tex>]] | + | |
+ | === Задачи с одним станком === | ||
+ | * [[1sumu|<tex>1 \mid \mid \sum U_{i}</tex>]] | ||
+ | * [[1sumwu|<tex> 1 \mid\mid \sum w_i U_i </tex>]] | ||
+ | * [[1sumwT|<tex> 1 \mid\mid \sum w_i T_i </tex>]] | ||
+ | * [[1p1sumu|<tex>1 \mid p_{i} = 1 \mid \sum U_{i}</tex>]] | ||
+ | * [[1ridipi1|<tex>1 \mid r_{i}, d_{i}, p_{i} = 1 \mid -</tex>]] | ||
+ | * [[1pi1sumwu|<tex>1 \mid p_{i} = 1 \mid \sum w_{i}U_{i}</tex>]] | ||
+ | * [[1ripi1sumwc|<tex>1 \mid r_{i}, p_i=1\mid \sum w_{i}C_{i}</tex>]] | ||
+ | * [[1ripi1sumf|<tex>1 \mid r_i, p_i = 1 \mid \sum f_i</tex>]] | ||
+ | * [[1ripipsumwu|<tex> 1 \mid r_i,p_i=p \mid \sum w_i U_i</tex>]] | ||
+ | * [[1ripippmtnsumwu| <tex> 1 \mid r_i,p_i=p, pmtn \mid \sum w_i U_i</tex>]] | ||
+ | * [[1ripmtnsumwu|<tex>1 \mid r_i, pmtn \mid \sum w_{i}U_{i}</tex>]] | ||
+ | * [[1outtreesumwc | <tex>1 \mid outtree \mid \sum w_i C_i</tex>]] | ||
+ | * [[1precpmtnrifmax|<tex>1 \mid prec, pmtn, r_i \mid f_{\max}</tex>]] | ||
+ | * [[1precripi1Lmax|<tex>1 \mid prec; r_i; p_i = 1 \mid L_{max}</tex>]] | ||
+ | |||
+ | === Специальные случаи задач для двух станков === | ||
+ | * [[P2precpi1Lmax|<tex>P2 \mid prec, p_i = 1 \mid L_{\max}</tex>]] | ||
+ | * [[R2Cmax|<tex>R2 \mid \mid C_{max}</tex>]] | ||
+ | * [[F2Cmax|<tex>F2 \mid \mid C_{max}</tex>]] | ||
+ | * [[O2Cmax|<tex>O2 \mid \mid C_{max}</tex>]] | ||
+ | * [[J2ni2Cmax|<tex>J2 \mid n_{i} \leqslant 2 \mid C_{max}</tex>]] | ||
+ | * [[J2pij1Lmax| <tex>J2\mid p_{ij} = 1\mid L_{max}</tex>]] | ||
+ | |||
+ | === Задачи для произвольного числа станков === | ||
+ | * [[Flow shop]] | ||
+ | * [[Fpij1sumwu|<tex>F \mid p_{ij} = 1 \mid \sum w_i U_i</tex>]] | ||
+ | * [[PSumCi|<tex>P \mid \mid \sum C_{i}</tex>]] | ||
+ | * [[Pintreepi1Lmax|<tex>P \mid intree, p_{i} = 1 \mid L_{max}</tex>]] | ||
+ | * [[PpmtnriLmax|<tex>P \mid pmtn, r_i \mid L_{max}</tex>]] | ||
+ | * [[Ppi1sumwu|<tex>P \mid p_i=1 \mid \sum w_i U_i</tex>]] | ||
+ | * [[Ppi1riintegerLmax|<tex>P \mid p_i=1; r_i - integer \mid L_{max}</tex>]] | ||
+ | * [[RSumCi|<tex>R \mid \mid \sum C_i</tex>]] | ||
+ | * [[RpmtnCmax|<tex>R \mid pmtn \mid C_{max}</tex>]] | ||
+ | * [[QpmtnCmax|<tex>Q \mid pmtn \mid C_{max}</tex>]] | ||
+ | * [[QpmtnSumCi|<tex> Q \mid pmtn \mid \sum C_i </tex>]] | ||
+ | * [[QpmtnriLmax|<tex>Q \mid pmtn, r_{i} \mid L_{max}</tex>]] | ||
+ | * [[QSumCi|<tex>Q\mid\mid\sum{C_i}</tex>]] | ||
+ | * [[Opi1sumu|<tex>O \mid p_{ij} = 1 \mid \sum U_i</tex>]] | ||
+ | * [[Opij1di|<tex>O \mid p_{ij} = 1, d_i \mid - </tex>]] | ||
+ | * [[Opij1sumwu|<tex> O \mid p_{i,j} = 1 \mid \sum w_{i} U_{i} </tex>]] | ||
+ | * [[Opij1SumTi|<tex> O \mid p_{i,j} = 1 \mid \sum T_{i} </tex>]] | ||
+ | * [[Opij1Cmax|<tex> O \mid p_{ij} = 1 \mid C_{max} </tex>]] | ||
+ | * [[Opij1Sumwc|<tex> O \mid p_{ij} = 1 \mid \sum w_i C_i </tex>]] |
Текущая версия на 19:43, 4 сентября 2022
Убедительная просьба читать правила оформления вики-конспектов.
Символом
помечены дополнительные темы (возможно, сложные), которые не были подробно рассмотрены (или вообще рассмотрены) в рамках курса.Содержание
- 1 Первый семестр
- 2 Второй семестр
- 2.1 Амортизационный анализ
- 2.2 Персистентные структуры данных
- 2.3 Приоритетные очереди
- 2.4 Система непересекающихся множеств
- 2.5 Поисковые структуры данных
- 2.6 Дерево отрезков
- 2.7 Дерево Фенвика
- 2.8 Хеширование
- 2.9 Сортировки
- 2.10 Сортирующие сети
- 2.11 Алгоритмы поиска
- 2.12 Связь между структурами данных
- 3 Третий семестр
- 4 Четвертый семестр
Первый семестр
Отношения
- Определение отношения
- Композиция отношений, степень отношения, обратное отношение
- Рефлексивное отношение. Антирефлексивное отношение.
- Симметричное отношение
- Антисимметричное отношение
- Транзитивное отношение
- Отношение порядка
- Изоморфизмы упорядоченных множеств
- Отношение эквивалентности
- Транзитивное замыкание отношения
- Алгоритм Флойда-Уоршалла построения транзитивного замыкания отношения
- Транзитивный остов
Булевы функции
- Определение булевой функции
- Побитовые операции
- Суперпозиции
- ДНФ
- Сокращенная и минимальная ДНФ, минимизация ДНФ методами гиперкубов, карт Карно, Квайна
- КНФ
- 2-SAT
- XOR-SAT
- Специальные формы КНФ: КНФ в форме Хорна и КНФ в форме Крома
- Полином Жегалкина, преобразование Мёбиуса
- Полные системы функций. Теорема Поста о полной системе функций
- Представление функции класса DM с помощью медианы
- Пороговая функция
- Троичная логика
Схемы из функциональных элементов
- Реализация булевой функции схемой из функциональных элементов
- Простейшие методы синтеза схем из функциональных элементов
- Метод Лупанова синтеза схем
- Cумматор
- Каскадный сумматор
- Двоичный каскадный сумматор
- Троичный сумматор
- Реализация вычитания сумматором
- Матричный умножитель
- Дерево Уоллеса
- Контактная схема
- Триггеры
- Квантовые гейты
Представление информации
- Кодирование информации
- Представление целых чисел: прямой код, код со сдвигом, дополнительный код
- Представление вещественных чисел
- Представление символов, таблицы кодировок
Алгоритмы сжатия
- Алгоритм Хаффмана
- Оптимальное хранение словаря в алгоритме Хаффмана
- Алгоритм Хаффмана за O(n)
- Алгоритм Ху-Таккера
- Неравенство Крафта
- Неравенство Макмиллана
- Код Шеннона
- Оптимальный префиксный код с длиной кодового слова не более L бит
- Алгоритмы LZ77 и LZ78
- Алгоритм LZW
- Алгоритм LZSS
- Алгоритм LZMA
- Преобразование Барроуза-Уиллера и обратное ему
- Преобразование MTF
- Расстояние Хэмминга
- Избыточное кодирование, код Хэмминга
- Гамма-, дельта- и омега-код Элиаса
Комбинаторика
Комбинаторные объекты
- Комбинаторные объекты
- Лексикографический порядок
- Коды Грея
- Коды Грея для перестановок
- Коды антигрея
- Монотонный код Грея
- Цепные коды
- Правильные скобочные последовательности
Генерация комбинаторных объектов
- Генерация комбинаторных объектов в лексикографическом порядке
- Получение номера по объекту
- Получение объекта по номеру
- Получение следующего объекта
- Получение предыдущего объекта
- Метод генерации случайной перестановки, алгоритм Фишера-Йетса
- Методы генерации случайного сочетания
Подсчёт числа объектов
- Формула включения-исключения, подсчет числа беспорядков
- Нахождение количества разбиений числа на слагаемые. Пентагональная теорема Эйлера
- Производящая функция
- Лемма Бёрнсайда и Теорема Пойа
- Задача об ожерельях
- Числа Стирлинга первого рода
- Числа Стирлинга второго рода
- Числа Эйлера первого и второго рода. Подъемы в перестановках
- Числа Каталана
Свойства комбинаторных объектов
- Умножение перестановок, обратная перестановка, группа перестановок
- Действие перестановки на набор из элементов, представление в виде циклов
- Таблица инверсий
- Теорема Кэли
- Матричное представление перестановок
- Задача о минимуме/максимуме скалярного произведения
- Задача о монотонных подпоследовательностях, теорема о связи длины НВП и НУП
Динамическое программирование
Классические задачи динамического программирования
- Кратчайший путь в ациклическом графе
- Задача о числе путей в ациклическом графе
- Задача о расстановке знаков в выражении
- Задача о порядке перемножения матриц
- Задача о наибольшей общей подпоследовательности
- Задача о наибольшей возрастающей подпоследовательности
- Быстрый поиск наибольшей возрастающей подпоследовательности*
- Задача коммивояжера, ДП по подмножествам
- Задача о редакционном расстоянии, алгоритм Вагнера-Фишера
- Задача о рюкзаке
Способы оптимизации методов динамического программирования
- Метод четырех русских для умножения матриц
- Применение метода четырех русских в задачах ДП на примере задачи о НОП
- Задача об оптимальном префиксном коде с сохранением порядка. Монотонность точки разреза
- Meet-in-the-middle
- Convex hull trick
Другие задачи
- Задача о расстоянии Дамерау-Левенштейна
- Задача о выводе в контекстно-свободной грамматике, алгоритм Кока-Янгера-Касами
- Задача о наибольшей подпоследовательности-палиндроме
- Задача о наибольшей общей возрастающей последовательности
- Задача о наибольшей общей палиндромной подпоследовательности
- Динамическое программирование по профилю
- Динамика по поддеревьям
Теория вероятностей
- Вероятностное пространство, элементарный исход, событие
- Независимые события
- Условная вероятность
- Формула полной вероятности
- Формула Байеса
- Дискретная случайная величина
- Независимые случайные величины
- Математическое ожидание случайной величины
- Дисперсия случайной величины
- Ковариация случайных величин
- Корреляция случайных величин
- Неравенство Маркова
- Энтропия случайного источника
- Симуляция одним распределением другого
- Арифметическое кодирование
- Парадоксы теории вероятностей
- Схема Бернулли
Марковские цепи
- Марковская цепь
- Теорема о поглощении
- Фундаментальная матрица
- Математическое ожидание времени поглощения
- Расчет вероятности поглощения в состоянии
- Эргодическая марковская цепь
- Регулярная марковская цепь
- Примеры использования Марковских цепей
- Скрытые Марковские модели
- Алгоритм Витерби
- Алгоритм "Вперед-Назад"
- Алгоритм Баума-Велша
Второй семестр
Амортизационный анализ
- Амортизационный анализ
- Динамический массив
- Hashed Array Tree
- Список
- Стек
- Очередь
- Дек
- Мажорирующий элемент
- Счетчик Кнута
- Мастер-теорема
- List order maintenance
Персистентные структуры данных
- Персистентные структуры данных
- Персистентный стек
- Персистентная очередь
- Персистентный дек
- Персистентная приоритетная очередь
Приоритетные очереди
- Двоичная куча
- Биномиальная куча
- Фибоначчиева куча
- Левосторонняя куча
- Тонкая куча
- Толстая куча на избыточном счетчике
- Куча Бродала-Окасаки
Система непересекающихся множеств
- Наивные реализации
- Списки с весовой эвристикой
- Реализация с помощью леса корневых деревьев
- СНМ с операцией удаления за О(1)
Поисковые структуры данных
- Упорядоченное множество
- Дерево поиска, наивная реализация
- АВЛ-дерево
- 2-3 дерево
- B-дерево
- Красно-черное дерево
- Декартово дерево
- Декартово дерево по неявному ключу
- Splay-дерево
- Взвешенное дерево
- Tango-дерево
- Рандомизированное бинарное дерево поиска
- Дерево ван Эмде Боаса
- Список с пропусками
- Fusion tree
- Сверхбыстрый цифровой бор
- Rope
- AA-дерево
Дерево отрезков
- Статистики на отрезках. Корневая эвристика
- Корневая декомпозиция с операциями: get, insert, erase
- Дерево отрезков. Построение
- Реализация запроса в дереве отрезков сверху
- Реализация запроса в дереве отрезков снизу
- Несогласованные поддеревья. Реализация массового обновления
- Многомерное дерево отрезков
- Сжатое многомерное дерево отрезков
Дерево Фенвика
- Дерево Фенвика
- Встречное дерево Фенвика
- Дерево Фенвика для некоммутативных операций
- Многомерное дерево Фенвика
Хеширование
- Хеш-таблица
- Разрешение коллизий
- Хеширование кукушки
- Идеальное хеширование
- Перехеширование
- Фильтр Блума
- Quotient filter
- Универсальное семейство хеш-функций
- Расширяемое хеширование
Сортировки
Квадратичные сортировки
Сортировки на сравнениях
- Сортировка Шелла
- Сортировка кучей
- Быстрая сортировка
- Сортировка слиянием
- Cортировка слиянием с использованием O(1) дополнительной памяти
- Терпеливая сортировка
- Timsort
- Smoothsort
- Теорема о нижней оценке для сортировки сравнениями
Многопоточные сортировки
Другие сортировки
- Поиск k-ой порядковой статистики
- Поиск k-ой порядковой статистики за линейное время
- Поиск k-ой порядковой статистики в двух массивах
- Сортировка подсчетом
- Цифровая сортировка
- Карманная сортировка
- Сортировка Хана
- Задача флага Нидерландов
- Блинная сортировка
Сортирующие сети
- Сортирующие сети
- Проверка сети компараторов на то, что она сортирующая. 0-1 принцип
- Сортирующие сети для квадратичных сортировок
- Сортировочные сети с особыми свойствами
- Сеть Бетчера
Алгоритмы поиска
- Целочисленный двоичный поиск
- Поиск в матрице
- Вещественный двоичный поиск
- Троичный поиск
- Поиск с помощью золотого сечения
- Интерполяционный поиск
- Метод Фибоначчи
Связь между структурами данных
Третий семестр
Основные определения теории графов
- Основные определения: граф, ребро, вершина, степень, петля, путь, цикл
- Лемма о рукопожатиях
- Теорема о существовании простого пути в случае существования пути
- Теорема о существовании простого цикла в случае существования цикла
- Матрица смежности графа
- Матрица инцидентности графа
- Циклическое пространство графа
- Фундаментальные циклы графа
- Дерево, эквивалентные определения
- Алгоритмы на деревьях
- Двудольные графы
- Дополнительный, самодополнительный граф
- Теоретико-множественные операции над графами
- Рёберное ядро
- Факторизация графов
- Группы графов
- Гиперграфы
Связность в графах
- Отношение связности, компоненты связности
- Отношение реберной двусвязности
- Отношение вершинной двусвязности
- Точка сочленения, эквивалентные определения
- Мост, эквивалентные определения
- Граф компонент реберной двусвязности
- Граф блоков-точек сочленения
- k-связность
- Теорема Менгера
- Теорема Менгера, альтернативное доказательство
- Вершинная, реберная связность, связь между ними и минимальной степенью вершины
- Задача о динамической связности оффлайн
Остовные деревья
Построение остовных деревьев
- Остовные деревья: определения, лемма о безопасном ребре
- Алгоритм Прима
- Алгоритм Краскала
- Алгоритм Борувки
- Теорема Тарьяна (критерий минимальности остовного дерева)
- Алгоритм двух китайцев
- Минимально узкое остовное дерево
- Остовное дерево в планарном графе
Свойства остовных деревьев
- Матрица Кирхгофа
- Связь матрицы Кирхгофа и матрицы инцидентности
- Подсчет числа остовных деревьев с помощью матрицы Кирхгофа
- Количество помеченных деревьев
- Коды Прюфера
Обходы графов
Эйлеровы графы
- Эйлеров цикл, Эйлеров путь, Эйлеровы графы, Эйлеровость орграфов
- Покрытие рёбер графа путями
- Алгоритм построения Эйлерова цикла
- Произвольно вычерчиваемые из заданной вершины графы
- Деревья Эйлерова обхода
Гамильтоновы графы
- Гамильтоновы графы
- Теорема Хватала
- Теорема Дирака
- Теорема Оре
- Теорема Поша
- Теорема Гуйя-Ури
- Алгоритм нахождения Гамильтонова цикла в условиях теорем Дирака и Оре
- Теорема Гринберга
- Турниры
- Теорема Редеи-Камиона
Укладки графов
- Укладка графа на плоскости
- Формула Эйлера
- Непланарность и
- Укладка дерева
- Укладка графа с планарными компонентами реберной двусвязности
- Укладка графа с планарными компонентами вершинной двусвязности
- Теорема Понтрягина-Куратовского
- Теорема Вагнера
- Род, толщина, крупность, число скрещиваний
- Двойственный граф планарного графа
- Теорема Фари
- Гамма-алгоритм
- Разрез в планарных графах
Раскраски графов
- Раскраска графа
- Двудольные графы и раскраска в 2 цвета
- Хроматический многочлен
- Формула Зыкова
- Формула Уитни
- Теорема Брукса
- Верхние и нижние оценки хроматического числа
- Хроматическое число планарного графа
- Многочлен Татта
- Теория Рамсея
Обход в глубину
- Обход в глубину, цвета вершин
- Лемма о белых путях
- Использование обхода в глубину для проверки связности
- Использование обхода в глубину для поиска цикла
- Использование обхода в глубину для топологической сортировки
- Использование обхода в глубину для поиска компонент сильной связности
- Использование обхода в глубину для поиска точек сочленения
- Построение компонент вершинной двусвязности
- Использование обхода в глубину для поиска мостов
- Построение компонент реберной двусвязности
Кратчайшие пути в графах
- Обход в ширину
- Алгоритм Форда-Беллмана
- Алгоритм Дейкстры
- Алгоритм Флойда
- Алгоритм Джонсона
- Алгоритм Левита
- Алгоритм A*
- Алгоритм D*
- Эвристики для поиска кратчайших путей
Задача о паросочетании
- Паросочетания: основные определения, теорема о максимальном паросочетании и дополняющих цепях
- Алгоритм Форда-Фалкерсона для поиска максимального паросочетания
- Алгоритм Куна для поиска максимального паросочетания
- Теорема Холла
- Связь максимального паросочетания и минимального вершинного покрытия в двудольных графах
- Связь вершинного покрытия и независимого множества
- Рёберное ядро
- Матрица Татта и связь с размером максимального паросочетания в двудольном графе
- Теорема Татта о существовании полного паросочетания
- Паросочетания в недвудольных графах. Алгоритм вырезания соцветий
- Декомпозиция Эдмондса-Галлаи
- Задача об устойчивом паросочетании
- Совершенное паросочетание в кубическом графе
Задача о максимальном потоке
- Определение сети, потока
- Разрез, лемма о потоке через разрез
- Дополняющая сеть, дополняющий путь
- Сложение и разность потоков
- Теорема Форда-Фалкерсона
- Алгоритм Форда-Фалкерсона, реализация с помощью поиска в глубину
- Алоритм Эдмондса-Карпа
- Алгоритм масштабирования потока
- Блокирующий поток
- Схема алгоритма Диница
- Теоремы Карзанова о числе итераций алгоритма Диница в сети с целочисленными пропускными способностями
- Алгоритм Голдберга-Тарьяна
- Алгоритм поиска блокирующего потока в ациклической сети
- Метод проталкивания предпотока
- Алгоритм "поднять-в-начало"
- Теорема о декомпозиции
- Теорема о декомпозиционном барьере
- Циркуляция потока
- Алгоритм Штор-Вагнера нахождения минимального разреза
- Алгоритм Каргера для нахождения минимального разреза
- Примеры сведения к задачам поиска потока
Задача о потоке минимальной стоимости
- Поток минимальной стоимости
- Теорема Форда-Фалкерсона о потоке минимальной стоимости
- Лемма об эквивалентности свойства потока быть минимальной стоимости и отсутствии отрицательных циклов в остаточной сети
- Поиск потока минимальной стоимости методом дополнения вдоль путей минимальной стоимости
- Использование потенциалов Джонсона при поиске потока минимальной стоимости
- Сведение задачи о назначениях к задаче о потоке минимальной стоимости
- Венгерский алгоритм решения задачи о назначениях
- Алгоритм отмены цикла минимального среднего веса
Четвертый семестр
Основные определения. Простые комбинаторные свойства слов
- Основные определения, связанные со строками
- Период и бордер, их связь
- Слово Фибоначчи
- Слово Туэ-Морса
- Декомпозиция Линдона
- Алгоритм Ландау-Шмидта
- Алгоритм Крочемора
- Алгоритм Мейна-Лоренца
- Алгоритм Манакера
- Дерево палиндромов
Поиск подстроки в строке
Точный поиск
- Наивный алгоритм поиска подстроки в строке
- Поиск подстроки в строке с использованием хеширования. Алгоритм Рабина-Карпа
- Поиск наибольшей общей подстроки двух строк с использованием хеширования
- Префикс-функция
- Алгоритм Кнута-Морриса-Пратта
- Автомат Кнута-Морриса-Пратта
- Z-функция
- Бор
- Алгоритм Ахо-Корасик
- Суффиксный автомат
- Алгоритм Бойера-Мура
- Алгоритм Апостолико-Крочемора
- Алгоритм Колусси
- Алгоритм Райта
- Алгоритм Shift-And
- Двусторонний алгоритм
- Турбо-алгоритм Бойера-Мура
Нечёткий поиск
Суффиксное дерево
Суффиксный массив
- Суффиксный массив
- Построение суффиксного массива с помощью стандартных методов сортировки
- Алгоритм цифровой сортировки суффиксов циклической строки
- Алгоритм Касаи и др.
- Алгоритм Карккайнена-Сандерса
- Алгоритм поиска подстроки в строке с помощью суффиксного массива
- Количество подпалиндромов в строке
Задача о наименьшем общем предке
- Алгоритм Мо
- Сведение задачи LCA к задаче RMQ
- Сведение задачи RMQ к задаче LCA
- Метод двоичного подъема
- Решение RMQ с помощью разреженной таблицы
- Двумерная разреженная таблица
- Алгоритм Фарака-Колтона и Бендера (решение +/-1 RMQ с помощью метода четырех русских)
- Алгоритм Хьюи
- Heavy-light декомпозиция
- Алгоритм Шибера-Вишкина
- Алгоритм Тарьяна поиска LCA за O(1) в оффлайн
- Link-Cut Tree
- Rake-Compress деревья
Матроиды
Основные факты теории матроидов
- Определение матроида
- Примеры матроидов
- Прямая сумма матроидов
- Теорема Радо-Эдмондса (жадный алгоритм)
- Теорема о базах
- Аксиоматизация матроида базами
- Теорема о циклах
- Аксиоматизация матроида циклами
- Ранговая функция, полумодулярность
- Аксиоматизация матроида рангами
- Двойственный матроид
- Оператор замыкания для матроидов
- Покрытия, закрытые множества
- Матроид Вамоса
Пересечение матроидов
- Пересечение матроидов, определение, примеры
- Граф замен
- Алгоритм построения базы в пересечении матроидов
Объединение матроидов
- Объединение матроидов, проверка множества на независимость
- Объединение матроидов, доказательство того, что объединение является матроидом
- Алгоритм построения базы в объединении матроидов