Дорешивание
Лекции
21 марта, среда
Лекция А. Длинная арифметика возвращается
- Алгоритм Карацубы
- Идея, сложность
- Реализация, оптимизации
- Дискретное преобразование Фурье
- Теория
- Введение (комплексные числа, комплексная экспонента, корни из единицы и прочие простые сущности из математики)
- Многочлены
- Дискретное преобразование Фурье (формальное определение, терминология)
- Обратное преобразование
- Алгоритмы
- Алгоритм Cooley-Tukey
- Разбор реализации
- Подключение к длинной арифметике
- Разбор задач
- Летние учебно-тренировочные сборы кандидатов в сборную России по информатике, Малоярославец, 27 июня 2006 года, Задача A “Дырявая лента”
- St. Petersburg SU Contest, Petrozavodsk Summer Trainings, August 30, 2006, Problem H “Robot's DNA”
- Литература
Лекция B. C++ Standard Template Library (STL)
- Понятие шаблона (template)
- Контейнеры и итераторы
- Что такое итератор
- Стандартные контейнеры
- vector< >
- set< >
- map< >
- stack< >
- queue< >
- priority_queue< >
- Применения контейнеров
- Обобщённые алгоритмы (<algorithm>)
- Принципы работы обобщённых алгоритмов
- Сортировка: sort(), stable_sort(), nth_element()
- Бинарный поиск: binary_search(), equal_range(), lower_bound(), upper_bound()
- Перестановки: next_permutation(), prev_permutation()
- Прочие алгоритмы: min(), max(), swap(), reverse(), copy(), max_element(), min_element(), for_each(), search(), find_if().
- Использование обобщённых алгоритмов
- Bitset< >
- Объекты-функции (“функторы”) и их использование
- Понятие объекта-функции
- Стандартные объекты-функции (<functional>)
- Эффективное использование STL: реализация алгоритма Дейкстры с кучей
- Чего нет в STL
Лекция C. Задачи поиска
- Поиск в неупорядоченных массивах
- Порядковые статистики за O(Nlog N?)
- Бинарный поиск в упорядоченном массиве.
- Бинарный поиск для монотонных функций. Разбор задачи «Кубический корень».
- Бинарный поиск по ответу.
- Разбор задачи «Очень легкая задача» (Москва, 10–11 класс, 2007)
- Разбор задачи «Автобус» (Украинская, 2000)
22 марта, четверг
Лекция А. Теория групп
- Группа, смежные классы, теорема Лагранжа
- Группа перестановок, циклическая группа, группа преобразований
- Действия групп, орбиты, стабилизаторы
- Формула Бернсайда, примеры.
Лекция B. Алгоритмы на строках
- Алгоритм Кнута-Морриса-Пратта
- Введение, обозначения, наивный алгоритм
- Префикс – функция
- КМП
- Интерпретация с использованием конечного автомата
- Алгоритм Ахо-Корасик
- Бор, сжатый бор
- Построение бора по набору слов
- Интерпретация с использованием конечного автомата, суффиксные ссылки
- Ахо-Корасик
Лекция C. Структуры данных
- Битовые операции (кратко)
- Стеки (обзорно, на одномерном массиве)
- Очереди (обзорно, зацикленная очередь)
- Деки (зацикленные, с проверкой на отрицательные индексы)
- Кучи
- Динамически расширяемые массивы (реализация за N log N расширений)
- Списки. Сравнение производительности динамических структур.
- Хеш-таблицы и хеш-функции
- Механизм вызова функций и рекурсивные функции (использование стека)
23 марта, пятница
Лекция А. O полноте систем функций алгебры логики
- Способы задания функций алгебры логики
- Основные функции алгебры логики (дизъюнкция, конъюнкция, отрицание, сумма по модулю 2, медиана)
- Представление любой функции с помощью совершеной ДНФ и с помощью совершенной КНФ
- Представление функций полиномами Жегалкина
- Замкнутые классы и полные системы.
- Определение классов T 0, T 1, L, S, M
- Доказательство теоремы Поста о полноте системы функций алгебры логики
- Доказательство предполноты классов T 0, T 1, L, S, M.
Лекция B. Структуры данных
- Дерево Фенвика
- Определение, Построение без использования дополнительной памяти
- Обновление
- Запрос
- Примеры задач
- Многомерное дерево Фенвика
- Дерево отрезков
- Определение, примеры
- Реализация запроса и обновление снизу
- Реализация запроса и обновление сверху
- Реализация модификации на отрезке
- Задача поиска k-й порядковой статистики на отрезке
- Другие примеры задач
- Многомерное дерево отрезков
- *Двойчные деревья поиска. Декартовы деревья.
- Определение.
- Поиск элемента.
- Вставка, удаление.
Лекция С. Игры-1
- Комбинаторные игры. P-позиции, N-позиции.
- Subtraction games. (Dynamic subtraction.)
- Игра Ним. Ним в поддавки.
- Игры на графах. Функция Шпрага-Гранди. Сумма игр.
- Разбор задачи «Товарищеская игра».
- Разбор задачи «Нечестная игра».
- Задачи «Игра Ioiwari», «Игра Score», «Игра-2».
24 марта, суббота
Лекция А. Игры-2
- Немного повторения (игры на графах, функция Шпрага-Гранди)
- Введение в математическую теорию игр
- Aнтагонистические игры
- Общие факты
- Матричные игры
- Смешанное расширение игры
- Компьютерные методы решения
- Позиционные игры
- Существование решения
- То, о чем вы не слышали в прошлом году
Лекция B. Геометрия
- Введение
- Уравнения фигур (представление прямой, окружности, плоскости).
- Вектор. Скалярное, векторное произведение.
- Расположение точки относительно прямой и плоскости.
- Расстояния
- От точки до точки, прямой, отрезка, плоскости, окружности.
- Между отрезками в плоскости.
- Проверка на пересечение.
- Прямых, отрезков, окружностей.
- Окружности с прямой и отрезком.
- Отсечение выпуклого многоугольника полуплоскостью.
а. Простейший алгоритм нахождение областей Вороного (O(N3), каждая область за O(N2))
- Пересечение выпуклых многоугольников. (за O(N2) и за O(N))
- Численные методы.
- Бинарный поиск
- Окружность наибольшего радиуса, свободная от точек (O(N2log N))
- «Поворот 2-х векторов»
- Тернарный поиск
- Выпуклая функция (f(tx + (1-t)y) <= tf(x) + (1-t)f(y))
- Сумма выпуклых функций выпукла.
- Нахождение наименее удаленной от множества точек в n-мерном пространстве.
- Решение, не гарантирующее правильный результат.
Лекция С. Графы-1
- Понятие графа и основные определения.
- Обходы графов
- BFS
- DFS
25 марта, воскресенье
Лекция А. Линейное программирование
- Полиэдры – определения, свойства.
- Постановка задачи линейного программирования.
- Симплекс метод.
- Аналитическое обоснование.
- Табличная реализация.
- Двойственность в линейном программировании.
- Содержательные примеры.
Лекция B. Перебор
- Классы P и NP.
- Метод ветвей и границ.
- Альфа-бета отсечения
- Примеры задач и их возможных решений.
Лекция С. Сортировки
- Сортировка пузырьком
- Сортировка слиянием (MergeSort)
- Пирамидальная сортировка (HeapSort)
- Быстрая сортировка (QuickSort)
- Сортировка подсчетом
- Поразрядная сортировка
- Сравнение производительности сортировок
- Методы оптимизации сортировок
- Примеры задач, использующих сортировку
27 марта, вторник
Лекция АB. Комбинаторная геометрия
- Построение выпуклой оболочки.
- 3 алгоритма построения (кратко)
- Сравнение эффективности и применимости этих алгоритмов
- Нижняя оценка сложности
- Объединение выпуклых оболочек
- Добавление точки в выпуклую оболочку
- Удаление точки из выпуклой оболочки (основные идеи)
- Построение диаметра множества точек
- Задача о картинной галерее
- Триангуляция и оценка n/2
- Оценка n/3
- Оптимальность алгоритма в худшем случае
- Двойственный граф
- Раскраска в 3 цвета (DFS)
- Y-монотонность
- Построение триангуляции в общем случае
- Разбор олимпиадных задач
Лекция С. Поиск кратчайших путей в графе
- Алгоритм Дейкстры
- Алгоритм Флойда
28 марта, среда
Лекция АB. Грамматики
- Нотация BNF (язык описания грамматик).
- Задача про сложные скобочки и два её решения
- решение, основанное на стеке
- решение, основанное на правилах вывода
- Синтаксическое дерево разбора
- Задача про расчет сопротивления схемы.
Отображение правил в программный код, осуществляющий синтаксический разбор.
- Задача про обобщённый калькулятор.
Приоритет операторов и тип ассоциативности операторов.
Линейный алгоритм построение синтаксического дерева разбора.
6*. Система Bison.
Лекция С. Динамическое программирование
- Основные определения и принципы
- Стандартные задачи динамического программирования
а. Наибольшая общая подпоследовательность
б. Наибольшая возрастающая подпоследовательность
в. Задача об оптимальной расстановке скобок
г. Оптимальная триангуляция выпуклого многоугольника
- Разбор олимпиадных задач
29 марта, четверг
Лекция А. Подграф наибольшей плотности
Обозначения, теорема о наибольшем потоке и наименьшем разрезе
- Конструкция сети, алгоритм нахождения подграфа наибольшей плотности
- Обобщение: взвешенные ребра
- Обобщение: взвешенные ребра и вершины, различные подходы к определению плотности.
Лекция B. Динамическое программирование по профилю
- Задача о замощении домино
- Профили, базовая линия
- Рекуррентное соотношение для задачи о замощении
- Решение задачи о замощении с использованием ДП по профилю
- Связь ДП по профилю и линейной алгебры
- Рекуррентное соотношение в ДП по профилю как умножение матрицы на вектор
- Быстрое возведение в степень
- Использование быстрого возведения матрицы в степень для существенно несимметричных задач
- Задача о симпатичных узорах
- Задача о расстановке королей
- Постановка задачи
- Эффективная нумерация профилей
- Задача о расстановке коней
- Постановка задачи
- Эффективное хранение разреженных матриц
- Графовая интерпретация ДП по профилю
- Быстрое ДП по профилю
- Изломанный профиль
- Правила перехода в быстром ДП по профилю для задачи о замощении домино
Лекция C. Секретная геометрия, или простые способы решения геометрических задач
- Выбор структур данных
- Секретный смысл основных геометрических формул
- Top secret, или чего не знают даже студенты
30 марта, пятница
лекция A. Суффиксные автоматы (М.Бабенко)
- Строки, префиксы, суффиксы, факторы
- Боры строк
- Несжатые суффиксные деревья, оценки размера, алгоритм построения
- Два подхода к уменьшению размера: сжатие и склейка эквивалентных состояний
- Суффиксные ссылки на сжатом и несжатом суффиксном дереве
- Алгоритм построения сжатого суффиксного дерева за линейное время
- Правые контексты, отношение эквивалентности на факторах
- Суффиксная функция на факторах и классах эквивалентности
- Эволюция отношения эквивалентности
- Оценки размера суффиксного автомата
- Суффиксные ссылки и суффиксные пути
- Алгоритм построения суффиксного автомата за линейное время
лекция B: «Потоки» (В.Гольдштейн)
лекция C. Комбинаторика (М.Трухина)
- Основные определения и правила.
- Перестановки.
- Генерация объектов
- k-элементные подмножества
- размещения с повторениями
- перестановки