Факультатив «Спортивное программирование и Алгоритмы»
Цели:
Подготовка абитуриентов и студентов ХАИ к различным соревнованиям и олимпиадам по программированию, повышение уровня практической алгоритмической подготовки молодых программистов, преподавание фундаментальной теоретической подготовки в алгоритмах на уровне лучших вузов США и Европы.
Список потенциальных соревнований:
- Международная студенческая олимпиада «ACM ICPC», http://icpc.baylor.edu
- Международная открытая студенческая олимпиада по программированию им. С.А. Лебедева и В.М. Глушкова «KPI-Open», http://kpi-open.org
- Открытый Кубок имени Е.В. Панкратьева по программированию, http://www.opencup.ru
- Зимняя школа по программированию, ХНУРЭ, http://wschool.kharkov.ua
- Марафоны и другие соревнования на TopCoder, http://topcoder.com/tc
- Индивидуальные турниры как "Google Code Jam", http://code.google.com/codejam/
- Открытый чемпионат Харькова по спортивному программированию, http://khcup.qbit.org.ua
Формат:
- Еженедельная лекционная встреча с разбором тематического домашнего задания. Лекции могут чередоваться с семинарами, на которых студенты представляют свои решения (реализации) и результаты.
- Домашние задания могут включать решение алгоритмических задач, математические доказательства, поиск соответствующей литературы и программирование заданий с «online judge»-ресурсов как http://acm.timus.ru, http://uva.onlinejudge.org и других.
- Практическое соревнование раз в две недели. Студенты организовываются в группы до 3-х человек и соревнуются на базе архивов как http://codeforces.com, https://icpcarchive.ecs.baylor.edu и других.
- Ежемесячный индивидуальный проект в виде поиска интересной задачи с олимпиадных архивов и сборников решений, ее презентация перед классом, включающая анализ и сравнение вариантов решения.
Руководители:
- Старов Алексей Александрович – онлайн руководитель (подготовка лекций и тренировочных материалов, разбор решений, ежемесячные удаленные презентации).
- Русин Дмитрий Олегович – онсайт руководитель (проведение встреч на базе ХАИ, организация учебного процесса, помощь в лекциях и решениях).
План рассматриваемых тем:
- Вступление в спортивное программирование, примеры различных олимпиадных задач, связь алгоритмов с практическим программированием
- Классификация олимпиадных задач с примерами, необходимые разделы математики для повторения – 2 занятия
- Понятие сложности алгоритмов, O-нотация и другие.
- Алгебра и теория чисел (от Решета Эратосфена до Длинной арифметики) – минимум 3 лекции
- Парадигма «Разделяй-и-властвуй», практическое применение – минимум 3 лекции
- Простые алгоритмы на Графах – минимум 2 лекции
- Приложение алгоритмов на Графах – минимум 2 занятия
- Потоки в теории Графов и олимпиадных задачах
- Примеры сложных алгоритмов на Графах (RMQ, Венгерский алгоритм и другие)
- Задача поиска с точки зрения Искусственного интеллекта и теории Игр – минимум 2 лекции
- Жадные алгоритмы
- Парадигма «Динамическое программирование» - минимум 3 занятия
- Вступление в комбинаторику
- Основы вычислительной геометрии– минимум 2 занятия
- Более сложные алгоритмические задачи
- Численные методы
- Строки и последовательности – минимум 2 занятия
- Умные структуры данных – минимум 3 занятия
- NP-полнота и как с этим бороться
- Обзор программистских трюков
Данные темы будут рассматриваться в пересечении, а полный цикл – итеративно повторятся углубляясь в теорию и сложность. Очень важно, что бы у начинающего олимпиадника знания и опыт развивались параллельно в каждом направлении. Список тем не финальный (от некоторых в течении года придется отказаться, а другие добавить, некоторым сократить часы и наоборот).
Литература:
- Алгоритмы. Построение и анализ – Кормен Т., Лейзерсон Ч., Ривест Р.
- Алготимы на C++ / Алгоритмы на Java – Седжвик Р.
- Олимпиадные задачи по программированию / Алгоритмы. Руководство по разработке – Скиена С.
- Алгоритмы и программы. Решение олимпиадных задач – Порублев И.Н., Cтавровский А.Б.
- Материалы Зимней школы по программированию ХНУРЭ.
- Алгоритмы ХАИ http://ostarov.github.io/Algorithms_KhAI/
Данный список книг является только базовым и будет значительно расширен в ходе занятий.