Алгоритмы и структуры данных, часть 1
Санкт-Петербург, осень 2019
Описание
О курсе
Этот курс поможет вам получить представление о фундаментальной составляющей программирования — алгоритмах, а также о том как хранить данные и обрабатывать их — структурах данных. Мы научимся понимать, какие алгоритмы и какие структуры данных подходят к данной вам задаче, какие более эффективные. Научимся понимать какого рода задача вам поставлена. Рассмотрим множество приемов, которые уже придумало человечество, поймем, как они это придумали, и сравним эти приемы.
Мы будем решать теоретические задачи на доказательство и изобретение своих простых алгоритмов, мы будем программировать изученные алгоритмы и структуры данных, применять их в заданных вам ситуациях. Поговорим о том, какие алгоритмы используются в индустрии, а какие имеют большое теоретическое значение для развития науки и области.
Начнем мы курс с понятия алгоритма и как оценивать скорость алгоритмов, с методов сортировок и поиска данных, познакомимся с методами разделяй и властвуй
, жадными алгоритмами и динамическим программированием.
Продолжим структурами данных, алгоритмами на графах и другими не менее интересными темами.
Домашние задания
Будут состоять из двух типов задач:
Задачи на программирование будут приниматься в автоматическом режиме на системе для контестов.
Задачи на доказательство будет приниматься через сайт центра.
Критерии выставления оценки
Оценка будет выставляться по результатам решения домашних заданий и летучек. Летучки составляют 10% от общей оценки, теоретические домашние задания - 40%, задачи на программирование - 50%.
За 85% решённых задач выставляется оценка отлично,
за 75% - хорошо,
за 60% - зачёт.
Оценка теоретических домашних заданий
Всего будет $n$ домашних заданий ($n$ будет где-то около 14) ($n = 8$).
За каждое домашнее задание можно набрать 1 балл максимум. В каждом домашнем задании есть несколько задач. Решение каждой задачи вносит одинаковый вклад в оценку этого домашнего задания.
В каждом домашнем задании указано, сколько задач нужно решить, чтобы получить максимальный балл. Получить больше максимального балла нельзя. Например, если в одном домашнем задании есть 4 задачи, но для максимального балла нужно решить 3, то если вы полностью решаете любые 3 из 4, то получаете 1 балл. Либо если же вы решаете две задачи правильно, а две задачи наполовину
, то тоже получите 1 балл за домашнее задание.
Оценка за все домашние задания:
Взять $n - 2$ лучших домашних задания студента, $S$ — это сумма баллов по этим домашним заданиям.
Оценка за теоретические домашние задания — это $\frac{S}{n - 2}$.
Получается, что два ваших худших результата по домашнему заданию не учитываются в общей оценке. Это дает вам некоторый выбор не учитывать два домашних задания по разным причинам, например, если вы не успеваете к дедлайну. Но при этом, пожалуйста, не просите подвинуть дедлайн.
Оценка летучек
В начале лекции будут летучки, это несколько тестовых заданий на несколько минут. У вас есть ровно одна попытка ответить на каждый вопрос. Оценка за летучки:
За каждую летучку вы получаете $\frac{C}{Q}$, где C — число правильных ответов, а Q — число вопросов.
Всего будет $n$ летучек, из них выбираются лучшие $n - 2$ для студента, и суммируются полученные по ним баллы в число $S$.
Оценка за летучки это $\frac{S}{n - 2}$.
Преподаватели
Список лекций
Что такое алгоритм? RAM-модель, O-символика. Оценка рекурсивных функций.
Рассмотрим сортировки с помощью сравнений: квадратичные, сортировку слиянием и быструю сортировка.
- Нижняя граница на сортировки с помощью сравнений.
- Задача о порядковой статистике.
- Сортировка подсчетом и цифровая сортировка.
- Двоичный поиск.
Рассмотрим концепцию динамического программирования.
Задача о наибольшей возрастающей подпоследовательности
Задача о редакционном расстоянии
Задача о рюкзаке
Рассмотрим задачу о рюкзаке, задачу о перемножении последовательности матриц разного размера (ДП по подотрезкам), задачу о независимом множестве максимального веса в дереве (ДП по поддеревьям) и задачу коммивояжера (ДП по подмножествам)
- Pointer-machine модель
- Стек, очередь, список, дек
- Вектор
- Амортизационный анализ
Система непересекающихся множеств на списках
Система непересекающихся множеств на деревьях
Дерево поиска, определение и наивная реализация функций: добавление, удаление, поиск заданного элемента, поиск минимума, поиск максимума, поиск следующего, поиск предыдущего
АВЛ-дерево, доказательство оценки на высоту дерева, операции добавления и удаления
2-3-дерево, операции добавления и удаления
Splay дерево
Декартово дерево