Прочитан осенью 2008-го - весной 2009-го года в GL-Клубе компании Global Logic, Украина.
Программа базируется на курсе «6.046: Introduction to Algorithms» Массачусетского технологического института и на одноимённом учебнике Т. Кормена, Ч Лейзерсона, Р. Ривеста и К. Штайна.
Лекторы:
Рассылка курса: http://groups.google.com/group/kiev-clrs
Конспект лекций
Раздел 1. Анализ алгоритмов
- Анализ алгоритмов. Сортировка вставкой и сортировка слиянием
- Корректность алгоритма. Схема Горнера
- Асимптотическая нотация. Рекуррентные соотношения
- Парадигма «Разделяй и властвуй»: алгоритм Штрассена, алгоритм Фибоначчи, умножение матриц
- Сортировка Quicksort. Рандомизированные алгоритмы
- Пирамидальная сортировка. Очереди с приоритетами
- Сортировка за линейное время: нижние оценки, сортировка подсчётом, поразрядная сортировка
- Медианы и порядковые статистики
- Применение медиан. Блочная сортировка
Раздел 2. Разработка алгоритмов
- Хэширование. Хэш-функции
- Универсальное хэширование. Идеальное хэширование
- Двоичные поисковые деревья. Обход дерева
- Связь поискового дерева и Quicksort. Анализ рандомизированного алгоритма
- Красно-чёрные деревья. Алгоритмы вращения, вставки, удаления
- 2-3 деревья. B-деревья
- Расширение структур данных. Динамические порядковые статистики. Деревья отрезков
- Деревья расстояний
- Списки с пропусками (слоёные списки)
- Амортизационный анализ. Динамические таблицы. Метод потенциалов
- Конкурентный анализ: самоупорядочивающиеся списки
- Конкурентный анализ: задача аренды лыж
- Динамическое программирование. Задача о наибольшей общей подпоследовательности
Раздел 3. Алгоритмы на графах
- Жадные алгоритмы. Минимальные остовные деревья
- Кратчайшие пути: свойства, алгоритм Дейкстры, поиск в ширину
- Кратчайшие пути: алгоритм Беллмана-Форда, линейное программирование, ограничения на разности. Поиск в глубину в графе. Топологическая сортировка
- Кратчайшие пути: все пары вершин, умножение матриц, алгоритм Флойда-Уоршолла, алгоритм Джонсона
Раздел 4. Дополнительные темы
- Параллельные алгоритмы
- Параллельные алгоритмы, часть 2