Київський національний університет імені Тараса Шевченка

Реклама
Алгоритмы и структуры данных поиска, часть 1
Лекция 1. Введение в курс алгоритмов. Математический калейдоскоп.
Ресурсы программы: память и время. Сложность алгоритмов. Типы данных. Формат ввода
– вывода. Множественный ввод-вывод данных (multiple input). Массивы. Структуры. Классы.
Математические функции. Процедуры и функции. Рекурсивные функции. Написание
итеративных и рекурсивных программ.
Лекция 2. Оценка сложности алгоритмов. Рекурсивные программы.
Рост функций. Асимптотические обозначения. Основная теорема о рекуррентных оценках.
Решение рекуррентностей. Написание рекурсивных программ и оценка сложности их
выполнения по времени и памяти. Коды Грея. Задача Иосифа. Представление бинарных
деревьев и деревьев с произвольным ветвлением (представление «левый ребёнок – правый
сосед»).
Лекция 3. Элементарные структуры данных
Интерфейс и реализация динамического массива (аддитивная и мультипликативная схемы
реаллокации), стека, очереди, деки. Моделирование очереди с помощью двух стеков. Бинарные
деревья: вставка, удаление и поиск вершин. Порядки обхода деревьев. Понятие о
персистентности структур данных. Реализация персистентного стека. Множества и
мультимножества. Задача Range Minimum Query (RMQ).
Лекция 4. НОД, НОК
Наибольший общий делитель. Наименьшее общее кратное. Расширенный алгоритм
Евклида. Диофантовы уравнения. Понятие группы. Полная система вычетов. Сведенная
система вычетов. Модулярная арифметика. Вычисление обратного элемента. Линейные
сравнения. Китайская теорема про остатки.
Лекция 5. Комбинаторные алгоритмы
Правило умножения. Перестановки. Генерация перестановок в лексикографическом
порядке. Сочетания. Сочетания с повторениями. Биномиальный коэффициент. Размещения.
Бином Ньютона. Полиномиальная теорема. Связь перестановок с сочетаниями. Таблица
инверсий. Формула включений-исключений. Задача о беспорядках. Явное выражение функции
Эйлера. Тождество минимумов и максимумов. Задача о разрезании плоскости прямыми,
окружностями, эллипсами и треугольниками.
Лекция 6. Сортировка и поиск
Задача сортировки набора ключей. Стабильные и нестабильные сортировки. Сортировки
пузырьком, вставкой, выбором. Сортировки с линейным временем: сортировка подсчетом.
Слияние двух упорядоченных списков. Понятие о методе «разделяй и властвуй». Сортировка
слиянием (merge sort). Структура данных Куча. Очередь с приоритетами. Пирамидальная
сортировка. Быстрая сортировка. Выбор опорного элемента. Алгоритмы поиска. Порядковые
статистики. Нахождение k-ой статистики. Подсчет инверсий в последовательности за O(nlogn).
Бинарный и тернарный поиск.
Лекция 7. Геометрия
Базовые понятия. Скалярное и векторное произведение. Правый и левый поворот.
Площадь многоугольника: формула трапеций. Центр тяжести. Вычисление полярного угла.
Сортировка точек по полярному углу. Построение выпуклой оболочки. Метод сканирующей
прямой. Задача о пересечении отрезков. Принадлежность точки многоугольнику. Задача о
пересечении треугольников. Поворот на плоскости. Теорема Пика.
Лекция 8. Теория чисел
Простые и составные числа. Тесты на простоту. Разложение на множители. Решето
Эратосфена. Первая и вторая теоремы о вычетах линейной формы. Функция Эйлера. Теоремы
Эйлера и Ферма. Генератор группы. Вычисление дискретного логарифма. Схема шифрования
RSA. Атаки на RSA.
Лекция 9. Дерево отрезков
Структура дерева отрезков. Построение. Запрос суммы. Единичная модификация.
Проталкивание. Запаздывающее обновление. Канонические отрезки, декомпозция
произвольного отрезка на логарифмическое количество канонических. Групповая
модификация. Реализация на указателях и с помощью массива. Поиск подотрезка с
максимальной суммой. Дерево Фенвика.
Лекция 10. Декартово Дерево
Единственность декартова дерева для заданного набора различных ключей и приоритетов.
Декартово дерево по явному и неявному ключу. Слияние двух деревьев: операция Merge.
Разрезание дерева: операция Split. Вставка и удаление вершины.
Лекция 11. Динамическое программирование (начало)
Нисходящее и восходящее динамическое программирование. Разбиение задачи на
подзадачи. Задача о загрузке судна. Задача про монеты. Задача про черепашку. Задача
умножения матриц. Оптимальное бинарное дерево поиска.
Лекция 12. Динамическое программирование (окончание)
Наибольшая
общая
подпоследовательность.
Наибольшая
возрастающая
подпоследовательность. Динамическое программирование на подмножествах. Задача
коммивояжера.
Лекция 13. Специальные числа. Жадные алгоритмы
Числа Фибоначчи, Каталана, Стирлинга первого и второго рода, Бела. Производящие
функции. Жадные алгоритмы.
Лекция 14. Теория вероятности
Формула полной вероятности. Условная вероятность. Формула Байеса. Распределение
Бернулли, Пуассона, гипергеометрическое.
Алгоритмы и структуры данных поиска, часть 2
Лекция 1. Поиск в глубину.
Графы: основные определения и способы хранения. Поиск в глубину и его основные
свойства. Рекурсивная и нерекурсивная реализация. Метки времени начала и конца обработки
вершин. Дерево обхода в глубину. Классификация ребер графа (ребра дерева, обратные,
прямые, перекрестные). Поиск циклов в неориентированных и ориентированных графах.
Фундаментальное множество циклов.
Лекция 2. Поиск в ширину.
Топологическая сортировка. Обход в ширину и его использование для нахождения
кратчайших путей. Классификация ребер при обходе в ширину. Релаксация ребер. Алгоритм
Дейкстры.
Лекция 3. Поиск кратчайших путей на графе.
Реализация алгоритма Дейкстры на разных структурах данных (множество, очередь с
приоритетами, куча). Поиск всех кратчайших путей. Алгоритм Флойда-Уоршела. Подсчет
количества путей. Транзитивное замыкание графа.
Лекция 4. Сильная связность графа.
Сильная связность. Поиск сильно связных компонент графа. Конденсация графа. Задача 2Выполнимости (2-SAT)
Лекция 5. Точки сочленения. Мосты. Двусвязные компоненты.
Точки сочленения. Мосты. Двусвязные компоненты.
Лекция 6. Циклы.
Эйлеров цикл. Гамильтонов цикл. Циклы отрицательного веса. Алгоритм Беллмана –
Форда. Алгоритм Дейкстры с потенциалами. Алгоритм Джонсона.
Лекция 7. Потоки и паросочетания.
Алгоритм Эдмондса – Карпа. Поиск максимального потока при помощи поиска в ширину.
Поиск максимального паросочетания. Алгоритм чередующейся цепи.
Лекция 8. Задача поиска подстроки в строке (начало).
Строки: основные определения и обозначения. Алфавит. Задача поиска подстроки в
строке: различные варианты постановки. Наивный алгоритм. Префикс-функция: определение и
свойства. Построение префикс-функции за линейное время. Автомат по распознаванию
шаблона в тексте. Алгоритм Кнута-Морриса-Пратта.
Лекция 9. Задача поиска подстроки в строке (окончание).
Z-функция: определение и использование в задаче поиска подстроки. Построение Zфункции за линейное время. Оптимизация поиска подстрок с помощью Z-функции по памяти.
Shif-and алгоритм. Хеширование на строках.
Лекция 10. Бор. Суффиксные деревья
Бор для набора слов: определение и способы представления. Простейшие алгоритмы на
боре: построение бора и поиск слова в боре. Суффиксные ссылки. Алгоритм Ахо-Корасик для
множественного поиска подстрок. Суффиксные деревья и массивы.
Лекция 11. Система непересекающихся множеств. Связность.
Система непересекающихся множеств: эвристики по рангу и сжатие пути. Связность
графа.
Лекция 12. Минимальный остов.
Минимальное остовное дерева: алгоритмы Крускала и Прима. Матрица Кирхгофа. Второй
минимальный остов.
Скачать