Теория алгоритмов

А.В.Михалев, А.Павлов


Аннотация курса: В данном курсе мы изучим алгоритмы поиска и сортировки, рекурсивные алгоритмы, алгоритмы на графах, рассмотрим алгоритмы хеширования и криптографические алгоритмы, методы криптоанализа, изучим динамическое и линейное программирование, изучим целый ряд других тем.


Тематическое содержание курса
  1. Обзор курса. Список литературы. Примеры алгоритмов: (классический) алгоритм Евклида, рекурсивный и расширенный алгоритм Евклида, вычисление чисел Фибоначчи (рекурсивный алгоритм и подход динамического программирования), решето Эратосфена, фракталы и алгоритмы построения фракталов.
  2. Границы рационального познания: теоремы Гёделя, гипотеза Кантора, результаты Пола Дж. Коэна. Сотрудничество человека и машины: теорема о четырех красках, исследования по гипотезе Римана.
  3. Анализ алгоритмов: вычислимые функции, рекурсивные функции. Временная и пространственная сложность алгоритма. Классы P, PSPACE, NP. Классические вычислительные схемы. Дизъюнктивная нормальная форма. Обратимые вентили.
  4. Задачи сортировки: сортировка вставками, сортировка выбором, рекурсивная сортировка слиянием, рандомизированная сортировка, быстрые сортировки. Двоичный поиск. Алгоритмы сложения, вычитания, умножения столбиком, рекурсивного умножения, деления.
  5. Рекурсивные алгоритмы: теорема об оценке сложности рекурсивного алгоритма. Рекурсивное умножение матриц методом Штрассена. Быстрое преобразование Фурье. Рекурсивное умножение многочленов. Решение задачи интерполяции с помощью интерполяционного многочлена Лагранжа и методом быстрого преобразования Фурье.
  6. Алгоритмы на графах. Практические задачи на теорию графов: задача о кенигсбергских мостах, задача Эйлера о колодцах, гамильтонов цикл на додекаэдре, задача о коммивояжере, задача о четырех красках, поиск пути из лабиринта замка Хемптон Корт. Алгоритмы выхода из лабиринта.
  7. Алгоритмы на графах. Представление графа матрицей смежности и списками смежности.Обход графа в глубину и его применения.Обход графа в ширину.
  8. Алгоритмы на графах, жадные алгоритмы. Поиск кратчайшего пути в графе (алгоритм Дейкстры). Поиск критического (максимального) пути в графе. Остовные деревья. Алгоритм Прима. Покрывающие деревья: пример жадного алгоритма. Реализация алгоритма Крускала. Дерево Штейнера. Покрытие множествами.
  9. Хеш-функции. Хеширование. Коллизии первого и второго рода. Устойчивость хеш-функций. Атаки на хеш-функции. Сигнатурный антивирусный сканнер.
  10. Хеш-функции. Алгоритм MD5. Алгоритм SHA-3.
  11. Криптографические алгоритмы. Введение в криптологию. Симметричное шифрование: стандарты DES и TripleDES. Конечные поля. Стандарт AES.
  12. Криптографические алгоритмы с открытым ключом. Мультипликативные функции. Теория сравнений. Арифметика сравнений: алгоритмы сложения, умножения и возведения в степень по модулю. Деление по модулю с помощью расширенного алгоритма Евклида. Протокол шифрования с открытым ключом RSA.
  13. Распределение простых чисел: теоремы Чебышёва. Проверка чисел на простоту. Генерация простых чисел.
  14. Методы криптоанализа. Атака методом грубой силы. Атака дней рождения. Дифференциальный криптоанализ. Линейный криптоанализ. Метод бумеранга.
  15. Динамическое программирование. Вычисление биномиальных коэффициентов. Кратчайшие пути в ориентированных ациклических графах. Поиск наибольшей строго возрастающей подпоследовательности. Оптимальная расстановка скобок при вычислении произведения не менее трех матриц. Оптимальная триангуляция многоугольника. Задача линейного разбиения.
  16. Линейное программирование. Постановка задачи линейного программирования. Пример задач линейного программирования: максимизация прибыли, планирование производства. Симплекс-метод. Транспортная задача.
  17. Сдача практикума: реализация криптографического алгоритма.

Типовые контрольные задания

Перечень учебной литературы