Алгоритмы и структуры данных
Цели и задачи дисциплины
В результате изучения дисциплины слушатели должны познакомиться с базовыми структурами данных и алгоритмами.
В результате изучения дисциплины слушатели должны знать
- базовые структуры данных,
- алгоритмы работы изученных структур,
- алгоритмы, использующие базовые структуры данных,
- выбирать в соответствии с задачей алгоритм и структуру данных,
- реализовывать базовые структуры данных,
- реализовывать алгоритмы с использованием базовых структур данных,
- проводить анализ сложности алгоритма.
Содержание разделов дисциплины (предварительный вариант)
- Анализ сложности алгоритмов. Асимптотические оценки. O-нотация. Анализ рекурсивных алгоритмов, решение рекуррентных соотношений. Общие методы посторения алгоритмов (жадные алгоритмы, алгоритмы типа “разделяй и властвуй”, рекурсивные алгоритмы, вероятностные алгоритмы).
- Базовые структуры данных. Массив, запись. Списки. Стек, очередь, дек. Вектор.
- Базовые алгоритмы поиска. Линейный поиск. Двоичный поиск.
- Алгоритмы сортировки. Квадратичные сортировки. Сортировка кучей. Сортировка слиянием. Быстрая сортировка. Сортировки за линейное время.
- Более сложные структуры данных. Приоритетная очередь, реализация с использованием кучи. Дерево поиска. АВЛ-дерево. B-деревья. Хеш-таблица. Система непересекающихся множеств.
- Динамическое программирование. Задача о наибольшей общей подпоследовательности, задача о наибольшей возрастающей подпоследовательности.
- Базовые алгоритмы на графах. Понятие графа. Представление графов в программе. Понятия пути, связности. Обход в ширину. Обход в глубину и его применения. Топологическая сортировка. Декомпозиция графа. Алгоритм Беллмана-Форда. Алгоритм Дейкстры. Алгоритм Флойда. Поиск минимального остовного дерева. Кратчайшее дерево путей в ориентированном графе.
- Алгоритмы над строками. Поиск подстроки. Алгоритм Кнута-Морриса-Пратта. Понятие конечного автомата. Автомат для поиска подстроки в строке. Регулярные выражения.
- Алгоритмы сжатия. Префиксные коды. Алгоритм Хаффмана. Арифметическое кодирование. Алгоритмы на базе преобразования Лемпеля-Зива.
- Алгоритмы комбинаторной оптимизации в сетях. Понятие потока в сети. Алгоритм Форда-Фалкерсона. Задача о максимальном паросочетании в двудольном графе. Задача о назначениях. Венгерский алгоритм.
- Алгоритмы вычислительной геометрии. Базовые геометрические объекты. Базовые геометрические алгоритмы. Пересечение прямых, лучей, отрезков, окружностей. Построение прямой, окружности по заданным точкам. Площадь многоугольника. Формула трапеций. Формула треугольников. Выпуклая оболочка. Алгоритм Грэхема. Алгоритм Джарвиса. Оптимизационные задачи вычислительной геометрии. Пара ближайших точек. Пара наиболее удаленных точек.
- Криптографические алгоритмы. Постановка задачи шифрования. Подстановочный и перестановочный шифры. Шифры с закрытым ключом. Шифры с открытым ключом. Шифр RSA.
Рекомендуемая литература
- Основная литература
- Вирт Н. Алгоритмы и структуры данных — СПб.: Невский Диалект, 2001.
- Кормен. Т., Лейзерсон Ч., Ривест Р. Алгоритмы: построение и анализ. М.: МЦНМО, 2000.
- Ахо А., Хопкрофт Дж., Ульман Дж. Структуры данных и алгоритмы. М.: Издательский дом Вильямс, 2000.
- Гасфилд Д. Строки, деревья и последовательности в алгоритмах. Информатика и вычислительная биология. СПб.: Невский Диалект; БХВ-Петербург, 2003.
- Дополнительная литература
- Асанов М.О., Баранский В.А., Расин В.В. Дискретная математика: графы, матроиды алгоритмы. Ижевск: НИЦ Регулярная и хаотическая динамика, 2001