[Специалист] Алгоритмы. Олимпиадное программирование (Михаил Калимулин)

Вы узнаете, что такое олимпиадное программирование, и в чем заключаются особенности автоматической проверки алгоритмов. Вы познакомитесь с тестирующей системой Ejudge, в которой проходят все крупнейшие соревнования по спортивному программированию. Вы сможете на лету решать такие задачи, как разложение числа на цифры, на простые множители, делимость, арифметика остатков. Вы освоите классические алгоритмы и хитрые трюки для решения задач на обработку последовательностей, изучите различные методы сортировки, в том числе использующие тонкие

По окончании курса Вы будете уметь:

Легко решать задачи обработки матриц: линейный поиск, переворот, максимумы и минимумы.
Приступите к основам высшего пилотажа в программировании – алгоритмам обработки графов, стеков и очередей.
Полученных знаний и навыков Вам хватит, чтобы начать выступать на олимпиадах по программированию.

Модуль 1. Занятие №1. Знакомство
Алгоритмы
Тестирующая система
Модуль 2. Занятие №2. Типы данных и отладка
Типы данных в Java
Примитивные типы
Объекты
Классы-обертки
BigInteger и BigDecimal
Отладка
Модуль 3. Занятие №3. Решение задач из области арифметики
Проверка на четность
Немного теории
Цифры числа
Получение цифр числа
Проверка на простоту
Сумма делителей
Количество делителей
Разложение на простые множители
Модуль 4. Занятие №4. НОД(GCD) и НОК(LCM)
Немного теории
Немного о задачах
Модуль 5. Занятие №5. Однопроходные алгоритмы
Чтение
Сумма элементов
Максимум из всех
Максимум из четных
Второй максимум
Немного о задачах
Чтение больших объемов данных
Пример использования класса
StreamTokenizer для быстрого чтения последовательности чисел
Модуль 6. Занятие №6. Массивы
Создание массива
Ввод (считывание) массива из N элементов
Вывод всех элементов массива
Поиск максимума
Поиск индекса максимального
Поиск индекса заданного числа в массиве
Вывод массива в обратном порядке
Косвенная адресация
Модуль 7. Занятие №7. Сортировка массива
Сортировка выбором (метод минимума)
Немного теории
Метод сортировки обменами (метод пузырька)
Модуль 8. Занятие №8. Символы и строки в Java
Символы
Класс String
Создание строки
Чтение строки
Длина строки
Сравнение строк
Добавление к строке
Преобразование различных типов в строку и обратно
Извлечение символа и подстроки
Поиск в строке
Функции замены
Разворот строки
Модуль 9. Занятие №9. Двумерные массивы
Создание и «стандартное» чтение
Вывод массива в виде таблицы
Cумма всех элементов
Сумма элементов главной диагонали
Неровные массивы
Модуль 10. Занятие №10. Графы I. Определения, хранение
Немного теории
Основные понятия
Деревья
Способы хранения графов
Способ №0. Иногда граф можно вообще не хранить специальным образом
Способ №1. Матрица смежности
Способ №2. Список ребер
Способ №3. Списки смежности
Модуль 11. Занятие №11. Стек и очередь
Стек (Stack)
Очередь (Queue)
Модуль 12. Занятие №12. Графы II. Поиск в ширину
BFS (Breadth-first search)
BFS в графе, заданном матрицей смежности G
Применения алгоритма поиска в ширину
Поиск кратчайших путей из данной
Немного теории
Поиск компонент связности