Алгоритмы и структуры данных, часть 2
Санкт-Петербург, весна 2020
Описание
О курсе
На курсе поговорим об алгоритмах на графах (кратчайшие пути, остовные деревья, потоки в сетях), линейном программировании, алгоритмах на строках и о полиномиальных классах задач.
Мы как и в прошлом семестре будем решать теоретические задачи на доказательство и изобретение своих простых алгоритмов, будем программировать изученные алгоритмы и структуры данных, применять их в заданных вам ситуациях. Поговорим о том, какие алгоритмы используются в индустрии, а какие имеют большое теоретическое значение для развития науки и области.
Домашние задания
Будут состоять из двух типов задач: Задачи на программирование будут приниматься в автоматическом режиме на системе для контестов. Задачи на доказательство будет приниматься через сайт центра.
Критерии выставления оценки
Оценка будет выставляться по результатам решения домашних заданий и летучек. Летучки составляют 10% 0% от общей оценки, теоретические домашние задания - 40% 45%, задачи на программирование - 50% 55%.
За 85% решённых задач выставляется оценка отлично,
за 75% - хорошо,
за 60% - зачёт.
Оценка теоретических домашних заданий
Всего будет $n$ домашних заданий (предполагаем, что $n$ будет равно 6 4).
За каждое домашнее задание можно набрать 1 балл максимум. В каждом домашнем задании есть несколько задач. Решение каждой задачи вносит одинаковый вклад в оценку этого домашнего задания.
В каждом домашнем задании указано, сколько задач нужно решить, чтобы получить максимальный балл. Получить больше максимального балла нельзя. Например, если в одном домашнем задании есть 4 задачи, но для максимального балла нужно решить 3, то если вы полностью решаете любые 3 из 4, то получаете 1 балл. Либо если же вы решаете две задачи правильно, а две задачи наполовину
, то тоже получите 1 балл за домашнее задание.
Оценка за все домашние задания:
Взять $n - 2$ лучших домашних задания студента, $S$ — это сумма баллов по этим домашним заданиям.Оценка за теоретические домашние задания — это $\frac{S}{n - 2}$.- Взять $n - 1$ лучших домашних задания студента, $S$ — это сумма баллов по этим домашним заданиям.
- Оценка за теоретические домашние задания — это $\frac{S}{n - 1}$.
Получается, что два ваших худших результата по домашнему заданию не учитываются в общей оценке. Это дает вам некоторый выбор не учитывать два домашних задания по разным причинам, например, если вы не успеваете к дедлайну. Но при этом, пожалуйста, не просите подвинуть дедлайн.
Оценка летучек
Летучек не будет.
В начале лекции будут летучки, это несколько тестовых заданий на несколько минут. В этом семестре летучки будут реже. У вас есть ровно одна попытка ответить на каждый вопрос. Для тех, кто не сможет ходить на лекции, будет отдельный большой тест в конце на тему летучек, на котором можно будет набрать те 10% от общего балла. Оценка за летучки:
За каждую летучку вы получаете $\frac{C}{Q}$, где C — число правильных ответов, а Q — число вопросов.Всего будет $n$ летучек, из них выбираются лучшие $n - 2$ для студента, и суммируются полученные по ним баллы в число $S$.
Преподаватели
Список лекций
- Критерий и проверка несуществования кратчайшего пути
- Поиск отрицательного цикла
- Алгоритм Флойда-Уоршалла
- Определения сети, $\langle S, T \rangle$-разреза
- Теорема Форда-Фалкерсона
- Алгоритм Форда-Фалкерсона
- Алгоритм Эдмондса-Карпа
- Определения (Approximation algorithm, PTAS)
- Задача о вершинном покрытии (Vertex Cover)
- Задача коммивояжера с неравенством треугольника (TSP)
- Общая задача коммивояжера
- Задача о покрытии множества (Set Cover)
- Задача о сумме подмножества (Subset Sum)
- Cуффиксный массив
- Определение суффиксного массива
- Алгоритм удвоения префикса для построения за $\mathcal{O}(n \log^2(n))$
- Использование цифровой сортировки для построения за $\mathcal{O}(n \log{n})$
- Нахождение LCP суффиксов, используя суффиксный массив
- Построение массива LCP соседних в суффиксном массиве суффиксов за $\mathcal{O}(n)$ (Касаи, Ли, Аримура, Арикава, Пак)