Прочитан осенью 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