Здесь представлен план, порядок изучаемых тем, который поможет
вам научиться решать олимпиадные задачи или найти пробелы в своих
знаниях.
Раздел 1. Математические основы
программирования
Раздел 2. Техника программирования
1. Основы
языка программирования (Паскаль, Си)
Переменные и простейшие типы данных,
размеры типов. Линейные программы. Условные операторы. Циклы. Процедуры и
функции. Сложные типы данных (массивы, строки, записи, указатели,
файлы).
2. Массивы
Одномерные массивы. Двумерные массивы (матрицы).
Многомерные массивы.
3. Строки. Элементы лексического и синтаксического
разбора
Операции над строками. Лексемы, подсчет лексем различных типов.
Выделение чисел из строки.
4. Работа с файлами
Чтение и запись в
текстовый файл. Преобразование полученных из файла данных в удобную структуру.
Работа с типизированными файлами. Нетипизированные файлы. Буферизация
ввода.
5. Рекурсия
Математические функции, задаваемые рекурсивно.
Примеры рекурсивных подпрограмм. Проблема остановки рекурсии. Замена рекурсии
итерацией.
6. "Длинная" арифметика
Хранения в программе чисел,
которые не вмещаются в стандартные типы. Арифметические операции над "длинными"
числами. "Длинные" числа с десятичной частью. Извлечение корня с заданной
точностью.
7. Хранение информации в динамической памяти.
Хранение
набора данных в линейных списках. Вставка в список, удаление из списка, поиск
элемента в списке. Двусвязные списки. Понятия структур данных стека, кольца,
очереди, дека; реализация их с помощью динамической памяти. Двоичные деревья.
Деревья с неопределенным числом потомков. Хранение больших
массивов.
Раздел 3. Алгоритмы, методы и принципы решения
задач
1. Понятие сложности алгоритма.
Определение сложности. Классы
задач P и NP. NP-полные задачи.
2. Алгоритмы поиска и
сортировки
Поиск элемента в неупорядоченном массиве. Двоичный поиск по
ключу в упорядоченном массиве (дихотомия). Поиск методом Фибоначчи. Поиск в
упорядоченном n-мерном массиве. Поиск k-го по величине элемента массива. Простые
методы сортировки ("пузырек", "выборка", "вставка", "подсчет"). Быстрые методы
("быстрая", "слиянием", "пирамидальная"), балансировка двоичных деревьев.
Сортировка методом черпака.
3. Решение задач методом перебора
вариантов
Применение рекурсии для перебора. Генерация сочетаний,
размещений, перестановок и булеана множества. Полный перебор. Отсечение
вариантов (эвристики). Метод ветвей и границ.
4. Вычислительная геометрия
и численные методы
Длина отрезка. Уравнение прямой. Скалярное и векторное
произведение. Точка пересечения отрезков. Принадлежность точки фигуре на
плоскости (например: треугольнику). Площадь выпуклого многоугольника. Выпуклая
оболочка множества точек: алгоритмы Грэхема, Джарвиса, "разделяй и властвуй".
Ближайшая пара точек. Метод Гаусса для решения системы линейных уравнений.
Нахождение решения уравнения.
5. Принцип динамического
программирования
Понятие, применимость. Сравнение с перебором.
6.
Жадные алгоритмы
Понятие, применимость. Сравнение с перебором и
динамическим программированием.
7. Теория графов. Алгоритмы на
графах
Понятие графа. Определения теории графов. Структуры данных для
представления графа в программе. Алгоритмы обхода графа (поиски в ширину и
глубину). Лабиринт (метод волны). Эйлеров цикл. Кратчайший путь во взвешенном
графе (алгоритмы Дейкстры и Минти). Транзитивное замыкание графа (алгоритм
Флойда-Уоршилла). Минимальное остовное дерево (алгоритмы Прима и Краскала).
Топологическая сортировка графа. Потоки в сетях (алгоритм Форда-Фалкерсона).
Паросочетания в двудольном графе (метод удлиняющей цепочки, потоковое решение).
Задача о назначениях, назначения на узкое место (венгерский алгоритм). Игры на
графах. Раскраска графа. Уложение графа на плоскости. Сильная связность и
двусвязность графа. Изоморфизм графов. K-клика. Гамильтонов цикл.
8.
Лексический и синтаксический анализ
Задача "Калькулятор". Синтаксические
диаграммы. Формы Бэкуса-Наура. Стековая и рекурсивная модель синтаксического
разбора. Конечные автоматы. Грамматики.
9. Задачи с
"изюминками"
Раздел 4. Олимпиады по информатике
1. Правила
проведения олимпиад по программированию
2. Типичные ошибки и отладка
программ
3. Приемы олимпиадчика
По-моему, наибольшую ценность
представляют разделы 2 и 3. Если с изучением языка программирования у вас не
должно возникнуть сложностей (огромное количество книг по этой теме), то вот с
алгоритмами придется посложнее. Книг по этой теме тоже немало, но они, чаще
всего, слишком перегружены теорией, а на олимпиадах нужна только практика. Из
электронных источников по алгоритмам могу посоветовать книгу С.М.Окулова и сайт algolist.manual.ru, который менее нацелен
на изучение "олимпиадной информатики", чем книга Окулова, но содержит большое
количество алгоритмов, которых нет в книги, но которые неплохо было бы
знать.
Привыкайте работать в режиме: написание + отладка на Borland
Pascal/Borland C++, а компиляция (с предварительным изменением констант) на Free
Pascal/GNU C. Новые 32-битные компиляторы не имеют жесткого ограничения в памяти
и работают существенно быстрее (особенно заметна разница в скорости выполнения
16 и 32-битных программ на P4). Такая хитрая тактика объясняется отсутствием
приличного отладчика в новых платформах и их практически полной совместимостью с
компиляторами фирмы Borland (в FP не забывайте делать close для выходного
файла).
Вот пожалуй и все, план предоставлен Шамилем Ягияевым за что большое ему
спасибо! Кстати вы можете посетить отличный сайт uoi.kiev.ua, одним из разработчиков которого
Шамиль и является. Этот сайт содержит материалы Украинских олимпиад по
информатике, сборов и т.п.
12.08.02
Комментарии: Михаил
Густокашин
msg@list.ru
g6prog.narod.ru