Лекции прочитанные на сборах
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 лиц с полной информацией (центральная теорема)