Алгоритмы и структуры данных 1 основной поток 2019/202 — различия между версиями

Материал из Wiki - Факультет компьютерных наук
Перейти к: навигация, поиск
(deadline moved)
(Экзамен)
 
(не показаны 84 промежуточные версии 2 участников)
Строка 4: Строка 4:
 
==Лекции==
 
==Лекции==
 
Вторник 10:30 – 11:50, ауд. R404
 
Вторник 10:30 – 11:50, ауд. R404
 +
 
Четверг 15:10 – 16:30, ауд. R404
 
Четверг 15:10 – 16:30, ауд. R404
  
Строка 36: Строка 37:
  
 
15. '''16 декабря.''' Внимание: лекция будет именно 16 декабря, в понедельник в 16:40-18:00 в ауд. R401. Разделяй и властвую: умножение многочленов и быстрое преобразование Фурье [https://www.dropbox.com/s/5sgzooyx0dev5ez/lecture15.ipynb?dl=0 Jupyter (до лекции)]
 
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/ Пробный экзамен]
  
 
==Домашние задания==
 
==Домашние задания==
Строка 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%
  
# [http://jeffe.cs.illinois.edu/teaching/algorithms/ Algorithms, Jeff Erickson]
+
[https://docs.google.com/spreadsheets/d/1pTetZvaLUR7-WQib9Y67QsvQ0m-oSuLYiBGWiFJ6oDg/edit?usp=sharing Таблицы с оценками]
# Algorithms, Dasgupta, Papadimitriou, Vazirani, [http://algorithmics.lsi.upc.edu/docs/Dasgupta-Papadimitriou-Vazirani.pdf english], [http://www.math.nsc.ru/LBRT/k5/OR-MMF/dasgupta_2014.pdf russian] (недавно издана МЦНМО, можно купить бумажную)
+

Текущая версия на 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. Домашнее задание 1. Дедлайн - 8 ноября.
  2. Домашнее задание 2 (контест). Дополнительно к контесту нужно написать оценку сложности своего алгоритма в задачах A и C. Дедлайн - 15 ноября.
  3. Домашнее задание 3. Дедлайн - 22 ноября.
  4. Домашнее задание 4 (контест). Дополнительно к контесту нужно написать оценку сложности своего алгоритма в задачах A и B. Дедлайн - 29 ноября. Дедлайн со штрафом 50% - 6 декабря.
  5. Домашнее задание 5 (контест). Дедлайн - 8 декабря. Дедлайн со штрафом 50% - 13 декабря.
  6. Домашнее задание 6 (контест). Дедлайн - 15 декабря. Дедлайн со штрафом 50% - 20 декабря.
  7. Домашнее задание 7 (контест). Дедлайн - 22 декабря.

Семинары

  1. Неделя 1
  2. Неделя 2
  3. Неделя 3
  4. Неделя 4
  5. Неделя 5
  6. Неделя 6
  7. Неделя 7
  8. Неделя 8

Четвертый модуль

Лекции

Понедельник 9:00 – 10:20

Четверг 15:10 – 16:30

  1. 6 апреля. Структуры данных. Амортизационный анализ. Слайды
  2. 9 апреля. Хеш-функции и хеш-таблицы. Разрешение коллизий при помощи цепочек. Открытая адресация. Слайды
  3. 13 апреля. Методы задания хеш-функций. Универсальное хеширование. Слайды
  4. 16 апреля. Двоичные деревья поиска. Слайды
  5. 20 апреля. Краcно-черные деревья. Слайды. Заметки: 1, 2, 3, 4
  6. 23 апреля. Жадные алгоритмы. Слайды. Иллюстрация к последнему доказательству.
  7. 27 апреля. Алгоритм Дейкстры. Слайды
  8. 30 апреля. Двоичная куча. Слайды
  9. 7 мая. Биномиальная куча. Слайды
  10. 14 мая. Контрольная работа (контест) по темам 1 – 6. Оценка: одна решенная задача — 3 балла, две — 7 баллов, три — 10 баллов. Пробный вариант.
  11. 18 мая. Минимальные остовные деревья. Слайды
  12. 21 мая. Система непересекающихся множеств. Слайды
  13. 24 мая. Жадный алгоритм на матроиде. Слайды
  14. 28 мая. Конечные автоматы. Слайды
  15. 1 июня. Недетерминированные конечные автоматы. Слайды
  16. 4 июня. Регулярные выражения и нерегулярные языки. Слайды
  17. 8 июня. Повторение перед экзаменом, разбор нескольких задач. Слайды

Домашние задания

  1. Домашнее задание 1. Дедлайн — 16 апреля.
  2. Домашнее задание 2 (контест). Дедлайн — 26 апреля, 18:05. Штрафы, которые назначаются в системе за количество попыток, не учитываются при выставлении оценки. Дедлайн со штрафом 50% — 2 мая. Внутренние тесты для первых двух задач.
  3. Домашнее задание 3. Дедлайн — 3 мая, 18:00. Дедлайн со штрафом 50% — 10 мая.
  4. Домашнее задание 4 (контест). Дедлайн — 14 мая. Для алгоритмов в задачах задач B и C нужно дополнительно доказать корректность и оценить сложность (и прислать доказательства преподавателю своей группы).
  5. Домашнее задание 5 (контест). Дедлайн — 21 мая.
  6. Домашнее задание 6 (контест). Дедлайн — 28 мая. Дедлайн со штрафом 50% — 2 июня.
  7. Домашнее задание 7 (контест). Дедлайн — 7 июня. Последние две задачи подразумевают знание материала лекции 4 июня.

Семинары

  1. Неделя 1
  2. Неделя 2
  3. Неделя 3
  4. Неделя 4
  5. Неделя 5
  6. Неделя 6
  7. Неделя 7
  8. Неделя 8
  9. Неделя 9


Учебные ассистенты

Литература

Наш курс не следует какому-то конкретному учебнику. Мы бы рекомендовали для дополнительного чтения следующие книги:

  1. [DPV] Dasgupta S., Papadimitriou K., Vazirani U. Algorithms english, russian (недавно издана МЦНМО, можно купить бумажную)
  2. [E] Erickson J. Algorithms
  3. [S] Sipser M. Introduction to the Theory of Computation. — Boston, Mass.: Cengage Learning, 2013.
  4. [KT] Клейнберг Дж., Тардос Е. Алгоритмы: разработка и применение. — СПб.: Питер, 2016.
  5. [CLRS] Кормен Т.Х., Лейзерсон Ч.И., Ривест Р.Л., Штайн К. Алгоритмы: построение и анализ. — 3-е издание — М.: Вильямс, 2013.

Экзамен

Экзамен пройдет 18 июня в устном формате и будет включать в себя темы всего курса (второй и четвертый модули). Студенту будет предложено несколько простых задач, решить которые нужно без подготовки: “как работает алгоритм Дейкстры на данном входе?”, “какова сложность приведённого алгоритма?”, “можно ли раскрасить данное дерево так, чтобы оно стало красно-черным?”. Для участия в экзамене понадобится компьютер или планшет с веб-камерой, которую нужно будет включить во время экзамена.

В последних столбцах таблицы каждой группы для каждого студента, сдающего экзамен, указан экзаменатор, временной слот, когда нужно сдавать экзамен, и ссылка, по которой нужно подключиться. Если вы планируете сдавать экзамен, но не находите себя в таблице или не находите фамилии экзаменатора напротив своей фамилии, напишите об этом лектору сегодня (17 июня). Если экзаменатор указан, но не указан временной слот или ссылка, немного подождите или свяжитесь с экзаменатором.

Время экзамена для одного студента — 30 мин. Студенту предлагаются четыре задачи, которые можно решать в любом порядке. Если студент отказывается отвечать, то получает 0 и уходит. Если студент отвечает, он получает 1 балл и еще 0, 1 или 2 балла за каждую задачу (в зависимости от полноты решения). Если студент набрал 9 баллов и остается время, студенту предлагается пятая задача, за которую можно получить 0 или 1 балл.

Студенту разрешается пользоваться бумагой, ручкой, а также рисовать на экране компьютера / планшета в специализированном приложении. Студент отвечает устно при включенной веб-камере, используя при необходимости записи на бумаге или экране компьютера / планшета.

Запрещается открывать какие-либо сайты в браузере (кроме таблицы со ссылками на экзамен или сайты виртуальной доски для рисования), пользоваться литературой, иными материалами и мобильным телефоном.

В случае разрыва соединения студенту следует по возможности сообщить в чат свои имя и фамилию, группу и описание проблемы, а также попытаться восстановить соединение. При отсутствии возможности вновь подключиться к экзамену необходимо зафиксировать скриншотом или фотографией с телефона факт возникновения неустранимой проблемы.

Процедура сдачи экзамена записывается.

Чат для экстренных объявлений во время экзамена

Оценка за экзамен может быть выставлена автоматом, если

  1. оценка за второй модуль не ниже восьми (так как экзамен проводится по материалам всего курса);
  2. и оценка за работу на семинарах в четвертом модуле не ниже восьми (так как именно эта форма контроля ближе других по жанру к устному экзамену).

Автоматом выставляется следующая оценка, округленная по обычным правилам: (второй модуль * 0,33 + д/з * 0,2 + к/р * 0,07 + семинары * 0,07) / 0,67. Все оценки в формуле — целые.

Примерный список тем

В квадратных скобках приведены указания на главы из книг, перечисленных в разделе Литература. В разных книгах некоторых понятия определяются по-разному. В отношении тем четвертого модуля нужно ориентироваться на терминологию, используемую в слайдах.

  1. Алгоритмы и их сложность, асимптотический анализ (О большое и малое). [DPV 0, KT 2, CLRS 2–3]
  2. Простейшие структуры данных: стек, очередь, дэк, их реализация на списках и массивах. [CLRS 10]
  3. Рекурсивные алгоритмы и рекуррентные соотношения. [DPV 2, E 1–2, KT 5, CLRS 4]
  4. Динамическое программирование. [DPV 6, E 3, KT 6, CLRS 15]
  5. Сортировки (вставкой, слиянием и др.). [DPV 2, KT 5, CLRS 4–8]
  6. Графы. Способы представления графов. Обход в глубину и в ширину, поиск компонент связности, топологическая сортировка. [DPV 3–4, E 5–6, KT 3, CLRS 22]
  7. Алгоритмы Флойда – Уоршелла и Беллмана – Форда. [DPV 4, E 8–9, KT 6, CLRS 24–25]
  8. Разделяй и властвуй. [DPV 2, KT 5, CLRS 4]
  9. Структуры данных. Амортизационный анализ. [CLRS 17]
  10. Хеш-функции и хеш-таблицы. Разрешение коллизий при помощи цепочек. Открытая адресация. Универсальное хеширование. [KT 13.6, CLRS 11]
  11. Деревья поиска. Сбалансированные деревья поиска. Красно-черные деревья. [CLRS 12–13]
  12. Жадные алгоритмы. Матроиды. [DPV 5, E 4, KT 4, CLRS 16]
  13. Алгоритм Дейкстры. [DPV 4.4, E 8, KT 4.4, CLRS 24]
  14. Приоритетная очередь на основе двоичной кучи. [DPV 4.5, KT 2.5, CLRS 6]
  15. Минимальные остовные деревья, алгоритмы Прима и Крускала. [DPV 5.1, E 7, KT 4.5, CLRS 23]
  16. Система непересекающихся множеств. [DPV 5.1, KT 4.6, CLRS 21]
  17. Конечные автоматы, регулярные выражения, регулярные и нерегулярные языки. [S 1]

Оценки

Итоговая оценка рассчитывается следующим образом:

  • Оценка за второй модуль — 33%
  • Домашние задания в четвертом модуле — 20%
  • Контрольная работа в четвертом модуле — 7%
  • Работа на семинарах в четвертом модуле — 7%
  • Экзамен — 33%

Таблицы с оценками