Алгоритмы и структуры данных 2018/2019 (пилотный поток)

Материал из Wiki - Факультет компьютерных наук
Перейти к: навигация, поиск

Лектор: Глеб Олегович Евстропов

Программа курса

Текущая успеваемость

Формула выставления итоговой оценки

0.3 * Контесты + 0.25 * Листки + 0.15 * Контрольные + 0.3 * Экзамен + Бонус

  • Короткие контесты будут проводиться в разнообразных форматах во время сдвоенных семинаров. Если не оговорено иное, то короткий контест является личным соревнованием, состоящим из 5 задач разной сложности, требующим владеть общей сообразительностью, некоторой математической подготовкой, и, возможно, различными уже изученными алгоритмами. На коротких контестах отсутствует проверка кода, если не оговорено иное, то задачи можно дорешивать вплоть до окончания текущего отчётного периода (то есть почти до экзамена), получая за каждую сданную задачу 0.5 балла вместо 1 балла (за сдачу во время контеста).
  • Длинные контесты имеют продолжительность до двух недель, и состоят в основном из задач, требующих реализации алгоритмов, изученных на лекциях. Некоторые задачи являются обязательными и проходят дополнительную ручную проверку кода. Все задачи стоят 1 балл, но чтобы получить баллы за необязательные задачи, необходимо сначала сдать все обязательные.
  • Итоговая оценка за раздел "Контесты" определяется как 10 * (баллы за короткие контесты + баллы за длинные контесты) / (общее число задач - поправка). Поправка по умолчанию равна нулю, но если отлична от нуля, то равна примерно 1/10 от общего числа задач (то есть предполагается, что сдать все задачи вовремя крайне трудно) и может быть увеличена индивидуально для каждого студента при наличии пропусков по уважительным причинам.
  • Листки являются теоретическими домашними заданиями. Все задачи стоят одинаково, сдавать их можно как во время семинара, когда листок был выдан, так и во время присутственных часов. Дополнительно предусматривается возможность сдать задания в электронном виде в хорошей вёрстке. Формула оценки за данный раздел аналогична предыдущей: 10 * (кол-во решенных задач) / (общее число задач - поправка). Кроме того, кол-во баллов, полученных за сдачу задач в электронном виде по почте (суммарно за весь модуль) должно не более чем в два раза превышать кол-во баллов, полученных за сдачу устно. Формально, если вы получили x баллов за устную сдачу и y баллов за сдачу по почте, то ваше суммарное кол-во баллов равняется x + min(2x, y).
  • В течение первого отчётного периода предполагается две контрольные работы (по одной в каждом модуле). За каждую контрольную студент получает оценку от 0 до 10, итоговая оценка за данный раздел ставится как среднее арифметическое этих двух, или определяется по одной оценке, если вторую контрольную студент пропустил по уважительной причине. Если студент пропускает по уважительной причине обе контрольные работы, то для него изменяется итоговая формула оценки.
  • За экзамен студент получает оценку от 0 до 10.
  • Бонус. Эта графа определяет произвольные баллы, которые могут быть прибавлены к оценке студента за различные виды деятельности и соревнований. Например, в этой графе будут использованы некоторые короткие контесты с необычным форматом.
  • Итоговая оценка округляется арифметически (то есть при дробной части меньше 0.5 округление производится вниз, иначе вверх).

Лекции

Дата лекции Темы
30 октября Знакомство со структурой курса и системой выставления оценок.
Введение в теорию вероятностей, конечные вероятностные пространства, события, независимость событий, условная вероятность
31 октября Продолжение введения в теорию вероятностей, понятие математического ожидания и его базовые свойства
6 ноября RAM-модель, схемы доказательства корректности алгоритмов и времени их работы
13 ноября Сортировки сравнениями, подсчётом и поразрядная
14 ноября Корзинная сортировка и сортировка во внешней памяти
20 ноября Простые структуры данных, двоичные кучи
27 ноября Амортизационный анализ, k-ичные кучи
28 ноября Биномиальные и фибоначчиевы кучи
4 декабря Введение в хеширование, свойства хеш-функций, парадокс дней рождений и полиномиальный хеш
11 декабря Хеш-таблицы, методы сканирования при использовании открытой адресации, идеальное хеширование
12 декабря Фильтры блума, стратегии масштабирования таблиц, деамортизация
18 декабря Бинарные деревья поиска. Сбалансированные деревья. Декартово дерево.
10 января 2-3 деревья и B-деревья.
15 января Частичные суммы, разреженные таблицы, деревья отрезков. Метод сканирующей прямой.
22 января Задачи LCA и LA. Сведение LCA к RMQ и наоборот. Метод четырёх русских.
24 января Персистентность и персистентные структуры данных.
29 января Перебор комбинаторных объектов. Динамическое программирование. Генерация комбинаторных объектов.
5 февраля Динамическое программирование по подотрезкам, поддеревьям, подмаскам. Meet-in-the-middle.
7 февраля Ускорение вычислений с помощью битовых операций. Эффективное использование памяти в задачах динамического программирования.
12 февраля Перебор в задаче вершинного покрытия и в антагонистических играх (в том числе альфа-бета)
19 февраля Минимальные остовные деревья: алгоритмы поиска и критерии оптимальности
21 февраля СНМ, обход в глубину, поиск мостов и точек сочленения
26 февраля Поиск компонент реберной и вершинной двусвязности, сильной связности
5 марта Кратчайшие пути в графах: алгоритмы Форда-Беллмана, Флойда-Уоршелла и Дейкстры
7 марта Паросочетания, лемма Холла, алгоритм Куна и теорема Кёнига
19 марта Введение в теорию потоков, теорема Форда-Фалкерсона
21 марта Эйлеров цикл и list ranking
2 апреля Полиномиальные алгоритмы решения задачи о максимальном потоке. Алгоритм Эдмондса-Карпа, техника масштабирования, алгоритм Диница.
4 апреля Стоимостной поток. Определения и жадный алгоритм. Алгоритм Дейкстры с потенциалами Джонсона.
9 апреля Вычислительная геометрия. Основные примитивы (точка, прямая, окружность) и базовые операции работы с ними.
16 апреля Проверка принадлежности точки невыпуклому многоугольнику. Алгоритм Грэхема построения выпуклой оболочки. Некоторые алгоритмы быстрой геометрии.
18 апреля Задача поиска двух ближайших точек. Задача поиска двух наиболее удалённых точек. Пересечение полуплоскостей.
23 апреля Алгоритм Чана
30 апреля Построение трехмерной выпуклой оболочки за O(n^2)
14 мая Быстрое преобразование Фурье
21 мая Продвинутые алгоритмы ТЧ, алгоритм Полларда, алгоритм Миллера-Рабина
23 мая Введение в криптографию, шифрование RSA
28 мая Строковые алгоритмы, обзор задач, префикс-функция и z-функция
4 июня Бор и сжатый бор, алгоритм Ахо-Корасик
6 июня Cуффиксный массив и связанные задачи
11 июня Cуффиксное дерево, алгоритм Укконена
3 сентября Эвристические методы оптимизации, отжиг и генетические алгоритмы.
6 сентября Эвристические методы оптимизации, метод Монте-Карло
10 сентября Языки и автоматы
17 сентября Алгоритм Хопкрофта минимизации ДКА
20 сентября Классы P, NP, NP-hard, NP-complete, теорема Кука-Левина
24 сентября Классы BPP, ZPP, RP. Введение в приближённые и вероятностные алгоритмы: 0.5-приближение для MAXCUT, MAXSAT; 2-приближения для минимального вершинного покрытия, 2-приближение для коммивояжёра, 1.5-приближение для коммивояжёра
1 октября ln(n)-приближение задачи SETCOVER, поиск глобального минимального разреза алгоритмом Каргера и алгоритмом Каргера-Штайна
4 октября Формулировка задачи ЛП и приближения с помощью ЛП. Приближение k-SETCOVER и (e - 1)/e приближение MAXSAT.
8 октября Приближения с ЛП, доказательство 3/4-приближение MAXSAT, стриминг, задача о тяжёлых элементах и k-min.
15 октября Hyper-Log, Hyper-LogLog, count-min sketch и count-sketch.

Семинары

Дата семинара Темы Листок
30 октября Понятие асимптотического времени работы алгоритма
Сильно, слабо и псевдополиномиальное время работы. Обозначения O, o, Ω, ω
тык
31 октября Совместное решение задач по теории вероятностей тыц
6 ноября Совместное решение задач на матожидание туц
13 ноября Обсуждение методов тестирования не было
14 ноября Совместное решение задач на сортировки и порядковые статистики тыц
20 ноября Сортировки и порядковые статистики наносят ответный удар туц
27 ноября Разбор домашнего листка по теории вероятностей тык
28 ноября Совместное решение задач на простые структуры данных тыц
4 декабря Подготовка к контрольной и совместное решение задач туц
11 декабря Разбор контрольной, второго листка и длинного контеста не было
12 декабря Разбор контрольной, второго листка и длинного контеста не было
18 декабря Хеши ¯\_(ツ)_/¯
10 января ¯\_(ツ)_/¯ ¯\_(ツ)_/¯
15 января Деревья поиска тык
22 января Запросы на отрезках тыц
24 января Splay-дерево туц
29 января Запросы на деревьях и персистентность тыц
5 февраля Разговоры про неасимптотические оптимизации Не было
7 февраля Разбор листка про деревья и запросы на отрезках не было
12 февраля Динамическое программирование тыц
19 февраля Динамическое программирование, перебор и meet-in-the-middle туц
21 февраля Динамическое программирование и остовные деревья тык
26 февраля Подготовка к контрольной тыц
5 марта Разбор листка про персистентность и запросы на деревьях не было
7 марта Графы тык
19 марта Двудольные графы тыц
21 марта Разбор листка про перебор и динамическое программирование не было
2 апреля Разбор листка про остовы, графы и СНМ не было
4 апреля Потоки и двудольные паросочетания тык
9 апреля Максимальные потоки и минимальные разрезы туц
16 апреля MapReduce тыц
18 апреля Геометрия тык
23 апреля Еще геометрия тыц
30 апреля Разбор листка про паросочетания и потоки не было
14 мая Алгоритм Карацубы и мастер-теорема туц
21 мая Базовая теория чисел тык
23 мая Быстрое преобразование Фурье тыц
28 мая Разбор листка про геометрию не было
4 июня Немного строк вам в ленту тык
6 июня Эх, щука! (Ахо-Корасик) туц
11 июня Суффиксный массив и суффиксное дерево тык
3 сентября Вспомнить все тыц
6 сентября Эвристики и базовые численные методы тык
10 сентября Языки и автоматы туц
17 сентября Еще автоматы тык
20 сентября Машина Тьюринга, классы задач тыц
24 сентября Упражняемся в доказательстве NP-полноты тык
1 октября Приближенные алгоритмы тыц
4 октября Разные задачи туц
8 октября Разбор первого (в этом году) листка не было
15 октября Напутствия по дизайну и архитектуре не было

Листки

Устно листки сдаются преподавателям и ассистентам в присутственные часы.

Листки в электронном виде отправляются на почту hse.algo@gmail.com. Принимается только TeX — нельзя отправлять фотографии записей от руки (за исключением случая, когда к теху вы прикрепляете пояснительную картинку от руки); решения, написанные в MS Word и подобных программах и т.д. Решения отправляются ровно один раз — нельзя отправить что-то, а потом через неделю прислать исправленную версию (небольшие исправления и уточнения разрешаются, если сделаны в течение нескольких часов после отправки листка и строго до дедлайна).

Дедлайн Темы Листок
полночь с 20 на 21 ноября Вероятности и математическое ожидание тык
полночь с 5 на 6 декабря Сортировки и простые структуры данных тыц
полночь с 17 на 18 декабря Кучи, хеши и амортизационный анализ туц
полночь с 6 на 7 февраля Деревья и запросы на отрезках тык
полночь с 27 на 28 февраля Персистентность, запросы на деревьях и прочее тыц
полночь с 13 на 14 марта Динамическое программирование, перебор и meet-in-the-middle тык
полночь с 27 на 28 марта Остовы, графы и СНМ тыц
полночь с 29 на 30 апреля Потоки и паросочетания туц
полночь с 27 на 28 мая Геометрия тык
полночь с 10 на 11 июня Теория чисел и БПФ тыц
полночь с 25 на 26 июня Строки тык
полночь с 7 на 8 октября Разное тыц
полночь с 17 на 18 октября Относительно простые задачи туц

Правки по последнему листку:

2) Кратные ребра запрещены.

9б) В рамках этой задачи можете считать комбинаторным алгоримом всё, что не обращается к задачам линейного программирования. Если жадный алгоритм не использует метод Гаусса или сведение к задаче линейного программирования, то он комбинаторный.

Короткие контесты

Если не оговорено иное, то задачи можно дорешивать вплоть до окончания текущего отчётного периода (то есть почти до экзамена), получая за каждую сданную задачу 0.5 балла вместо 1 балла (за сдачу во время контеста).

Дата Ссылка Дорешивать
7 ноября тык Можно
21 ноября тыц Можно
19 декабря туц Нельзя (бонусный)
17 января тыц Можно
31 января тык Можно
14 февраля ❤️ туц Нельзя (необычный)
14 марта тык Нельзя (бонусный)
11 апреля тыц Можно
25 апреля тыц Можно
16 мая туц Нельзя
13 июня тык Нельзя (бонусный)
13 сентября тыц Можно
11 октября тык Нельзя (бонусный)

Длинные контесты

Дедлайн Темы Ссылка
Полночь с 6 на 7 декабря Сортировки, порядковые статистики, простые структуры данных тык
Полночь с 17 на 18 декабря Хеширование и другие темы тыц
Полночь с 4 на 5 марта Структуры данных тык
Полночь с 28 на 29 марта Динамическое программирование и перебор тыц
Полночь с 2 на 3 июня Графы, геометрия тык
Полнчь с 26 на 27 июня Геометрия, теория чисел, БПФ, строки тыц
Полночь с 4 на 5 октября Неточная задача туц
Полночь с 18 на 19 октября Классы сложности, автоматы, приближённые алгоритмы, линейное программирование тык

Преподаватели и ассистенты

Преподаватель Подгруппа Присутственные часы
Глеб Евстропов 181-1
Станислав Артюхин 181-2
Дмитрий Иващенко 183-1
Иван Смирнов 183-2
Александр Курилкин Среда, с 12:10 до 13:30, ауд. 416
Глеб Третьяков Вторник, с 12:10 до 13:30, ауд. 300

Полезные материалы

Памятка по теорверу

Успеваемость во втором модуле

Успеваемость за третий модуль

Успеваемость за четвертый модуль