Тема 1. Целочисленная арифметика.
Арифметические операции (умножение, деление, остатки, сложение, вычитание). Битовые
операции и работа с отдельными битами.
Тема 2. Условный оператор.
Ветвления, конструкции if
-
else и if else
-
if, выбор из многих вариантов.
Тема 3. Вещественная арифметика.
Арифметические операции с вещественными числами. Точность.
Округления.
Тема 4. Операторы цикла.
Операторы
цикла
for, while, do
…
while.
Операторы break и continue.
Тема 5. Массивы.
Одномерные и многомерные массивы. Динамическое выделение памяти. Ввод и вывод
массивов.
Тема 6. Процедуры и функции.
Локальные и глобальные переменные. Передача параметров по значению и по ссылке.
Рекурсия.
Тема 7. Работа со строками.
Стандартные функции для обработки строк. Конечные автоматы.
Тема 8. Арифметические алгоритмы.
НОД и НОК, системы счисления, длинная арифметика, простые числа и разложение на
делители, остатки, быстрое возведение в степень.
Тема 9. Алгоритмы поиска.
Линейный поиск, двоичный поиск, поиск подстроки в строке, два указателя.
Тема 10. Алгоритмы сортировки.
Сортировка подсчетом, сортировка выбором, сортировка пузырьком, применение
встроенных сортировок.
Тема 11. Перебор и методы его оптимизации.
Полный перебор, связь с задачами о системе счисления.
Рекурсивный перебор и методы его оптимизации.
Тема 12. Динамическое программирование.
Рекуррентные
последовательности, простое динамическое программирование.
Динамическое программирование с несколькими параметрами, по подстрокам, по
подмножествам, по профилю, по поддеревьям, на ациклических графах.
Тема 13. Жадный алгоритм.
Области применения и стандартные задачи, решаемые жадным алгоритмом.
Доказательство применимости.
Тема 14. Алгоритмы на невзвешенных графах.
Обход в ширину и глубину и их применение. Топологическая сортировка, компоненты
связности, поиск циклов, проверка на двудольность, мосты, точки сочленения, конденсация.
Паросочетания. Эйлеров цикл.
Тема 15. Алгоритмы на взвешенных графах.
Поиск кратчайших путей: алгоритмы Дейкстры, Беллмана
-
Форда, Флойда. Минимальные
остовные деревья. Потоки.
Тема 16. Вычислительная геометрия.
Скалярное и косое произведение. Площади. Взаимное расположение фигур на плоскости и
в пространстве. Выпуклые оболочки.
Тема 17. Линейные структуры данных.
Стек, дек, очередь. Решение задачи о проверки правильной скобочной последовательности,
минимум в окне, обратная польская нотация.
Тема 18. Деревья.
Бинарное дерево поиска. Сбалансированность бинарных деревьев поиска. Корневые
деревья, система непересекающихся множеств. Дерево отрезков, решение задач RMQ и RSQ.
Куча. Дерево Фенвика. Декартово дерево.
Тема 19. Хеши и хеш
-
таблицы.
Хеш
-
функции, остатки. Хеш
-
таблицы. Решение задач о массовом поиске подстрок с
помощью суффиксного массива. Бинарный поиск с хешами префиксов.
Тема 20. Разреженные таблицы.
Sparse table. Использование разреженных таблиц для решения задачи поиска наименьшего
общего предка в дереве.
Тема 21. Эвристические методы и стандартные идеи.
Метод «Разделяй и властвуй», метод Монте
-
Карло, meet
-in-themiddle.
РЕКОМЕНДУЕМЫЕ ИСТОЧНИКИ
Основные источники
Шень
А., Программирование: теоремы и задачи –
М.: Издательство МЦНМО, 2017.
Кормен, Т., Лейзерсон, Ч., Ривест, Р., Штайн, К. Алгоритмы: построение и анализ. –
М.:
Вильямс, 2005.
http://e-maxx.ru/
Дополнительные источники
Онлайн
-
курс «Введение в программирование (C++)», М.С. Густокашин –
https://stepik.org/course/363
Онлайн
-
курс «Основы программирования на Python», М.С. Густокашин –
https://online.hse.ru/showcase/it/python-osnovy-programmirovaniya
Тренировки по алгоритмам от Яндекса
-
https://yandex.ru/yaintern/algorithm-training_1