Олимпиадное программирование, Антти Л., 2018.
Эта книга помогает познакомиться с олимпиадным программированием. Она подробно описывает, как проходят олимпиады, что требуется от участника, в чем их цель, как к ним готовиться. Подробно разобраны базовые темы, трюки и алгоритмы.
Спортивное программирование - это самый перспективный интеллектуальный вид спорта, который можно назвать шахматами будущего. Уже сейчас им увлекаются лучшие умы планеты, и число участников растет год от года. Рост популярности олимпиадного программирования положительно влияет на другие сферы жизнедеятельности человека. Навыки быстрого решения сложнейших задач помогают сегодняшним студентам в будущем эффективно справляться с реальными проблемами человечества.
Издание будет полезно прежде всего студентам, начинающим принимать участие в соревнованиях по программированию.
Соревнования по программированию.
Международная олимпиада по информатике (IOI) - ежегодное соревнование для старшеклассников. От каждой страны допускается команда из четырех человек. Обычно набирается около 300 участников из 80 стран.
IOI проводится в течение двух дней. В каждый день участникам предлагается решить три трудные задачи, на решение отводится пять часов. Задачи разбиты на подзадачи, за каждую из которых начисляются баллы. Хотя участники являются членами команды, соревнуются они самостоятельно.
Участники IOI отбираются на национальных олимпиадах. IOI предшествует множество региональных соревнований, например: Балтийская олимпиада по информатике (BOI), Центрально-Европейская олимпиада по информатике (CEOI) и Азиатско-Тихоокеанская олимпиада по информатике (APOI).
ICPC (Международная студенческая олимпиада по программированию) проводится ежегодно для студентов университетов. В каждой команде три участника; в отличие от IOI, студенты работают вместе, и каждой команде выделяется только один компьютер.
Оглавление.
От автора.
Вступительное слово Алексея Малеева, основателя Moscow Workshops ICPC.
Отзыв Дмитрия Гришина, основателя Mail.Ru Group.
Благодарность от редакции.
Отзыв Нияза Нигматуллина, двукратного чемпиона мира ACM ICPC 2012 и 2013 годов.
Предисловие.
Глава 1. Введение.
1.1. Что такое олимпиадное программирование?.
1.1.1. Соревнования по программированию.
1.1.2. Рекомендации желающим поучаствовать.
1.2. Об этой книге.
1.3. Сборник задач CSES.
1.4. Другие ресурсы.
Глава 2. Техника программирования.
2.1. Языковые средства.
2.1.1. Ввод и вывод.
2.1.2. Работа с числами.
2.1.3. Сокращение кода.
2.2. Рекурсивные алгоритмы.
2.2.1. Порождение подмножеств.
2.2.2. Порождение перестановок.
2.2.3. Перебор с возвратом.
2.3. Поразрядные операции.
2.3.1. Поразрядные операции.
2.3.2. Представление множеств.
Глава 3. Эффективность.
3.1. Временная сложность.
3.1.1. Правила вычисления.
3.1.2. Часто встречающиеся оценки временной сложности.
3.1.3. Оценка эффективности.
3.1.4. Формальные определения.
3.2. Примеры.
3.2.1. Максимальная сумма подмассивов.
3.2.2. Задача о двух ферзях.
Глава 4. Сортировка и поиск.
4.1. Алгоритмы сортировки.
4.1.1. Пузырьковая сортировка.
4.1.2. Сортировка слиянием.
4.1.3. Нижняя граница временной сложности сортировки.
4.1.4. Сортировка подсчетом.
4.1.5. Сортировка на практике.
4.2. Решение задач с применением сортировки.
4.2.1. Алгоритмы заметающей прямой.
4.2.2. Составление расписания.
4.2.3. Работы и сроки исполнения.
4.3. Двоичный поиск.
4.3.1. Реализация поиска.
4.3.2. Нахождение оптимальных решений.
Глава 5. Структуры данных.
5.1. Динамические массивы.
5.1.1. Векторы.
5.1.2. Итераторы и диапазоны.
5.1.3. Другие структуры данных.
5.2. Множества.
5.2.1. Множества и мультимножества.
5.2.2. Отображения.
5.2.3. Очереди с приоритетом.
5.2.4. Множества, основанные на политиках.
5.3. Эксперименты.
5.3.1. Сравнение множества и сортировки.
5.3.2. Сравнение отображения и массива.
5.3.3. Сравнение очереди с приоритетом и мультимножества.
Глава 6. Динамическое программирование.
6.1. Основные понятия.
6.1.1. Когда жадный алгоритм не работает.
6.1.2. Нахождение оптимального решения.
6.1.3. Подсчет решений.
6.2. Другие примеры.
6.2.1. Наибольшая возрастающая подпоследовательность.
6.2.2. Пути на сетке.
6.2.3. Задачи о рюкзаке.
6.2.4. От перестановок к подмножествам.
6.2.5. Подсчет количества замощений.
Глава 7. Алгоритмы на графах.
7.1. Основы теории графов.
7.1.1.Терминология.
7.1.2. Представление графа.
7.2. Обход графа.
7.2.1. Поиск в глубину.
7.2.2. Поиск в ширину.
7.2.3. Применения.
7.3. Кратчайшие пути.
7.3.1. Алгоритм Беллмана–Форда.
7.3.2. Алгоритм Дейкстры.
7.3.3. Алгоритм Флойда–Уоршелла.
7.4. Ориентированные ациклические графы.
7.4.1. Топологическая сортировка.
7.4.2. Динамическое программирование.
7.5. Графы преемников.
7.5.1. Нахождение преемников.
7.5.2. Обнаружение циклов.
7.6. Минимальные остовные деревья.
7.6.1. Алгоритм Краскала.
7.6.2. Система непересекающихся множеств.
7.6.3. Алгоритм Прима.
Глава 8. Избранные вопросы проектирования алгоритмов.
8.1. Алгоритмы с параллельным просмотром разрядов.
8.1.1. Расстояние Хэмминга.
8.1.2. Подсчет подсеток.
8.1.3. Достижимость в графах.
8.2. Амортизационный анализ.
8.2.1. Метод двух указателей.
8.2.2. Ближайшие меньшие элементы.
8.2.3. Минимум в скользящем окне.
8.3. Нахождение минимальных значений.
8.3.1. Троичный поиск.
8.3.2. Выпуклые функции.
8.3.3. Минимизация сумм.
Глава 9. Запросы по диапазону.
9.1. Запросы к статическим массивам.
9.1.1. Запросы о сумме.
9.1.2. Запросы о минимуме.
9.2. Древовидные структуры.
9.2.1. Двоичные индексные деревья.
9.2.2. Деревья отрезков.
9.2.3. Дополнительные приемы.
Глава 10. Алгоритмы на деревьях.
10.1. Базовые понятия.
10.1.1. Обход дерева.
10.1.2. Вычисление диаметра.
10.1.3. Все максимальные пути.
10.2. Запросы к деревьям.
10.2.1. Нахождение предков.
10.2.2. Поддеревья и пути.
10.2.3. Наименьшие общие предки.
10.2.4. Объединение структур данных.
10.3. Более сложные приемы.
10.3.1. Центроидная декомпозиция.
10.3.2. Разновесная декомпозиция.
Глава 11. Математика.
11.1. Теория чисел.
11.1.1. Простые числа и разложение на простые множители.
11.1.2. Решето Эратосфена.
11.1.3. Алгоритм Евклида.
11.1.4. Возведение в степень по модулю.
11.1.5. Теорема Эйлера.
11.1.6. Решение уравнений в целых числах.
11.2. Комбинаторика.
11.2.1. Биномиальные коэффициенты.
11.2.2. Числа Каталана.
11.2.3. Включение-исключение.
11.2.4. Лемма Бёрнсайда.
11.2.5. Теорема Кэли.
11.3. Матрицы.
11.3.1. Операции над матрицами.
11.3.2. Линейные рекуррентные соотношения.
11.3.3. Графы и матрицы.
11.3.4. Метод исключения Гаусса.
11.4. Вероятность.
11.4.1. Операции с событиями.
11.4.2. Случайные величины.
11.4.3. Марковские цепи.
11.4.4. Рандомизированные алгоритмы.
11.5. Теория игр.
11.5.1. Состояния игры.
11.5.2. Игра ним.
11.5.3. Теорема Шпрага–Гранди.
Глава 12. Дополнительные алгоритмы на графах.
12.1. Сильная связность.
12.1.1. Алгоритм Косарайю.
12.1.2. Задача 2-выполнимости.
12.2. Полные пути.
12.2.1. Эйлеровы пути.
12.2.2. Гамильтоновы пути.
12.2.3. Применения.
12.3. Максимальные потоки.
12.3.1. Алгоритм Форда–Фалкерсона.
12.3.2. Непересекающиеся пути.
12.3.3. Максимальные паросочетания.
12.3.4. Покрытие путями.
12.4. Деревья поиска в глубину.
12.4.1. Двусвязность.
12.4.2. Эйлеровы подграфы.
Глава 13. Геометрия.
13.1. Технические средства в геометрии.
13.1.1. Комплексные числа.
13.1.2. Точки и прямые.
13.1.3. Площадь многоугольника.
13.1.4. Метрики.
13.2. Алгоритмы на основе заметающей прямой.
13.2.1. Точки пересечения.
13.2.2. Задача о ближайшей паре точек.
13.2.3. Задача о выпуклой оболочке.
Глава 14. Алгоритмы работы со строками.
14.1. Базовые методы.
14.1.1. Префиксное дерево.
14.1.2. Динамическое программирование.
14.2. Хеширование строк.
14.2.1. Полиномиальное хеширование.
14.2.2. Применения.
14.2.3. Коллизии и параметры.
14.3. Z-алгоритм.
14.3.1. Построение Z-массива.
14.3.2. Применения.
14.4. Суффиксные массивы.
14.4.1. Метод удвоения префикса.
14.4.2. Поиск образцов.
14.4.3. LCP-массивы.
Глава 15. Дополнительные темы.
15.1. Квадратный корень в алгоритмах.
15.1.1. Структуры данных.
15.1.2. Подалгоритмы.
15.1.3. Целые разбиения.
15.1.4. Алгоритм Мо.
15.2. И снова о деревьях отрезков.
15.2.1. Ленивое распространение.
15.2.2. Динамические деревья.
15.2.3. Структуры данных в вершинах.
15.2.4. Двумерные деревья.
15.3. Дучи.
15.3.1. Разбиение и слияние.
15.3.2. Реализация.
15.3.3. Дополнительные методы.
15.4. Оптимизация динамического программирования.
15.4.1. Трюк с выпуклой оболочкой.
15.4.2. Оптимизация методом «разделяй и властвуй».
15.4.3. Оптимизация Кнута.
15.5. Разное.
15.5.1. Встреча в середине.
15.5.2. Подсчет подмножеств.
15.5.3. Параллельный двоичный поиск.
15.5.4. Динамическая связность.
Приложение. Сведения из математики.
Формулы сумм.
Множества.
Математическая логика.
Функции.
Логарифмы.
Системы счисления.
Библиография.
Предметный указатель.
Купить .
По кнопкам выше и ниже «Купить бумажную книгу» и по ссылке «Купить» можно купить эту книгу с доставкой по всей России и похожие книги по самой лучшей цене в бумажном виде на сайтах официальных интернет магазинов Лабиринт, Озон, Буквоед, Читай-город, Литрес, My-shop, Book24, Books.ru.
По кнопке «Купить и скачать электронную книгу» можно купить эту книгу в электронном виде в официальном интернет магазине «ЛитРес», и потом ее скачать на сайте Литреса.
По кнопке «Найти похожие материалы на других сайтах» можно найти похожие материалы на других сайтах.
On the buttons above and below you can buy the book in official online stores Labirint, Ozon and others. Also you can search related and similar materials on other sites.
Теги: учебник по программированию :: программирование :: Антти
Смотрите также учебники, книги и учебные материалы:
- Тестирование и отладка программ для профессионалов будущих и настоящих, Плаксин М.А., 2013
- Программная инженерия сложных заказных программных продуктов, Липаев В.В., 2014
- Программирование в интернете, Турганбай К.Е., 2016
- Перспективные языки веб-разработки, Богданов М.Р., 2016
- Карьера программиста, Лакман М.Г., 2020
- Алгоритмы и программы, Решение олимпиадных задач, Порублев И.Н., Ставровский А.Б., 2007
- Пионеры программирования, Диалоги с создателями наиболее популярных языков программирования, Бьянкуцци Ф., Уорден Ш., 2011
- Алгоритмы для задачи коммивояжёра, Куликов А., 2012