Алгоритмы и структуры данных 2016 — различия между версиями

Материал из Wiki - Факультет компьютерных наук
Перейти к: навигация, поиск
(Лекции)
Строка 92: Строка 92:
 
|-
 
|-
 
|}
 
|}
 +
 +
== Учебные контесты ==
 +
 +
[https://official.contest.yandex.ru/contest/2007/enter/ Сортировки]
 +
 +
[https://official.contest.yandex.ru/contest/2185/enter/ Динамическое программирование]
 +
 +
[https://official.contest.yandex.ru/contest/2218/enter/ Обход в глубину]
 +
 +
[https://official.contest.yandex.ru/contest/2243/enter/ Обход в ширину]

Версия 16:31, 3 марта 2016

Лектор: С. Объедков

Расписание лекций:
вторник 13:40 – 15:00, ауд. 622
четверг 10:30 – 11:50, ауд. 622

Программа дисциплины

Лекции

  • 12 января. Структура курса, правила выполнения домашних заданий. Рекурсивные алгоритмы: задача о Ханойской башне. Оценка времени работы рекурсивного алгоритма при помощи рекуррентного соотношения. Доказательство оптимальности рекурсивного алгоритма.
  • 14 января. Сортировка вставкой и слиянием. Использование инварианта цикла при доказательстве корректности сортировки вставкой. Θ- и O-обозначения. Оценка сложности алгоритмов.
  • 19 января. О-, o-, Ω-, ω-, Θ-обозначения. Быстрая сортировка, время работы в худшем, лучшем и среднем случаях.
  • 21 января. Сортировка при помощи двоичного дерева поиска и ее связь с быстрой сортировкой. Примеры решения рекуррентных соотношений: решение с использованием дерева рекурсии и методом подстановки. Основная теорема.
  • 26 января. Разбиение массива по опорному элементу на три части (элементы, меньшие опорного, равные опорному и большие опорного). Оптимальность сортировки слиянием. Выбор порядковой статистики за время O(n): рандомизированный и детерминированный алгоритмы.
  • 28 января. Поиск ближайшей пары точек за время O(n logn).
  • 2 февраля. Алгоритм Карацубы для умножения целых чисел. Алгоритм Штрассена для умножения матриц.
  • 4 февраля. Быстрое возведение в степень по модулю. Динамическое программирование: выравнивание абзаца по ширине (рекурсивное решение с мемоизацией).
  • 9 февраля. Динамическое программирование. Задача о планировании взвешенных интервалов: рекурсивное решение с мемоизацией и итеративное решение. Свойства задач, эффективно решаемых при помощи динамического программирования: наличие полиномиального числа подзадач, выразимость исходной задачи в терминах подзадач, сводимость больших подзадач к полиномиальному числу меньших подзадач. Выравнивание абзаца по ширине: итеративное решение. (Контест)
  • 11 февраля. Вычисление редакционного расстояния и выравнивание последовательностей.
  • 16 февраля. Графы: обход в глубину и в ширину, поиск компонент связности в неориентированных графах.
  • 18 февраля. Способы представления графов: матрица смежности и списки смежности. Оценка сложности алгоритмов поиска в ширину и в глубину.
  • 25 февраля. Топологическая сортировка за линейное время: алгоритмы, основанные на удалении вершин без входящих ребер (с доказательством корректности) и на поиске в глубину (без доказательства корректности). Вычисление компонент сильной связности (с незаконченным доказательством корректности).
  • 1 марта. Оценка сложности алгоритма поиска компонент связности в неориентированных графах. Алгоритм проверки сильной связности ориентированного графа. Вычисление компонент сильной связности в ориентированном графе (завершение доказательства корректности алгоритма). Поиск путей возведением в степень матрицы смежности графа, алгоритм Флойда – Уоршелла.
  • 3 марта. Алгоритм Флойда – Уоршелла: формулировка в терминах динамического программирования, оценка сложности, оптимизация по памяти, обнаружение циклов с отрицательным весом, восстановление кратчайших путей. Алгоритм Беллмана – Форда для графов без циклов с отрицательным весом.

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

Первое домашнее задание

Первое домашнее задание стоит из двух частей.

К 15 февраля нужно решить три задачи на асимптотику (две — из пункта 1 и одну — из пункта 2) и две задачи на рекуррентные соотношения (одну — из пункта 1 и одну — из пункта 2). Какие именно задачи нужно решить, уточните, пожалуйста, у преподавателя, ведущего практические занятия. Крайний срок выполнения задач может немного различаться в разных подгруппах.

К 20 февраля нужно решить две задачи из контеста (одну типа A и одну — типа B; какие именно, определяет преподаватель, ведущий практические занятия). Решение необходимо снабдить описанием алгоритма, обоснованием корректности и анализом асимптотической сложности.

Второе домашнее задание

Ко 2 марта (!) нужно решить две задачи из контеста (одну типа A и одну — типа B; какие именно, определяет преподаватель, ведущий практические занятия). Решение необходимо снабдить описанием алгоритма, обоснованием корректности и анализом асимптотической сложности. Начало контеста — 22 февраля, 20:00.

Это не все домашнее задание. Дополнительные задачи появятся позже.

Экзамен

Рекомендуемая литература

  1. Кормен, Лейзерсон, Ривест, Штайн. Алгоритмы: построение и анализ
  2. Дасгупта, Пападимитриу, Вазирани. Алгоритмы


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

Подгруппа Преподаватель Учебные ассистенты Семинары Консультации
152-1 Михаил Нокель Андрей Атанов
152-2 Сергей Объедков Андрей Климкин Страница семинаров Понедельник, 10:30 – 11:50, ауд. 511
154-1 Илья Макаров Владимир Гончаров
154-2 Алексей Умнов Павел Белов Страница семинаров Четверг, 13:40 - 15:00
155-1 Михаил Дектярев Александр Тиунов
155-2 Павел Мельничук Александр Тиунов Страница семинаров
156-1 Филипп Синицын Максим Сабянин
156-2 Алексей Умнов Павел Белов Страница семинаров Четверг, 9:00 - 10:20
157-1 Михаил Густокашин Андрей Климкин
157-2 Яна Кашинская Андрей Атанов Понедельник, 10:30 – 11:50
158-1 Николай Субоч Максим Сабянин
158-2 Денис Симагин Владимир Гончаров Страница семинаров

Учебные контесты

Сортировки

Динамическое программирование

Обход в глубину

Обход в ширину