Лекции, прочитанные на сборах
20 марта
Лекция D: Структуры данных – 1 (Алексей Гусаков)
- Списки. Односвязные и двусвязные. Добавление/удаление. Кольцевые списки.
- Стеки. Стеки на массивах и списках. Примеры простейших задач на стеки.
- Очереди. Очереди на списках. Очереди на массивах в виде циклического буфера.
- Деки. Задачи на деки. Лабиринты.
- Сортированные массивы. Бинарный поиск.
- Хэш-таблицы.
Лекция С: Структуры данных – 1 (Андрей Шестимеров)
- Простые структуры данных.
- Очереди и стеки.
- Списковые структуры, представление списков в массиве.
- Списки в динамической паматью
- Бинарный поиск, поиск k-го по величине в массиве
- Heap, Heap-sort и очередь с приоритетами
- Дерево отрезков
- Обзор
- Init
- Update
- Запросы
- Обобщение на многомерный случай
- Двойчные деревья поиска
- Поиск
- Добавление и удаление
- Сбалансированные деревья.
Лекция B: Геометрия (Дмитрий Королев)
- Систематизация подходов к решению задач на вычислительную геометрию
- Метод границ
- Метод деления пополам
- Примеры
- Пример 1 – Задача о самолётах (см. ниже)
- Пример 2 – Задача о бассейне (см. ниже)
- Теорема Хэлли и её использование
- Разбиения плоскости
- Двоичное деление пространства (BSP-Trees)
- Построение BSP-Tree
- Алгоритмы на BSP-Tree и их эффективность
- Пример использования : точки, отдалённые от данной не более, чем на R
- Области Вороного
- Определение
- Свойства
- Использование областей Вороного в задачах
- Разбор задачи «Области Вороного на плоскости при использовании Матхэттенской метрики расстояния»
- Триангуляции
- Определение триангуляции
- Триангуляция Делоне
- Свойства триангуляции Делоне
- О двойственности триангуляции Делоне областям Вороного
- Алгоритмы построения триангуляции Делоне
- Алгоритм «Разделяй и Властвуй» для построения триангуляции Делоне : разбор
- Разбор задачи «Стол в колоннах»
- Стереометрия
- Эффективное использование скалярного и векторного произведений в пространстве
- Yet another алгоритм решения задачи об объёме общей части выпуклых тел
- Подробный разбор решения задачи «Пересечение кубов»
Задача о самолётах. Над единичным квадратом пролетели по прямым N самолётов. Каждый самолёт «видит» на расстояние K. Определить, остались ли в этом квадрате точки, которые не увидел ни один самолёт. Вариант: найти минимальное K, для которого таких точек не осталось.
Задача о бассейне. В единичном квадрате имеется несколько колонн (окружностей) одинакового радиуса. В этот квадрат хочется поместить круглый бассейн. Найти максимальный радиус этого бассейна.
Лекция A: Суффиксные деревья. Алгоритм Мак-Крейта построения суффиксного дерева за линейное время (Борис Василевский)
- Суффиксное дерево, наивный алгоритм
- Сжатое суффиксное дерево, детали реализации
- Суффиксные ссылки
- Общий шаг алгоритма Мак-Крейта
- Добавление следующего суффикса, «скачок по счетчику»
- Сохранение структуры суффиксных ссылок
- Оценка количества действий O(n)
- Использование суффиксных деревьев
- Поиск подстроки в строке
- Обобщенное суффиксное дерево
- Количество различных подстрок в строке
- Наибольшая общая подстрока
- Поиск максимальных повторов
21 марта
Лекция D: Структуры данных – 2 (Алексей Лахно)
- Двоичные деревья поиска
- Основные определения
- Обход дерева и печать элементов в неубывающем порядке
- Поиск элемента по ключу
- Нахождение минимального и максимального элементов
- Нахождение следующего и предыдущего
- Добавление элемента
- Удаление элемента
- Вектор (саморасширяющийся массив)
- Понятие вектора
- Оценка времени добавления элемента двумя способами
- Двоичная куча (Heap)
- Понятие двоичной кучи и ее основное свойство
- Процедура Heapify поддержания основного свойства кучи
- Построение кучи. Линейная оценка сложности
- Heap Sort — сортировка с помощью кучи
- Приоритетная очередь: операции добавления и извлечения максимального элемента
- Разбор задачи «Тупики» с Московской Городской олимпиады
Лекция С: Структуры данных – 2 (Андрей Шестимеров)
- Декартовы деревья
- Хеш-таблицы
- Хеш-функции
- Методы разрешения коллизий
- Хеширование с открытой адресацией
- Двойное хеширование
- Системы непересекающихся множеств
- Операции
- Реализация с помощью массивов
- Реализация с помощью списков
- Лес непересекающихся множеств
Лекция AB: LCA и RMQ за O(1) (Александр Чернов)
- Манипуляции с битами: обнуление/установка единичных битов справа и т. п., округление к ближайшей степени 2, подсчет единичных и нулевых битов в слове.
- Постановка задачи LCA: Least common accessor в дереве, постановка задачи RMQ: Range Minimum Query, сведение задачи LCA к RMQ за O(n), где n – число узлов в дереве.
- Решение задачи RMQ с предвычислением за O(n log n) (n – размер массива) и стоимостью запроса O(1) методом динамического программирования.
- Задача ±1 RMQ, решение задачи с предвычислением за O(n) и стоимостью запроса O(1). Таким образом получаем алгоритм решения LCA с предвычислением O(n) и запросом O(1).
- Сведение задачи RMQ к задаче LCA за O(n). В итоге получаем RMQ с предвычислением O(n) и запросом O(1).
Литература:- Генри Уоррен, мл., Алгоритмические трюки для программстов.
- Michael A. Bender, Martin Farach-Colton, The LCA Problem Revisited
22 марта
Лекция D: Длинная арифметика (Вадим Антонов)
- Хранение длинных чисел.
- Сравнение длинных чисел.
- Арифметические операции над длинными числами:
а. Сложение
б. Вычитание
в. Умножение
г. Деление длинного числа на короткое
д. Деление длинного числа на длинное
Лекция С: Базовые строковые алгоритмы (Борис Василевский)
- Алгоритм Кнута-Морриса-Пратта
- Введение, обозначения, наивный алгоритм
- Префикс – функция
- КМП
- Интерпретация с использованием конечного автомата
- Алгоритм Ахо-Корасик
- Бор, сжатый бор
- Построение бора по набору слов
- Интерпретация с использованием конечного автомата, суффиксные ссылки
- Ахо-Корасик
Лекция AB: Теорема Геделя о неполноте (Алексей Семенов)
23 марта
Лекция D: Вычислительная геометрия на плоскости (Сергей Шедов)
- Векторы
- Понятие вектора
- Координаты вектора
- Операции над векторами
- Скалярное произведение векторов
- Векторное (косое) произведение векторов
- Нахождение полярного угла
- Типы данных для программирования задач вычислительной геометрии
- Взаимное расположение точек и фигур
- Принадлежность точки прямой
- Принадлежности точки лучу
- Принадлежность точки отрезку
- Расстояние от точки до прямой
- Определение факта пересечения двух отрезков
- Уравнение прямой
- Уравнение окружности
- Уравнение биссектрисы угла
- Уравнение касательной к окружности (геометрический метод)
- Нахождение точек пересечения окружности и прямой (геометрический метод)
- Нахождение точек пересечения двух окружностей (алгебраический и геометрический методы)
- Нахождение площади простого многоугольника
- Определение принадлежности точки простому многоугольнику
- Примеры решения задач прошлых Всероссийских олимпиад рассмотренными методами
- Задача «Лесной пожар»
- Задача «Раздел царства»
Лекция С: Перебор (Алексей Лахно)
- Игровые задачи. Альфа-бета отсечение
- Задачи на перебор с возвратом. Метод ветвей и границ
- Отсечение по времени на C и Паскале
- Оптимизационные задачи и эвристические методы их решения
- Метод локальных улучшений
- Случайный поиск
- Метод отжига
Лекция AB: Игры и стратегии (Антон Фонарев)
- Игры на графах
- выигрышные/проигрышные позиции
- игры на ациклических графах
- игры на циклических графах, ничья
- Число Спрага-Гранди
- определение
- теорема Спрага-Гранди
- примеры (Grundy's game, Withoff's game, Euclid, Nim, Hackenbush)
- Теория игр
- антагонистические игры в нормальной форме
- матричные игры
- максмин и минимакс
- значение игры и оптимальные стратегии
- смешанные стратегии
- существование решения матричной игры в смешанных стратегиях
- итеративный метод решения матричных игр
- Позиционные игры n игроков в общем случае
- существование решения конечной игры n лиц с полной информацией (центральная теорема)
24 марта
Лекция D: Динамическое программирование (Александр Мамонтов)
- Общие понятия (что такое динамика, для чего и когда используется)
- Принцип динамики (подзадача, разбиение задачи на подзадачи)
- Примеры и пояснения
- Числа Фибоначи
- Гвоздики
- Биномальные коэффициенты (колво способов добраться в таблице)
- Минимальный путь в таблице.
- Наибольшая возрастающая подпоследовательность
- Лесенки.
- Восстановление скобок
Лекция C: Геометрия (Сергей Шедов)
- Повторение базовых понятий вычислительной геометрии на плоскости (векторы, скалярное и векторное (косое) произведение векторов, полярный угол, способы описания прямой и окружности на плоскости)
- Особенности программирования задач вычислительной геометрии
- Определение взаимного расположения геометрических объектов и нахождение точек пересечения
- Расположение точки относительно прямой, луча или отрезка
- Взаимное расположение прямых, отрезков, лучей
- Взаимное расположение окружности и прямой
- Взаимное расположение двух окружностей
- Многоугольники
- Проверка выпуклости многоугольника
- Проверка принадлежности точки внутренней области простого многоугольника
- Вычисление площади простого многоугольника
- Построение выпуклой оболочки для множества из N точек плоскости
- Особые точки многоугольников и множеств N точек плоскости
- Эффективный алгоритм нахождения ближайшей пары из N точек плоскости
- Примеры задач всероссийских олимпиад прошлых лет на методы вычислительной геометрии
Лекция AB: Языки и автоматы (Александр Шень)
- Конечные автоматы
- Определение детерминированного конечного автомата (DFA)
- Автомат, распознающий язык
- Определение и примеры регулярных языков
- Недетерминированный конечный автомат (NFA)
- Детерминизация NFA
- Операции над автоматами
- Регулярность дополнения к регулярному языку
- Регулярность конкатенации двух регулярных языков
- Регулярность итерации регулярного языка
28 марта, вторник
Лекция D: Графы – 1 (Алексей Лахно)
- Понятие графа. Основные определения
- Способы представления графов
- Алгоритмы нахождения минимального остовного дерева
- Алгоритм Прима
- Алгоритм Краскала
- Поиск в глубину и его применение
- Общая схема
- Компоненты связности
- Топологическая сортировка
- Другие задачи, решаемые с помощью поиска в глубину: поиск мостов, точек сочленения, компонент сильной связности
- Эйлеровы циклы
Лекция C: Графы (Алексей Тимофеев)
- Неориентированные графы
- точки сочленения
- компоненты вершинной двусвязности
- мосты
- компоненты реберной двусвязности
- Ориентированные графы
- топологическая сортировка
- компоненты сильной связности
- алгоритм Дейкстры
- простая реализация
- релизация с помощью кучи
- алгоритм Флойда
Лекция AB: Потоки минимальной стоимости, задача о назначениях (Антон Фонарев)
- Потоки в сетях
- определения
- обозначения
- Задача о максимальном потоке
- остаточные сети
- дополняющие пути
- разрезы
- теорема Форда-Фалкерсона
- метод Форда-Фалкерсона
- Реализация метода Форда-Фалкерсона
- алгоритм Эдмондса-Карпа
- алгоритм масштабирования
- Поток заданной величины минимальной стоимости
- постановка задачи
- согласованная декомпозиция
- алгоритм нахождения потока заданной величины минимальной стоимости
- потенциалы Джонсона
- Задача о назначениях
- венгерский алгоритм
- нормальное решение
29 марта
Семинар D: Задачи на графы (Маргарита Трухина)
Семинар C: Задачи на графы (Виктор Матюхин, Александр Чернов)
Лекция AB: Динамика по профилю (Борис Василевский)
- Задача о замощении домино
- Профили, базовая линия
- Рекуррентное соотношение для задачи о замощении
- Решение задачи о замощении с использованием ДП по профилю
- Связь ДП по профилю и линейной алгебры
- Рекуррентное соотношение в ДП по профилю как умножение матрицы на вектор
- Быстрое возведение в степень
- Использование быстрого возведения матрицы в степень для существенно несимметричных задач
- Задача о симпатичных узорах
- Задача о расстановке королей
- Постановка задачи
- Эффективная нумерация профилей
- Задача о расстановке коней
- Постановка задачи
- Эффективное хранение разреженных матриц
- Графовая интерпретация ДП по профилю
- Быстрое ДП по профилю
- Изломанный профиль
- Правила перехода в быстром ДП по профилю для задачи о замощении домино
30 марта, четверг
Лекция CD: Динамическое программирование (Денис Кириенко)
- Что такое динамика. Когда нужна, а когда не нужна динамика.
- Основные применения динамики:
- Подсчет количества объектов. Пример: числа Каталана.
- Нахождение минимального (максимального) решения. Пример: задача «Банкомат».
- Позиционные игры. Пример: задача «Игра с датами».
- Задача «Ход конем».
- Задача «восстановление скобок»: динамика по длине и балансу.
- Задача «пьяный студент»: динамика по длине и балансу.
- Задача быстрого нахождения k-й правильной скобочной последовательности.
- Задача рюкзака и связные задачи (выбор камней по заданной суммарной массе, задача «Копилка»).
- Задача умножения большого числа матриц – динамика по интервалам A(i..j).
- Задача получения максимального палиндрома из данной строки (динамика по подстрокам).
- Нахождение наибольшей общей подпоследовательности.
- Нахождение наибольшей возрастающей подпоследовательности за время O(n2) и O(n log n).
- Динамика от >2 параметров: задача покупки товаров с системой скидок.
- Метод динамики «сверху вниз» (рекурсия + memorization).
Лекция C++: STL (Дмитрий Королев)