Лекции прочитанные на сборах
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: Теорема Геделя о неполноте