Читается в осенне-весеннем семестре 2011 года УНК «ИПСА» НТУУ «КПИ» в рамках факультативного цикла «Программная инженерия».
Курс рассказывает о техниках анализа и разработки эффективных алгоритмов с упором на решение практических программистских задач. Среди рассматриваемых тем будут сортировки и деревья, динамическое программирование и алгоритмы на графах, вычислительная геометрия и строковые алгоритмы, а также многое другое.
Программа базируется на курсе «6.046: Introduction to Algorithms» Массачусетского технологического института и на учебниках Т. Кормена, Р. Седжвика и А. Шеня.
Лекторы:
Второй семестр
Расписание
Дата
|
Тема
|
Лектор
|
Аудитория
|
TBA
|
Лекция 3-1
|
TBA
|
210-35
|
Конспект лекций
Модуль 3. Алгоритмы на графах
- Графы. Варианты записи графа. Поиск циклов. Поиск в ширину (BFS), в глубину (DFS) и топологическая сортировка. Связность графа. Двудольный граф
- Жадные алгоритмы. Задача минимального остова (MST). Алгоритм Прайма. Алгоритм Краскала
- Кратчайшие пути I. Свойства и применение. Алгоритм Дейкстры
- Кратчайшие пути II. Алгоритм Беллмана-Форда. Задача разностных ограничений
- Кратчайшие пути III. Все пары вершин. Алгоритм Флойда-Уоршолла. Алгоритм Джонсона. Транзитивное замыкание
Модуль 4. Дополнительные темы
- Задача минимума на отрезке (RMQ) и решение корневой декомпозицией. Дерево отрезков
- Offline и online версии задачи RMQ. Задача SRMQ
- Задача наименьшего общего предка (LCA). Сведение LCA к RMQ
- Сбалансированные деревья. Пример реализации вставки в AVL
- Декартово дерево (Treap)
- Порядковые статистики. Динамические порядковые статистики
- Конкурентый анализ на примере самоупорядочивающихся списков
- Вычислительная геометрия I. Векторное представление. Выпуклая оболочка
- Вычислительная геометрия II. Точка в полигоне. Площадь полигона. Метод заметания
- Строковые алгоритмы I. Префикс-функция. Z-функция. Хэширование
- Строковые алгоритмы II. Бор. Алгоритм Рабина-Карпа
- Максимальные поток и минимальный разрез. Алгоритм Форда-Фалкерсона. Паросочетания
Задачи
- Модуль 3
- Модуль 4
Лабораторные работы
- Модуль 3
- Модуль 4
Первый семестр
Расписание
Дата
|
Тема
|
Лектор
|
Аудитория
|
29.09
|
Лекция 1-1
|
А. Полозов
|
62-14
|
06.10
|
Лекция 1-2
|
О. Смирнов
|
147A-16
|
13.10
|
Лекция 1-3
|
О. Смирнов
|
147А-16
|
20.10
|
Лекция 1-4
|
А. Полозов
|
147А-16
|
27.10
|
Лекция 1-5
|
О. Смирнов
|
147А-16
|
3.11
|
Лекция 1-6
|
Д. Кордубан
|
147А-16
|
10.11
|
Лекция 1-7
|
Д. Кордубан
|
147А-16
|
17.11
|
Лаба 1
|
А. Полозов
|
147А-16
|
24.11
|
Лекция 2-1
|
О. Смирнов
|
147А-16
|
1.12
|
Лекция 2-2
|
А. Полозов
|
147А-16
|
8.12
|
Лекция 2-3
|
О. Смирнов
|
147А-16
|
15.12
|
Лекция 2-4
|
А. Полозов
|
147А-16
|
Конспект лекций
Модуль 1. Анализ алгоритмов
- Обзор курса. Анализ алгоритмов. Сортировка вставкой (Insertion sort) и сортировка слиянием (Merge sort). Бинарный поиск
- Асимптотическая нотация. Анализ рекуррентные соотношений. Основная теорема
- Парадигма «Разделяй и властвуй». Быстрое возведение в степень. Числа Фибоначчи. Алгоритм Евклида
- Стеки и очереди. Пирамидальная сортировка (Heapsort). Очереди с приоритетами. Сортировка Quicksort
- Сортировка за линейное время. Сортировка подсчётом (Counting sort). Поразрядная сортировка (Radix sort)
- Рандомизированные алгоритмы
- Хэширование и хэш-функции. Идеальное хэширование
Модуль 2. Построение алгоритмов
- Динамическое программирование I. Задача поиска наибольшей общей подстроки (LCS), задача о кратчайшем двунаправленном пути, задача о наибольшей возрастающей подпоследовательности (LIS), задача о выдаче сдачи
- Динамическое программирование II. Задача о ранце, задача о покрытии шахматной доски
- Двоичные поисковые деревья. Обход дерева и варианты записи дерева. Связь с Quicksort
- Амортизационный анализ. Реализация динамических таблиц (Vector) и cистемы непересекающихся множеств (Disjoint-set)
Задачи
- Модуль 1
- Модуль 2
Лабораторные работы
- Модуль 1
- Модуль 2
Экзамен
- TBA