Алгоритмы и структуры данных 1 основной поток 2019/202 — различия между версиями
Gpogudin (обсуждение | вклад) (week8) |
.obj (обсуждение | вклад) (→Экзамен) |
||
(не показано 86 промежуточных версии 2 участников) | |||
Строка 4: | Строка 4: | ||
==Лекции== | ==Лекции== | ||
Вторник 10:30 – 11:50, ауд. R404 | Вторник 10:30 – 11:50, ауд. R404 | ||
+ | |||
Четверг 15:10 – 16:30, ауд. R404 | Четверг 15:10 – 16:30, ауд. R404 | ||
Строка 35: | Строка 36: | ||
14. '''12 декабря.''' Алгоритмы поиска кратчайших путей: Floyd-Warshall & Bellman-Ford. [https://www.dropbox.com/s/0mo0cte0llvgdel/lecture14.ipynb?dl=0 Jupyter] [https://www.dropbox.com/s/l99tgs6r77ln146/lecture14.html?dl=0 Jupyter html] | 14. '''12 декабря.''' Алгоритмы поиска кратчайших путей: Floyd-Warshall & Bellman-Ford. [https://www.dropbox.com/s/0mo0cte0llvgdel/lecture14.ipynb?dl=0 Jupyter] [https://www.dropbox.com/s/l99tgs6r77ln146/lecture14.html?dl=0 Jupyter html] | ||
− | 15. '''16 декабря.''' Внимание: лекция будет именно 16 декабря, в понедельник в 16:40-18:00 в ауд. R401 | + | 15. '''16 декабря.''' Внимание: лекция будет именно 16 декабря, в понедельник в 16:40-18:00 в ауд. R401. Разделяй и властвую: умножение многочленов и быстрое преобразование Фурье [https://www.dropbox.com/s/5sgzooyx0dev5ez/lecture15.ipynb?dl=0 Jupyter (до лекции)] |
+ | |||
+ | 16. '''19 декабря.''' Повторение перед экзаменом, разбор нескольких задач [https://www.dropbox.com/s/wzbv8pty66mffun/lecture16.ipynb?dl=0 Jupyter (до лекции)] | ||
+ | |||
+ | [https://official.contest.yandex.ru/contest/16430/enter/ Пробный экзамен] | ||
==Домашние задания== | ==Домашние задания== | ||
Строка 45: | Строка 50: | ||
# [https://official.contest.yandex.ru/contest/16023/enter/ Домашнее задание 5 (контест)]. Дедлайн - 8 декабря. Дедлайн со штрафом 50% - 13 декабря. | # [https://official.contest.yandex.ru/contest/16023/enter/ Домашнее задание 5 (контест)]. Дедлайн - 8 декабря. Дедлайн со штрафом 50% - 13 декабря. | ||
# [https://official.contest.yandex.ru/contest/16184/enter/ Домашнее задание 6 (контест)]. Дедлайн - 15 декабря. Дедлайн со штрафом 50% - 20 декабря. | # [https://official.contest.yandex.ru/contest/16184/enter/ Домашнее задание 6 (контест)]. Дедлайн - 15 декабря. Дедлайн со штрафом 50% - 20 декабря. | ||
− | # [https://official.contest.yandex.ru/contest/16285/enter/ Домашнее задание 7 (контест)]. Дедлайн - | + | # [https://official.contest.yandex.ru/contest/16285/enter/ Домашнее задание 7 (контест)]. Дедлайн - 22 декабря. |
==Семинары== | ==Семинары== | ||
Строка 58: | Строка 63: | ||
# [https://www.dropbox.com/s/z75eljucodlka80/week8.pdf?dl=0 Неделя 8] | # [https://www.dropbox.com/s/z75eljucodlka80/week8.pdf?dl=0 Неделя 8] | ||
− | ==Литература== | + | =Четвертый модуль= |
+ | |||
+ | ==Лекции== | ||
+ | Понедельник 9:00 – 10:20 | ||
+ | |||
+ | Четверг 15:10 – 16:30 | ||
+ | |||
+ | # '''6 апреля.''' Структуры данных. Амортизационный анализ. [https://www.dropbox.com/s/2z9nqbfe3fa7py4/algo-1-amortised.pdf?dl=0 Слайды] | ||
+ | # '''9 апреля.''' Хеш-функции и хеш-таблицы. Разрешение коллизий при помощи цепочек. Открытая адресация. [https://www.dropbox.com/s/y5avavuw9sfn4o4/algo-2-hashtable.pdf?dl=0 Слайды] | ||
+ | # '''13 апреля.''' Методы задания хеш-функций. Универсальное хеширование. [https://www.dropbox.com/s/fesr83hbbagfbny/algo-3-hashing.pdf?dl=0 Слайды] | ||
+ | # '''16 апреля.''' Двоичные деревья поиска. [https://www.dropbox.com/s/quvn6w5lo0auq0h/algo-4-bst.pdf?dl=0 Слайды] | ||
+ | # '''20 апреля.''' Краcно-черные деревья. [https://www.dropbox.com/s/8tchbyuxyfz4v4h/algo-5-rbt.pdf?dl=0 Слайды]. Заметки: [https://www.dropbox.com/s/9998rby5cethpvk/algo-5-rbt1.mp4?dl=0 1], [https://www.dropbox.com/s/2xcw58aqzccoxw2/algo-5-rbt2.mp4?dl=0 2], [https://www.dropbox.com/s/6g764ca80zba3mc/algo-5-rbt3.mp4?dl=0 3], [https://www.dropbox.com/s/0ps0c3fxyj6xiij/algo-5-rbt4.mp4?dl=0 4] | ||
+ | # '''23 апреля.''' Жадные алгоритмы. [https://www.dropbox.com/s/4l0h1zgbao5p0pu/algo-6-greedy.pdf?dl=0 Слайды.] [https://www.dropbox.com/s/yj9sk047zlg8eie/algo-6-greedy.mp4?dl=0 Иллюстрация к последнему доказательству.] | ||
+ | # '''27 апреля.''' Алгоритм Дейкстры. [https://www.dropbox.com/s/eadtl5tb2fta2hm/algo-7-dijkstra.pdf?dl=0 Слайды] | ||
+ | # '''30 апреля.''' Двоичная куча. [https://www.dropbox.com/s/nepng6m4rhzpsig/algo-8-heap.pdf?dl=0 Слайды] | ||
+ | # '''7 мая.''' Биномиальная куча. [https://www.dropbox.com/s/ny9ulkdu0kjagth/algo-9-binomial.pdf?dl=0 Слайды] | ||
+ | # '''14 мая.''' Контрольная работа ([https://official.contest.yandex.ru/contest/18361/enter/ контест]) по темам 1 – 6. Оценка: одна решенная задача — 3 балла, две — 7 баллов, три — 10 баллов. [https://official.contest.yandex.ru/contest/18294/enter/ Пробный вариант.] | ||
+ | # '''18 мая.''' Минимальные остовные деревья. [https://www.dropbox.com/s/4188n2wklg5jfbp/algo-11-mst.pdf?dl=0 Слайды] | ||
+ | # '''21 мая.''' Система непересекающихся множеств. [https://www.dropbox.com/s/x2lo9zv6r78ahhq/algo-12-union-find.pdf?dl=0 Слайды] | ||
+ | # '''24 мая.''' Жадный алгоритм на матроиде. [https://www.dropbox.com/s/jz5kzlkgov4g94q/algo-13-matroid.pdf?dl=0 Слайды] | ||
+ | # '''28 мая.''' Конечные автоматы. [https://www.dropbox.com/s/fh9dnw3pskig8q1/algo-14-dfa.pdf?dl=0 Слайды] | ||
+ | # '''1 июня.''' Недетерминированные конечные автоматы. [https://www.dropbox.com/s/64dwetrukdw5g3r/algo-15-nfa.pdf?dl=0 Слайды] | ||
+ | # '''4 июня.''' Регулярные выражения и нерегулярные языки. [https://www.dropbox.com/s/q5ha0d6z7yv3wba/algo-16-re.pdf?dl=0 Слайды] | ||
+ | # '''8 июня.''' Повторение перед экзаменом, разбор нескольких [https://www.dropbox.com/s/6kgvmuyrouya4l2/algo-exam-2019.pdf?dl=0 задач]. [https://www.dropbox.com/s/f9zv09ykebfatid/algo-17-ex.pdf?dl=0 Слайды] | ||
+ | |||
+ | ==Домашние задания== | ||
+ | |||
+ | # [https://www.dropbox.com/s/zhhuvto5wg33yv4/algo-hw-1.pdf?dl=0 Домашнее задание 1]. Дедлайн — 16 апреля. | ||
+ | # [https://official.contest.yandex.ru/contest/17597/enter/ Домашнее задание 2 (контест)]. Дедлайн — '''26 апреля, 18:05'''. Штрафы, которые назначаются в системе за количество попыток, не учитываются при выставлении оценки. Дедлайн со штрафом 50% — 2 мая. [https://www.dropbox.com/s/kxwcvjvof2sbw0o/test.cpp?dl=0 Внутренние тесты] для первых двух задач. | ||
+ | # [https://www.dropbox.com/s/ktf1nsl1m4ohxgd/algo-hw-3.pdf?dl=0 Домашнее задание 3]. Дедлайн — 3 мая, 18:00. Дедлайн со штрафом 50% — 10 мая. | ||
+ | # [https://official.contest.yandex.ru/contest/18237/enter/ Домашнее задание 4 (контест)]. Дедлайн — 14 мая. Для алгоритмов в задачах задач B и C нужно дополнительно доказать корректность и оценить сложность (и прислать доказательства преподавателю своей группы). | ||
+ | # [https://official.contest.yandex.ru/contest/18267/enter/ Домашнее задание 5 (контест)]. Дедлайн — 21 мая. | ||
+ | # [https://official.contest.yandex.ru/contest/18474/enter/ Домашнее задание 6 (контест)]. Дедлайн — 28 мая. Дедлайн со штрафом 50% — 2 июня. | ||
+ | # [https://official.contest.yandex.ru/contest/18592/enter/ Домашнее задание 7 (контест)]. Дедлайн — 7 июня. Последние две задачи подразумевают знание материала лекции 4 июня. | ||
+ | |||
+ | ==Семинары== | ||
+ | # [https://www.dropbox.com/s/8s1m0znaey3p7w9/algo-ex-1-amortized.pdf?dl=0 Неделя 1] | ||
+ | # [https://www.dropbox.com/s/e16t37prqkm8jmq/algo-ex-2-hashing.pdf?dl=0 Неделя 2] | ||
+ | # [https://www.dropbox.com/s/mkii0uifl47ux6e/algo-ex-3-bst.pdf?dl=0 Неделя 3] | ||
+ | # [https://www.dropbox.com/s/mqflsui7mrzdpb0/algo-ex-4-greedy.pdf?dl=0 Неделя 4] | ||
+ | # [https://www.dropbox.com/s/0eeqy5v9x7tfadn/algo-ex-5-dijkstra.pdf?dl=0 Неделя 5] | ||
+ | # [https://www.dropbox.com/s/k3iv6f8pvvkjdk4/algo-ex-6-mst.pdf?dl=0 Неделя 6] | ||
+ | # [https://www.dropbox.com/s/tg6cjb9tl8bqwo6/algo-ex-7.pdf?dl=0 Неделя 7] | ||
+ | # [https://www.dropbox.com/s/y6pqgeck882x8it/algo-ex-8-automata.pdf?dl=0 Неделя 8] | ||
+ | # [https://www.dropbox.com/s/5v3qlvvve6zybpo/algo-ex-9-nonregular.pdf?dl=0 Неделя 9] | ||
+ | |||
+ | |||
+ | ==Учебные ассистенты== | ||
+ | * 192-2 [mailto:shiayupov@edu.hse.ru Шамиль Аюпов] | ||
+ | * 194-1 [mailto:aapershina_1@edu.hse.ru Першина Анна] | ||
+ | * 194-2 [mailto:kpmatveev@edu.hse.ru Константин Матвеев] | ||
+ | * 196-1 [mailto:dvsemenov@edu.hse.ru Денис Семенов] | ||
+ | * 196-2 [mailto:gdnovikov@edu.hse.ru Георгий Новиков] | ||
+ | * 197-1 [mailto:shiayupov@edu.hse.ru Шамиль Аюпов] | ||
+ | * 197-2 [mailto:gdnovikov@edu.hse.ru Георгий Новиков] | ||
+ | * 198-1 [mailto:dvsemenov@edu.hse.ru Денис Семенов] | ||
+ | * 198-2 [mailto:aabolotin@edu.hse.ru Арсений Болотин] | ||
+ | * 199-1 [mailto:kpmatveev@edu.hse.ru Константин Матвеев] | ||
+ | * 199-2 [mailto:aapershina_1@edu.hse.ru Першина Анна] | ||
+ | * 1910-1 [mailto:aabolotin@edu.hse.ru Арсений Болотин] | ||
+ | * 1910-2 [mailto:damyachin@edu.hse.ru Даниил Мячин] | ||
+ | * 1911-1 [mailto:iibaykov@edu.hse.ru Байков Ильнур] | ||
+ | * 1911-2 [mailto:iibaykov@edu.hse.ru Байков Ильнур] | ||
+ | * 1912-1 [mailto:damyachin@edu.hse.ru Даниил Мячин] | ||
+ | |||
+ | =Литература= | ||
+ | |||
+ | Наш курс не следует какому-то конкретному учебнику. Мы бы рекомендовали для дополнительного чтения следующие книги: | ||
+ | |||
+ | # [DPV] Dasgupta S., Papadimitriou K., Vazirani U. ''Algorithms'' [http://algorithmics.lsi.upc.edu/docs/Dasgupta-Papadimitriou-Vazirani.pdf english], [http://www.math.nsc.ru/LBRT/k5/OR-MMF/dasgupta_2014.pdf russian] (недавно издана МЦНМО, можно купить бумажную) | ||
+ | # [E] [http://jeffe.cs.illinois.edu/teaching/algorithms/ Erickson J. ''Algorithms''] | ||
+ | # [S] Sipser M. ''Introduction to the Theory of Computation''. — Boston, Mass.: Cengage Learning, 2013. | ||
+ | # [KT] Клейнберг Дж., Тардос Е. ''Алгоритмы: разработка и применение''. — СПб.: Питер, 2016. | ||
+ | # [CLRS] Кормен Т.Х., Лейзерсон Ч.И., Ривест Р.Л., Штайн К. ''Алгоритмы: построение и анализ''. — 3-е издание — М.: Вильямс, 2013. | ||
+ | |||
+ | =Экзамен= | ||
+ | |||
+ | Экзамен пройдет 18 июня в устном формате и будет включать в себя темы всего курса (второй и четвертый модули). Студенту будет предложено несколько простых задач, решить которые нужно без подготовки: “как работает алгоритм Дейкстры на данном входе?”, “какова сложность приведённого алгоритма?”, “можно ли раскрасить данное дерево так, чтобы оно стало красно-черным?”. Для участия в экзамене понадобится компьютер или планшет с веб-камерой, которую нужно будет включить во время экзамена. | ||
+ | |||
+ | В последних столбцах [https://docs.google.com/spreadsheets/d/1pTetZvaLUR7-WQib9Y67QsvQ0m-oSuLYiBGWiFJ6oDg/edit?usp=sharing таблицы] каждой группы для каждого студента, сдающего экзамен, указан экзаменатор, временной слот, когда нужно сдавать экзамен, и ссылка, по которой нужно подключиться. Если вы планируете сдавать экзамен, но не находите себя в таблице или не находите фамилии экзаменатора напротив своей фамилии, напишите об этом [mailto:s.obiedkov@hse.ru лектору] сегодня (17 июня). Если экзаменатор указан, но не указан временной слот или ссылка, немного подождите или свяжитесь с экзаменатором. | ||
+ | |||
+ | Время экзамена для одного студента — 30 мин. Студенту предлагаются четыре задачи, которые можно решать в любом порядке. Если студент отказывается отвечать, то получает 0 и уходит. Если студент отвечает, он получает 1 балл и еще 0, 1 или 2 балла за каждую задачу (в зависимости от полноты решения). Если студент набрал 9 баллов и остается время, студенту предлагается пятая задача, за которую можно получить 0 или 1 балл. | ||
+ | |||
+ | Студенту разрешается пользоваться бумагой, ручкой, а также рисовать на экране компьютера / планшета в специализированном приложении. Студент отвечает устно при включенной веб-камере, используя при необходимости записи на бумаге или экране компьютера / планшета. | ||
+ | |||
+ | Запрещается открывать какие-либо сайты в браузере (кроме таблицы со ссылками на экзамен или сайты виртуальной доски для рисования), пользоваться литературой, иными материалами и мобильным телефоном. | ||
+ | |||
+ | В случае разрыва соединения студенту следует по возможности сообщить в [https://t.me/joinchat/CNz-QhpSESe44j3zOmcMew чат] свои имя и фамилию, группу и описание проблемы, а также попытаться восстановить соединение. При отсутствии возможности вновь подключиться к экзамену необходимо зафиксировать скриншотом или фотографией с телефона факт возникновения неустранимой проблемы. | ||
+ | |||
+ | Процедура сдачи экзамена записывается. | ||
+ | |||
+ | [https://t.me/joinchat/CNz-QhpSESe44j3zOmcMew Чат для экстренных объявлений во время экзамена] | ||
+ | |||
+ | Оценка за экзамен может быть выставлена автоматом, если | ||
+ | # оценка за второй модуль не ниже восьми (так как экзамен проводится по материалам всего курса); | ||
+ | # и оценка за работу на семинарах в четвертом модуле не ниже восьми (так как именно эта форма контроля ближе других по жанру к устному экзамену). | ||
+ | Автоматом выставляется следующая оценка, округленная по обычным правилам: (второй модуль * 0,33 + д/з * 0,2 + к/р * 0,07 + семинары * 0,07) / 0,67. Все оценки в формуле — целые. | ||
+ | |||
+ | ==Примерный список тем== | ||
+ | В квадратных скобках приведены указания на главы из книг, перечисленных в разделе [http://wiki.cs.hse.ru/Алгоритмы_и_структуры_данных_1_основной_поток_2019/202#.D0.9B.D0.B8.D1.82.D0.B5.D1.80.D0.B0.D1.82.D1.83.D1.80.D0.B0 Литература]. В разных книгах некоторых понятия определяются по-разному. В отношении тем четвертого модуля нужно ориентироваться на терминологию, используемую в слайдах. | ||
+ | |||
+ | # Алгоритмы и их сложность, асимптотический анализ (''О'' большое и малое). [DPV 0, KT 2, CLRS 2–3] | ||
+ | # Простейшие структуры данных: стек, очередь, дэк, их реализация на списках и массивах. [CLRS 10] | ||
+ | # Рекурсивные алгоритмы и рекуррентные соотношения. [DPV 2, E 1–2, KT 5, CLRS 4] | ||
+ | # Динамическое программирование. [DPV 6, E 3, KT 6, CLRS 15] | ||
+ | # Сортировки (вставкой, слиянием и др.). [DPV 2, KT 5, CLRS 4–8] | ||
+ | # Графы. Способы представления графов. Обход в глубину и в ширину, поиск компонент связности, топологическая сортировка. [DPV 3–4, E 5–6, KT 3, CLRS 22] | ||
+ | # Алгоритмы Флойда – Уоршелла и Беллмана – Форда. [DPV 4, E 8–9, KT 6, CLRS 24–25] | ||
+ | # Разделяй и властвуй. [DPV 2, KT 5, CLRS 4] | ||
+ | # Структуры данных. Амортизационный анализ. [CLRS 17] | ||
+ | # Хеш-функции и хеш-таблицы. Разрешение коллизий при помощи цепочек. Открытая адресация. Универсальное хеширование. [KT 13.6, CLRS 11] | ||
+ | # Деревья поиска. Сбалансированные деревья поиска. Красно-черные деревья. [CLRS 12–13] | ||
+ | # Жадные алгоритмы. Матроиды. [DPV 5, E 4, KT 4, CLRS 16] | ||
+ | # Алгоритм Дейкстры. [DPV 4.4, E 8, KT 4.4, CLRS 24] | ||
+ | # Приоритетная очередь на основе двоичной кучи. [DPV 4.5, KT 2.5, CLRS 6] | ||
+ | # Минимальные остовные деревья, алгоритмы Прима и Крускала. [DPV 5.1, E 7, KT 4.5, CLRS 23] | ||
+ | # Система непересекающихся множеств. [DPV 5.1, KT 4.6, CLRS 21] | ||
+ | # Конечные автоматы, регулярные выражения, регулярные и нерегулярные языки. [S 1] | ||
+ | |||
+ | =Оценки= | ||
+ | |||
+ | Итоговая оценка рассчитывается следующим образом: | ||
− | + | * Оценка за второй модуль — 33% | |
+ | * Домашние задания в четвертом модуле — 20% | ||
+ | * Контрольная работа в четвертом модуле — 7% | ||
+ | * Работа на семинарах в четвертом модуле — 7% | ||
+ | * Экзамен — 33% | ||
− | + | [https://docs.google.com/spreadsheets/d/1pTetZvaLUR7-WQib9Y67QsvQ0m-oSuLYiBGWiFJ6oDg/edit?usp=sharing Таблицы с оценками] | |
− | + |
Текущая версия на 00:38, 18 июня 2020
Лекторы: Г.А. Погудин (2-ой модуль) С.А. Объедков (4-ый модуль)
Содержание
Второй модуль
Лекции
Вторник 10:30 – 11:50, ауд. R404
Четверг 15:10 – 16:30, ауд. R404
1. 29 октября. Понятие сложности алгоритма, О-большое и о-малое, анализ простейших алгоритмов.Jupyter, Слайды
2. 31 октября. Про О-большие и пределы. Примеры: скользящее среднее, два указателя (merge). In-place алгоритмы: отражение и циклический сдвиг. Jupyter, Jupyter PDF, Слайды
3. 5 ноября. Стэк, очередь, дэк. Про реализации на списках и массивах. Jupyter, Jupyter PDF, Slides. Дополнительное чтение: Стэки и очереди
4. 7 ноября. Рекурсия: быстрое возведение в степень, перечисление подмножеств. Jupyter, Jupyter PDF, Slides. Дополнительное чтение: Раздел 1.10 про быстрое возведение в степень
5. 12 ноября. Рекурсия: перечисление перестановок и подмножеств, subset sum как пример простейшего branch&bound. Jupyter html Jupyter
6. 14 ноября. Динамическое программирование: введение и text justification. Slides Jupyter Jupyter html. Дополнительное чтение: TJ, TJ (как за n log n)
7. 19 ноября. Динамическое программирование: наибольшая общая подпоследовательность, top-down vs bottom-up. Jupyter Jupyter html. Дополнительное чтение: видеолекция про LCS
8. 21 ноября. Контрольная работа. Задачи
9. 26 ноября. Динамическое программирование: задача о рюкзаке, приближенный алгоритм. Jupyter, Jupyter html. Чтение: как делать рюкзак динамикой (bottom-up), видео про то же, но top-down, полиномальная аппроксимация (очень рекомендую)
10. 28 ноября. Поиск и сортировка: бинарный поиск, сортировка вставкой, сортировка слиянием. Jupyter (до лекции)
11. 3 декабря. Сортировка: сложность слияния, нижняя оценка на comparison-based sorting, qsort без анализа сложности. Jupyter Jupyter html
12. 5 декабря. Графы, поиск в глубину, проверка ацикличности. Jupyter Jupyter html Почитать: часть 1 часть 2
13. 10 декабря. Поиск в глубину (продолжение), поиск в ширину. Jupyter Jupyter html
14. 12 декабря. Алгоритмы поиска кратчайших путей: Floyd-Warshall & Bellman-Ford. Jupyter Jupyter html
15. 16 декабря. Внимание: лекция будет именно 16 декабря, в понедельник в 16:40-18:00 в ауд. R401. Разделяй и властвую: умножение многочленов и быстрое преобразование Фурье Jupyter (до лекции)
16. 19 декабря. Повторение перед экзаменом, разбор нескольких задач Jupyter (до лекции)
Домашние задания
- Домашнее задание 1. Дедлайн - 8 ноября.
- Домашнее задание 2 (контест). Дополнительно к контесту нужно написать оценку сложности своего алгоритма в задачах A и C. Дедлайн - 15 ноября.
- Домашнее задание 3. Дедлайн - 22 ноября.
- Домашнее задание 4 (контест). Дополнительно к контесту нужно написать оценку сложности своего алгоритма в задачах A и B. Дедлайн - 29 ноября. Дедлайн со штрафом 50% - 6 декабря.
- Домашнее задание 5 (контест). Дедлайн - 8 декабря. Дедлайн со штрафом 50% - 13 декабря.
- Домашнее задание 6 (контест). Дедлайн - 15 декабря. Дедлайн со штрафом 50% - 20 декабря.
- Домашнее задание 7 (контест). Дедлайн - 22 декабря.
Семинары
Четвертый модуль
Лекции
Понедельник 9:00 – 10:20
Четверг 15:10 – 16:30
- 6 апреля. Структуры данных. Амортизационный анализ. Слайды
- 9 апреля. Хеш-функции и хеш-таблицы. Разрешение коллизий при помощи цепочек. Открытая адресация. Слайды
- 13 апреля. Методы задания хеш-функций. Универсальное хеширование. Слайды
- 16 апреля. Двоичные деревья поиска. Слайды
- 20 апреля. Краcно-черные деревья. Слайды. Заметки: 1, 2, 3, 4
- 23 апреля. Жадные алгоритмы. Слайды. Иллюстрация к последнему доказательству.
- 27 апреля. Алгоритм Дейкстры. Слайды
- 30 апреля. Двоичная куча. Слайды
- 7 мая. Биномиальная куча. Слайды
- 14 мая. Контрольная работа (контест) по темам 1 – 6. Оценка: одна решенная задача — 3 балла, две — 7 баллов, три — 10 баллов. Пробный вариант.
- 18 мая. Минимальные остовные деревья. Слайды
- 21 мая. Система непересекающихся множеств. Слайды
- 24 мая. Жадный алгоритм на матроиде. Слайды
- 28 мая. Конечные автоматы. Слайды
- 1 июня. Недетерминированные конечные автоматы. Слайды
- 4 июня. Регулярные выражения и нерегулярные языки. Слайды
- 8 июня. Повторение перед экзаменом, разбор нескольких задач. Слайды
Домашние задания
- Домашнее задание 1. Дедлайн — 16 апреля.
- Домашнее задание 2 (контест). Дедлайн — 26 апреля, 18:05. Штрафы, которые назначаются в системе за количество попыток, не учитываются при выставлении оценки. Дедлайн со штрафом 50% — 2 мая. Внутренние тесты для первых двух задач.
- Домашнее задание 3. Дедлайн — 3 мая, 18:00. Дедлайн со штрафом 50% — 10 мая.
- Домашнее задание 4 (контест). Дедлайн — 14 мая. Для алгоритмов в задачах задач B и C нужно дополнительно доказать корректность и оценить сложность (и прислать доказательства преподавателю своей группы).
- Домашнее задание 5 (контест). Дедлайн — 21 мая.
- Домашнее задание 6 (контест). Дедлайн — 28 мая. Дедлайн со штрафом 50% — 2 июня.
- Домашнее задание 7 (контест). Дедлайн — 7 июня. Последние две задачи подразумевают знание материала лекции 4 июня.
Семинары
Учебные ассистенты
- 192-2 Шамиль Аюпов
- 194-1 Першина Анна
- 194-2 Константин Матвеев
- 196-1 Денис Семенов
- 196-2 Георгий Новиков
- 197-1 Шамиль Аюпов
- 197-2 Георгий Новиков
- 198-1 Денис Семенов
- 198-2 Арсений Болотин
- 199-1 Константин Матвеев
- 199-2 Першина Анна
- 1910-1 Арсений Болотин
- 1910-2 Даниил Мячин
- 1911-1 Байков Ильнур
- 1911-2 Байков Ильнур
- 1912-1 Даниил Мячин
Литература
Наш курс не следует какому-то конкретному учебнику. Мы бы рекомендовали для дополнительного чтения следующие книги:
- [DPV] Dasgupta S., Papadimitriou K., Vazirani U. Algorithms english, russian (недавно издана МЦНМО, можно купить бумажную)
- [E] Erickson J. Algorithms
- [S] Sipser M. Introduction to the Theory of Computation. — Boston, Mass.: Cengage Learning, 2013.
- [KT] Клейнберг Дж., Тардос Е. Алгоритмы: разработка и применение. — СПб.: Питер, 2016.
- [CLRS] Кормен Т.Х., Лейзерсон Ч.И., Ривест Р.Л., Штайн К. Алгоритмы: построение и анализ. — 3-е издание — М.: Вильямс, 2013.
Экзамен
Экзамен пройдет 18 июня в устном формате и будет включать в себя темы всего курса (второй и четвертый модули). Студенту будет предложено несколько простых задач, решить которые нужно без подготовки: “как работает алгоритм Дейкстры на данном входе?”, “какова сложность приведённого алгоритма?”, “можно ли раскрасить данное дерево так, чтобы оно стало красно-черным?”. Для участия в экзамене понадобится компьютер или планшет с веб-камерой, которую нужно будет включить во время экзамена.
В последних столбцах таблицы каждой группы для каждого студента, сдающего экзамен, указан экзаменатор, временной слот, когда нужно сдавать экзамен, и ссылка, по которой нужно подключиться. Если вы планируете сдавать экзамен, но не находите себя в таблице или не находите фамилии экзаменатора напротив своей фамилии, напишите об этом лектору сегодня (17 июня). Если экзаменатор указан, но не указан временной слот или ссылка, немного подождите или свяжитесь с экзаменатором.
Время экзамена для одного студента — 30 мин. Студенту предлагаются четыре задачи, которые можно решать в любом порядке. Если студент отказывается отвечать, то получает 0 и уходит. Если студент отвечает, он получает 1 балл и еще 0, 1 или 2 балла за каждую задачу (в зависимости от полноты решения). Если студент набрал 9 баллов и остается время, студенту предлагается пятая задача, за которую можно получить 0 или 1 балл.
Студенту разрешается пользоваться бумагой, ручкой, а также рисовать на экране компьютера / планшета в специализированном приложении. Студент отвечает устно при включенной веб-камере, используя при необходимости записи на бумаге или экране компьютера / планшета.
Запрещается открывать какие-либо сайты в браузере (кроме таблицы со ссылками на экзамен или сайты виртуальной доски для рисования), пользоваться литературой, иными материалами и мобильным телефоном.
В случае разрыва соединения студенту следует по возможности сообщить в чат свои имя и фамилию, группу и описание проблемы, а также попытаться восстановить соединение. При отсутствии возможности вновь подключиться к экзамену необходимо зафиксировать скриншотом или фотографией с телефона факт возникновения неустранимой проблемы.
Процедура сдачи экзамена записывается.
Чат для экстренных объявлений во время экзамена
Оценка за экзамен может быть выставлена автоматом, если
- оценка за второй модуль не ниже восьми (так как экзамен проводится по материалам всего курса);
- и оценка за работу на семинарах в четвертом модуле не ниже восьми (так как именно эта форма контроля ближе других по жанру к устному экзамену).
Автоматом выставляется следующая оценка, округленная по обычным правилам: (второй модуль * 0,33 + д/з * 0,2 + к/р * 0,07 + семинары * 0,07) / 0,67. Все оценки в формуле — целые.
Примерный список тем
В квадратных скобках приведены указания на главы из книг, перечисленных в разделе Литература. В разных книгах некоторых понятия определяются по-разному. В отношении тем четвертого модуля нужно ориентироваться на терминологию, используемую в слайдах.
- Алгоритмы и их сложность, асимптотический анализ (О большое и малое). [DPV 0, KT 2, CLRS 2–3]
- Простейшие структуры данных: стек, очередь, дэк, их реализация на списках и массивах. [CLRS 10]
- Рекурсивные алгоритмы и рекуррентные соотношения. [DPV 2, E 1–2, KT 5, CLRS 4]
- Динамическое программирование. [DPV 6, E 3, KT 6, CLRS 15]
- Сортировки (вставкой, слиянием и др.). [DPV 2, KT 5, CLRS 4–8]
- Графы. Способы представления графов. Обход в глубину и в ширину, поиск компонент связности, топологическая сортировка. [DPV 3–4, E 5–6, KT 3, CLRS 22]
- Алгоритмы Флойда – Уоршелла и Беллмана – Форда. [DPV 4, E 8–9, KT 6, CLRS 24–25]
- Разделяй и властвуй. [DPV 2, KT 5, CLRS 4]
- Структуры данных. Амортизационный анализ. [CLRS 17]
- Хеш-функции и хеш-таблицы. Разрешение коллизий при помощи цепочек. Открытая адресация. Универсальное хеширование. [KT 13.6, CLRS 11]
- Деревья поиска. Сбалансированные деревья поиска. Красно-черные деревья. [CLRS 12–13]
- Жадные алгоритмы. Матроиды. [DPV 5, E 4, KT 4, CLRS 16]
- Алгоритм Дейкстры. [DPV 4.4, E 8, KT 4.4, CLRS 24]
- Приоритетная очередь на основе двоичной кучи. [DPV 4.5, KT 2.5, CLRS 6]
- Минимальные остовные деревья, алгоритмы Прима и Крускала. [DPV 5.1, E 7, KT 4.5, CLRS 23]
- Система непересекающихся множеств. [DPV 5.1, KT 4.6, CLRS 21]
- Конечные автоматы, регулярные выражения, регулярные и нерегулярные языки. [S 1]
Оценки
Итоговая оценка рассчитывается следующим образом:
- Оценка за второй модуль — 33%
- Домашние задания в четвертом модуле — 20%
- Контрольная работа в четвертом модуле — 7%
- Работа на семинарах в четвертом модуле — 7%
- Экзамен — 33%