Алгоритмы и структуры данных 5SE 2018-2019 — различия между версиями
Материал из CSC Wiki
Smal (обсуждение | вклад) (→Первая версия программы) |
Smal (обсуждение | вклад) (→Первая версия программы) |
||
Строка 2: | Строка 2: | ||
Преподаватель: Смаль Александр Владимирович | Преподаватель: Смаль Александр Владимирович | ||
− | ===== | + | ===== Рабочая программа ===== |
* '''4 сентября.''' Введение. Алгоритм. Память и время как ресурсы. Вычисление чисел Фибоначчи: экспоненциальный рекурсивный алгоритм, полиномиальный алгоритм, более детальный анализ. 𝑃-символика как инструмент оценки ресурсов, различные асимптотики (логарифм, полином, экспонента). | * '''4 сентября.''' Введение. Алгоритм. Память и время как ресурсы. Вычисление чисел Фибоначчи: экспоненциальный рекурсивный алгоритм, полиномиальный алгоритм, более детальный анализ. 𝑃-символика как инструмент оценки ресурсов, различные асимптотики (логарифм, полином, экспонента). | ||
Строка 35: | Строка 35: | ||
* '''25 декабря.''' Декартово дерево. Декартово дерево: построение декартова дерева за линейное время (при предварительно отсортированных ключах), реализация операций вставки и удаления через split и merge. Дуча: верхняя оценка <math>O(\log n)</math> на мат. ожидание глубины. Использование неявного ключа, rope. | * '''25 декабря.''' Декартово дерево. Декартово дерево: построение декартова дерева за линейное время (при предварительно отсортированных ключах), реализация операций вставки и удаления через split и merge. Дуча: верхняя оценка <math>O(\log n)</math> на мат. ожидание глубины. Использование неявного ключа, rope. | ||
+ | |||
+ | == На весенний семестр == | ||
+ | * Задачи RMQ и LCA. Дерево отрезков, двоичный подъём. Динамическая задача RMQ/RSQ: оценка <math>O(\log n)</math> для запросов суммы/минимума и изменения элемента. Статический вариант задачи RMQ: полное предвычисление (<math>O(n^2)</math> на предобработку, <math>O(1)</math> на запрос), метод разреженной таблицы (<math>O(n \log n)</math> на предобработку, <math>O(1)</math> на запрос). Задача LCA: эйлеров обход дерева, сведение к задаче RMQ. Сведение задачи RMQ к задаче LCA через декартово дерево. | ||
=== Литература === | === Литература === |
Версия 11:13, 6 ноября 2018
Содержание
Лекции
Преподаватель: Смаль Александр Владимирович
Рабочая программа
- 4 сентября. Введение. Алгоритм. Память и время как ресурсы. Вычисление чисел Фибоначчи: экспоненциальный рекурсивный алгоритм, полиномиальный алгоритм, более детальный анализ. 𝑃-символика как инструмент оценки ресурсов, различные асимптотики (логарифм, полином, экспонента).
- 11 сентября. Элементарные структуры данных. Массивы переменного размера: аддитивная и мультипликативная схемы реаллокации. Односвязный список, двусвязный список. Абстрактные типы данных, интерфейс и реализация. Стек, очередь, дек; моделирование на основе массива. Моделирование очереди с помощью двух стеков. Анализ учётных стоимостей операций при помощи функция потенциала, истинные и учётные стоимости.
- 18 сентября. Рекуррентные соотношения. Метод ”разделяй и властвуй“. Умножение n-битовых чисел: простой рекурсивный алгоритм, улучшенный рекурсивный алгоритм. Рекуррентные соотношения: основная теорема. Двоичный поиск. Сортировка слиянием: с рекурсией и без. Нижняя оценка для сортировки сравнениями.
- 24 сентября 13:40. Алгоритмы сортировки. Квадратичные сортировки. Сортировка с помощью кучи: очередь с приоритетами, построение кучи за линейное время, частичная сортировка. Сортировка подсчётом, стабильность. Цифровая сортировка. Bucket sort для равномерно распределённых вещественных чисел.
- 25 сентября. Быстрая сортировка: понятие вероятностного алгоритма, время работы в среднем, анализ средней глубины рекурсии, элиминация хвостовой рекурсии, IntroSort.
- 1 октября 13:40. Быстрая сортировка: анализ среднего времени работы, массивы с малым количеством различных элементов, QuickSort3. Порядковые статистики. Порядковые статистики, нахождение за линейное в среднем время. Медиана медиан.
- 2 октября. Динамическое программирование. Общие принципы динамического программирования. Кратчайшие пути в ациклических ориентированных графах. Наибольшая возрастающая подпоследовательность: подзадачи, порядок на подзадачах, граф подзадач, сравнение с рекурсивным алгоритмом; нахождение не только длины, но и самой подпоследовательности. Дискретная задача о рюкзаке.
- 30 октября. Динамическое программирование (продолжение). Умножение матриц. Независимые множества максимального веса в деревьях. Редакционное расстояние: граф на подзадачах, нахождение кратчайшего пути в данном графе; нахождение оптимального выравнивания с использованием линейной памяти.
- 6 ноября. Жадные алгоритмы. Задача о выборе заявок. Коды Хаффмена. Хорновские формулы. Задача о покрытии множествами. Минимальное покрывающее дерево: свойство разреза, жадная стратегия, алгоритм Прима, алгоритм Краскала.
- 13 ноября. Жадные алгоритмы. Задача о выборе заявок. Коды Хаффмена. Хорновские формулы. Задача о покрытии множествами. Минимальное покрывающее дерево: свойство разреза, жадная стратегия, алгоритм Прима, алгоритм Краскала.
- 20 ноября. Система непересекающихся множеств. Представление множеств с помощью деревьев, эвристика сжатия путей, верхняя оценка на время работы m операций. Анализ учётных стоимостей операций: метод ростовщика.
- 27 ноября Способы хранения графов: матрица смежности, списки смежности, матрица инцидентности. Поиск в глубину. Графы и способы их представления, способы использования графов. Поиск в глубину в неориентированных графах, выделение компонент связности. Поиск в глубину в ориентированных графах: ориентированные ациклические графы, топологическая сортировка вершин, наличие стока и истока в ациклическом графе, выделение компонент сильной связности. Мосты и точки сочленения (на практике).
- 4 декабря. Кратчайшие пути в графах. Нахождение кратчайших путей из одной вершины в невзвешенных графах, поиск в ширину. Нахождение кратчайших путей из одной вершины в графах с положительными весами, алгоритм Дейкстры, оценка времени работы при различных реализациях очереди с приоритетами (массивом, двоичной кучей, d-ичной кучей). Нахождение кратчайших путей из одной вершины в графах, в которых есть рёбра отрицательного веса, алгоритм Беллмана-Форда, проверка наличия цикла отрицательного веса. Кратчайшие пути в ациклических ориентированных графах. Кратчайшие пути между всеми парами вершин: алгоритм Флойда-Уоршолла, алгоритм Джонсона.
- 11 декабря. Деревья поиска. Корневое дерево: бинарное дерево, дерево с произвольным ветвлением, представление ”левый ребёнок — правый сосед“. Дерево поиска: поиск, вставка, удаление, поиск следующего и предыдущего элемента за время, пропорциональное высоте. АВЛ-дерево: верхняя оценка на высоту, сохранение свойства при помощи малых и больших вращений.
- 18 декабря. Splay-дерево. Splay-дерево: дерево, которое остаётся сбалансированным в среднем и при этом не хранит никакой дополнительной информации в вершинах; реализация основных операций через операцию splay; верхняя оценка на среднюю стоимость операций.
- 25 декабря. Декартово дерево. Декартово дерево: построение декартова дерева за линейное время (при предварительно отсортированных ключах), реализация операций вставки и удаления через split и merge. Дуча: верхняя оценка на мат. ожидание глубины. Использование неявного ключа, rope.
На весенний семестр
- Задачи RMQ и LCA. Дерево отрезков, двоичный подъём. Динамическая задача RMQ/RSQ: оценка для запросов суммы/минимума и изменения элемента. Статический вариант задачи RMQ: полное предвычисление ( на предобработку, на запрос), метод разреженной таблицы ( на предобработку, на запрос). Задача LCA: эйлеров обход дерева, сведение к задаче RMQ. Сведение задачи RMQ к задаче LCA через декартово дерево.
Литература
- Дасгупта С., Пападимитриу Х., Вазирани У. Алгоритмы.
- Т.Кормен, Ч.Лейзерсон, Р.Ривест, К.Штайн - Алгоритмы. Построение и анализ.
- А. Шень. Программирование: теоремы и задачи.
- М. А. Бабенко, М. В. Левин. Введение в теорию алгоритмов и структур данных.
Онлайн-курсы
Практика
Мишунин
Контакты: alexander.mishunin[at]gmail.com
Дедлайны по теоретическому ДЗ: до начала занятия для правок уже присланых ранее задач, и до начала суток, в которые будет занятие, для новых задач.
Слабодкин
Контакты: slabodkin.m[at]gmail.com
Смаль
Контакты: avsmal[at]gmail.com