- •От автора
- •Рекомендации по уровням подготовленности
- •Нулевой уровень
- •Начальный уровень
- •Средний уровень
- •Высокий уровень
- •Алгоритмы и структуры данных
- •Разные вопросы программирования
- •Дискретная математика
- •Комбинаторная теория
- •Теория графов
- •Теория множеств
- •Алгебра и теория чисел
- •Диофантовы уравнения
- •Математическая логика и теория алгоритмов
- •Математическое программирование
- •Геометрия
- •Теория вероятностей и математическая статистика
- •Теория игр
- •Разные вопросы математики
- •Занимательная математика
- •Олимпиадные задачи по программированию
- •Олимпиадные задачи по математике
- •Разное
- •Сетевые ресурсы
- •Об олимпиадах
- •Новости и расписания
- •Обучающие материалы
- •Порталы и контестеры
- •Интернет Университет Информационных Технологий
БИБЛИОГРАФИЯ
(в редакции от 20.07.2013)
© 2010 – 2013, Симоненко Евгений А. <easimonenko@mail.ru>
ОТ АВТОРА
Библиографическая подборка разделена на несколько частей:
–книги по языкам программирования C++ и C# (поддержка этого языка недавно появилась в некоторых соревнованиях по программированию);
–книги по алгоритмам и структурам данных;
–книги по математике (в первую очередь по дискретной математике);
–сборники задач;
–разное (для общего развития);
–ссылки на ресурсы Интернет.
Книги, выделенные полужирным курсивом, рекомендуются особо, что нисколько не должно умалять ценность остальной приведённой здесь литературы. Сборники задач рекомендуются все.
РЕКОМЕНДАЦИИ ПО УРОВНЯМ ПОДГОТОВЛЕННОСТИ
Ниже я попытаюсь дать рекомендации о выборе литературы для чтения и использования в подготовке в зависимости от уровня подготовленности. Читатель волен сам решать на каком уровне он находится, но при этом я рекомендую сначала просмотреть рекомендации для более низких уровней, чтобы не упустить что-то важное и интересное.
Нулевой уровень
В первую очередь рекомендуется взяться за освоение одного из языков программирования, например, C или C++. Но при этом освоение программирования не должно сводиться к ознакомлению с операторами языка программирования, нужно много времени потратить на отработку техники программирования. Поэтому я настоятельно рекомендую воспользоваться онлайн-задачниками [E-Olimp] и [MCCME]. Найдите на этих порталах задачи для начинающих и прорешайте их все. К сожалению мне не известны книги для начинающих программировать на языке C или C++, а вот для будущих паскалистов (хотя и не только для них) могу порекомендовать [Окулов: программирование], только будьте осторожны – в книге много опечаток. Параллельно можно почитывать любые книжки по математике, например, книжки для школьников на нешкольные темы. Наконец, каждый начинающий олимпиадник должен прочитать онлайн-статьи:
«Как стать чемпионом Урала по программированию», «Как стать чемпионом Мира по программированию или разбор полётов» и «Блог Фёдора Царёва». Кроме того, чтобы постоянно находиться в курсе олимпиадных событий регулярно посещайте олимпиадные сайты, на сегодня самая активная «жизнь» на [CodeForces]. По мере освоения техники программирования начните принимать участие в онлайн-соревнованиях для школьников, которые регулярно проводит портал
[E-Olimp].
Начальный уровень
На этом уровне рекомендуется осваивать стандартную библиотеку выбранного языка программирования, например, STL языка C++. Здесь можно порекомендовать [Керниган, Пайк],
2 Симоненко Е.А. Олимпиадная подготовка по программированию. Библиография
[Липпман], [Страуструп]. Следует начать знакомиться с основными алгоритмами и структурами данных, например, по книгам [Окулов: программирование], [Шень]. Начните также знакомиться с дискретной математикой. Очень хорошее введение в предмет даётся в [Грэхем, Кнут, Паташник], но в этой книге рассматривается только часть вопросов, поэтому потребуется привлечение другой
литературы по предмету, например, по |
комбинаторике [Виленкин], по |
теории графов |
[Оре: Теория графов], в целом хорошее и |
краткое введение в предмет в |
[Кузьмин] и в |
[Краснов и др.]. Можно также почитать [Пойа: Математическое открытие]. Не стоит на этом уровне сильно углубляться в алгоритмы и дискретную математику, лучше отточить навыки программирования и использования простых и основных алгоритмов, методов и техник. Решайте задачи по [Брудно, Каплан]. Начните принимать участие в онлайн-соревнованиях проводимых на
[E-Olimp] и [CodeForces].
Средний уровень
Это уровень серьёзной подготовки. Решение простых задач и чтение литературы типа «введение в предмет» уже ничего не даёт. Здесь следует штудировать серьёзную литературу как по языкам программирования, так и литературу по алгоритмам и дискретной математике. Неплохо также улучшать свои знания и в других областях математики, таких как геометрия, теория вероятностей и математическая статистика, математическое программирование. По алгоритмам можно порекомендовать: [Ахо, Хопкрофт, Ульман], [Кормен и др.], [Круз], [Левитин], [Макконнелл], [Окулов: алгоритмы], [Окулов: строки], [Седжвик], [Скиена: алгоритмы], [Уайс]. По дискретной математике: [Окулов: дискретная математика], [Оре: теория графов], [Хаггарти], [Харари]. По математическому программированию: [Беллманн], [Беллман, Дрейфус], [Вентцель: динамическое программирование], [Сигал, Иванова]. По геометрии: [Препарата, Шеймос]. Решайте задачи сначала по [Порублев, Ставровский], потом по [Меньшиков], привлекайте другие задачники, в том числе онлайн. Не пропускайте серьёзных соревнований таких как [CodeForces], Yandex.Algorithm, Russian Code Cup и другие. Так как многие, попав на этот уровень, становятся помощниками тренеров и преподавателей, капитанами команд и даже тренерами и руководителями команд, то не плохо познакомиться с методической литературой: [Пойа: как решать задачу], [Демарко, Листер], [Креншоу].
Высокий уровень
Имеет ли право что-то рекомендовать человек, который на таком уровне не находится? …
C++
1.Дейтел Х. М., Дейтел П. Дж. Как программировать на C++. – 5е изд. – М.: Бином-Пресс, 2008. – 1456 с.
2.Джосьютис Н. C++. Стандартная библиотека. Для профессионалов. – СПб.: Питер, 2004. – 730 с.
3.Дьюхерст С. C++. Священные знания. – Пер. с англ. – СПб.: Символ-Плюс, 2007. – 240 с.
4.Касперски К. Техника оптимизации программ. Эффективное использование памяти. - СПб.: БХВ-Петербург, 2003. - 464 с.: ил.
5.[Керниган, Пайк] Керниган Б., Пайк Р. Практика программирования. – Пер. с англ. – М.: Вильямс, 2004. – 288 с.
6.Леен Аммерааль. STL для программистов. – М.: ДМК, 1999. – 240 с.
7.Либерти Дж. C++. Энциклопедия пользователя.
Симоненко Е.А. Олимпиадная подготовка по программированию. Библиография |
3 |
8.[Липпман] Липпман С., Лажойе Ж., Му Б. Язык программирования C++. Вводный курс, 4-е издание. – Пер. с англ. – М.: Вильямс, 2007. – 896 с.
9.Лишнер Р. STL. Карманный справочник. – СПб.: Питер, 2005. – 187 с.
10.Мозговой М.В. C++ мастер-класс. 85 нетривиальных проектов, решений и задач. – СПб.: Наука и Техника, 2007. – 272 с.
11.Мейерс С. Эффективное использование STL. Библиотека программиста. – СПб.: Питер, 2002. – 224 с.
12.Мюссер Д., Дердж Ж., Сейни А. C++ и STL: справочное руководство. – 2-е изд. – Пер. с англ. – М.: М.: Вильямс, 2010. – 432 с.
13.Прата С. Язык программирования C++. Лекции и упражнения. Учебник. – Пер. с англ. – СПб.: ООО «ДиаСофтЮП», 2005. – 1104 с.
14.Саттер Г., Александреску А. Стандарты программирования на C++. – М.: Вильямс, 2005. – 224 с.
15.Саттер Г. Новые сложные задачи на C++. – Пер. с англ. – М.: Вильямс, 2005. – 272 с.
16.Саттер Г. Решение сложных задач на C++: Пер. с англ. – М.: Вильямс, 2008. – 400 с.
17.Седжвик Р. Алгоритмы на C++. – Пер. с англ. – М.: Вильямс, 2011. – 1056 с.
18.Степанов А.А, Мас-Джонс П. Начала программирования. – Пер. с англ. – М.: Вильямс, 2011. – 272 с.
19.Стефенс Д.Р., Диггинс К., Турканис Д., Когсуэлл Д. C++. Сборник рецептов. – Пер. с англ. – М.: Кудиц-Пресс, 2007. – 624 с.
20.[Страуструп] Страуструп Б. Язык программирования C++. – 3-е изд. – СПб.: Невский диалект, М.: Бином, 1999. – 991 с.
21.Топп У., Форд У. Структуры данных в C++: Пер. с англ. – М.: БИНОМ, 1999. – 816 с.
22.Уайс М. Организация структур данных и решение задач на C++: Пер. с англ. – М.: ЭКОМ Паблишерз, 2008. – 896 с.
23.Уилсон М. C++: практический подход к решению проблем программирования. – М.: Кудицобраз, 2006. – 736 с.
24.Уилсон М. Расширение библиотеки STL для C++. Наборы и итераторы. – М.: ДМК-Пресс, СПб.: БХВ-Петербург, 2008. – 608 с.
25.Хэзфилд Р., Кирби Л. и др. Искусство программирования на C. Фундаментальные алгоритмы, структуры данных и примеры приложений. – Пер. с англ. – К.: ДиаСофт, 2001. – 746 с.
26.Шилдт Г. C++: руководство для начинающих. – 2-е изд. – Пер. с англ. – М.: Вильямс, 2005. – 672 с.
27.Шилдт Г. C++: базовый курс. – 3-е изд. – Пер. с англ. – М.: Вильямс, 2010. – 624 с.
28.Эккель Б. Философия C++. Введение в стандартный C++. – 2-е изд. – СПб.: Питер, 2004. – 572 с.
29.Эккель Б., Эллисон Ч. Философия C++. Практическое программирование. – СПб.: Питер, 2004. – 608 с.
30.Элджер Д. C++. Библиотека программиста. 1999.