Т. Г. Чурина l, Е. Н. Боженкова 2, Т. В. Нестеренко 3
Институт систем информатики им. А. П. Ершова СО РАН пр. Акад. Лаврентьева, 6, Новосибирск, 630090, Россия E-mail: 1 [email protected], 2 [email protected], 3 [email protected]
ЗАДАЧИ ОТКРЫТОЙ ВСЕСИБИРСКОй ОЛИМПИАДЫ ПО ПРОГРАММИРОВАНИЮ ИМЕНИ И. В. ПОТТОСИНА:
ОТ ТЕОРИИ К ПРАКТИКЕ
Введение
Новосибирский государственный университет является авторитетным интеллектуальноорганизационным центром творческой инициативы в области обучения информационным технологиям на всех уровнях образовательной системы и факультативной работы с талантливой молодежью в Новосибирске и Сибири, начиная со школьников, включая специализацию студентов и аспирантов, а также переподготовку преподавателей. Это подтверждается высокой востребованностью выпускников НГУ на рынке труда как российских, так и зарубежных компаний.
Олимпиадная деятельность НГУ по программированию представляет собой стабильно развивающуюся программу, включающую множество мероприятий 1. Олимпиады являются формой усиленного и интенсивного обучения информатике и программированию, привлекают лучших студентов к высококвалифицированной работе в научных школах СО РАН, к наукоемким задачам ИТ индустрии. Также олимпиады позволяют выявлять и поддерживать развитие одаренной молодежи на разных уровнях обучения (школа, колледж, вуз). Кроме того, они являются учебно-экспериментальным полигоном в области особо сложных разделов программирования и использования активных форм обучения, что ведет к повышению качества образования. Выделим три основных направления этой деятельности.
Первое направление включает в себя олимпиадные проекты, к которым относятся:
- подготовка и проведение Открытой Всесибирской олимпиады имени И. В. Поттосина [Боженкова и др., 2006а; 2006б];
- подготовка и проведение полуфинала Всероссийской командной олимпиады школьников по программированию;
- подготовка и проведение Всероссийской олимпиады школьников по информатике (районный и областной этапы);
- подготовка и проведение тренингов команд НГУ и команд других вузов Новосибирска для участия в различных олимпиадах по программированию, в том числе в Открытом Кубке МГУ-CBOSS по программированию 2 [Панкратьев, Христенко, 2006], в самой престижной международной олимпиаде АСМ ICPC (Association for Computing Machinery International Collegiate Programming Contest) 3;
- подготовка и проведение весенних и летних сборов как для студентов, так и для школьников;
- методическая разработка содержания и форм усиленных занятий и тренингов по информатике и программированию, решению задач повышенной сложности, требующих нестандартных, изобретательских подходов;
1 См. сайт олимпид НГУ по программированию - http://olimpic.nsu.ru
2 См. сайт открытого кубка МГУ-CBOSS - http://www.opencup.ru
3 Сайт АСМ 1СРС - http://icpc.baylor.edu/icpc
1818-7900. Вестник НГУ. Серия: Информационные технологии. 2007. Том 5, выпуск 1 © Т. Г. Чурина, Е. Н. Боженкова, Т. В. Нестеренко, 2007
- разработка и ведение информационного обеспечения, поддерживающего организационную структуру олимпиадной деятельности;
- разработка и использование информационных технологий поддерживающих проведение олимпиады.
Второе направление - организация регулярных научных конференций студентов и школьников:
- Открытый конкурс «Молодые информатики Сибири»;
- Международная научная студенческая конференция «Студент и научно-технический прогресс»;
- Конференция-конкурс «Технологии Microsoft в теории и практике программирования».
К третьему направлению относится деятельность по переподготовке школьных учителей
информатики. Был разработан ряд специальных курсов и семинаров по различным аспектам учебной информатики. Группа новосибирских учителей обучилась использовать олимпиад-ную систему автоматического тестирования программ, что повысило уровень проведения школьных и районных олимпиад, а также помогает развертыванию заочно-дистанционных форм обучения.
Сочетание вышеописанных направлений с обучением по модели непрерывного образования «школа - колледж - вуз» повышает качество подготовки специалистов в области высоких информационных технологий. Отличительными особенностями данной модели являются ранняя профессиональная ориентация, возможность получить различные специализации в информатике на разных ступенях обучения.
Открытая Всесибирская олимпиада имени И. В. Поттосина
Открытая Всесибирская олимпиада имени И. В. Поттосина проводится Новосибирским государственным университетом, Сибирским отделением РАН и Институтом систем информатики СО РАН с 2000 г. и является одним из наиболее эффективных инструментов выявления и подготовки одаренных молодых людей, вносящих затем существенный вклад в развитие отечественных современных компьютерных технологий. Желание приблизить состязание к живой программистской работе также было одной из целей нашей олимпиады. Жюри стремилось подготовить такое состязание молодых талантов, в котором бы достаточно полно проверялись их профессиональные качества, в том числе такие важные для практики компоненты, как, например, умение найти информацию для решения новой задачи или самому поставить задачу, содержательная постановка которой в принципе не может быть уточнена.
Структура олимпиады
Олимпиада ориентирована на студенческие команды, но в ней могут принимать участие и школьники. Каждая команда должна состоять не более, чем из трех человек. Олимпиада проводится в три тура: два отборочных с помощью сети Интернет и очный.
Первый отборочный тур ориентирован на выявление и подготовку специалистов высокой квалификации с уровнем системного аналитика и дизайнера сложных проектов. Как правило. для этого тура разрабатывается оригинальный проект, а также интерфейс и модули, которые позволяют встраивать решения участников в интерфейс, визуализировать и проигрывать их на сайте олимпиады. На олимпиадах 2000-2005 гг. на написание такого решения отводилось несколько месяцев. На олимпиаде в 2006 г. первый отборочный тур проводился в виде интернет-тура с задачами, предложенными крупными разработчиками и потребителями программного обеспечения.
Второй отборочный тур, интернет-тур, проводится по традиционным правилам международного студенческого чемпионата АСМ. Особое внимание при его проведении уделяется решению задач в крайне ограниченное и строго определенное время, что среди прочего способствует совершенствованию владения языками программирования и техникой программирования.
Очный тур нацелен на искусство постановки задач и выбора методов решения. Здесь оценивается умение корректно поставить задачу на основании формулировки проблемы и ее контекста; умение проанализировать множество вариантов решений и исходя из различных
критериев эффективности выбрать самый оптимальный. В рамках очного тура предусмотрены две номинации. Первая - по стилю заочного тура, вторая - по правилам АСМ 1СРС.
В разные годы победителями олимпиады становились команды Московского, Новосибирского и Санкт-Петербургского государственных университетов.
В последней VII олимпиаде приняли участие более 350 команд студентов ведущих вузов России и девяти стран Ближнего зарубежья. Из них около 50 % - команды вузов Сибири и Дальнего Востока. Для участия в очном туре были приглашены победители первых двух туров. Ими стали представители университетов Москвы, Санкт-Петербурга, Петрозаводска, Ярославля, Екатеринбурга, Уфы, Томска, Тюмени, Абакана, Барнаула, Новокузнецка, Челябинска, Новосибирска, всего 42 команды.
Обзор задач
Олимпиады по программированию, в отличие от олимпиад по многим другим предметам, развивают действительно необходимые для практической работы качества, поскольку любой программист часто оказывается в ситуации, когда необходимо выдать решение в крайне ограниченное и строго определенное время. Но, как правило, в реальности сама задача определена отнюдь не строго, а порою даже ошибочно, ее нужно корректировать, исходя из контекста. Поэтому мы стараемся предлагать задачи разных стилей, в том числе отличающиеся от стиля задач олимпиады 1СРС.
Задачи первого отборочного тура
Часть задач первого отборочного тура олимпиад с 2000 по 2005 гг. состояла в разработке и реализации некоторой стратегии. Например, в 2000 г. жюри предложило участникам написать программы, взаимодействующие в неизвестном им и меняющемся окружении. Были даны две игровые задачи, в которых правила для двух игроков отличаются, автором задач является Н. Н. Непейвода [Иртегов и др., 2001]: упрощенное рэндзю и задача преследования на двумерном многообразии с разными понятиями расстояния для охотника и жертвы. Временные ограничения на ход были чрезвычайно жесткими, чтобы исключить попытки действий переборными алгоритмами. Представленные участниками решения независимо компилировались и запускались на игру под управлением программы-арбитра. Итоги подводились по результатам турнира.
Правила игры рэндзю были упрощены таким образом, чтобы можно было почти всегда пользоваться методом потенциальных полей. В этой задаче требовалось переходить к перебору только в критической ситуации, поскольку давалось 0,01 с на ход и 30 с на размышление в критической ситуации.
Задача об охотнике и жертве - практически классическая задача преследования с двойственными понятиями расстояния для охотника и для жертвы (охотник ходит по плоскому графу, двойственному графу жертвы). Свести ее к задаче преследования на графе - тот способ решения, который обеспечивал быстрый выбор хода в игре и требовал приемлемых затрат времени при анализе исходной позиции.
В 2005 г. Д. В. Иртегов предложил задачу, цель которой состояла в разработке стратегии управления беспилотными летательными аппаратами (БПЛА) в гонках. По условию задачи соревнования проводятся на трассе, представляющей собой бесконечную полосу, каждая команда имеет десять БПЛА. Цель соревнований - пролететь как можно дальше одним из БПЛА. На старте каждый БПЛА имеет фиксированный запас горючего, расходуемого в процессе соревнований. Расход горючего на единицу пройденного расстояния различен на разных скоростях. Особенность задачи состояла в том, что требовалось разработать групповую стратегию, поскольку из-за аэродинамического взаимодействия при определенном взаимном расположении БПЛА получают возможность значительно экономить топливо. Поддержание оптимального взаимного расположения усложняется тем фактом, что при столкновениях БПЛА могут выйти из строя и прекратить участие в гонке.
Моделирование гонки происходит по ходам. В начале каждого хода программа игрока знает координаты и скорости всех БПЛА и может задать расход топлива и ускорение для всех своих кораблей. Расходы топлива и ускорения БПЛА другой команды при этом не известны.
Затем программа жюри просчитывает движение всех БПЛА за один ход, при этом снимаются с гонки медленно движущиеся корабли, рассчитываются ускорения, новые скорости и координаты остальных БПЛА
Гонка заканчивается, когда не остается ни одного управляемого БПЛА. Для определения победителя и призовых мест между стратегиями команд проводился турнир, состоящий из серии матчей.
На стратегию налагались ограничения на максимальное время инициализации, максимальное время вычисления новых ускорений, на максимальный размер используемой оперативной памяти. Для написания стратегий разрешалось использование языков C++, Java, Pascal и Modula 2.
Для отладки решений и просмотра матчей жюри был написан визуализатор, а для проведения матчей между стратегиями - специальная проверяющая программа-арбитр.
Команды-участницы реализовывали различные стратегии. В простейших стратегиях каждый БПЛА летел сам по себе, не пытаясь взаимодействовать с другими кораблями команды.
Другие решения, учитывая аэродинамические воздействия, выстраивали свои БПЛА клином, чтобы попадать в положительные спутниковые вихри и таким образом экономить топливо. Корабли некоторых команд пытались подстраиваться в хвост клина соперника.
Первое место заняла стратегия, особенностью которой являлся агрессивный стиль поведения. Корабли команды-победителя встраивались в клин соперника и провоцировали столкновения аппаратов и выход их за границы трассы, кроме того, они пристраивались в голову клина таким образом, чтобы тормозить движение соперника. И ни одна команда не смогла противопоставить таким действиям хорошей стратегии защиты.
На VII олимпиаде в 2006 году темы задач первого отборочного тура были приближены к реальным проблемам, решаемым на практике. Идеи задач предложены компаниями Шлюм-берже, СВсофт, Самсунг. В одной из задач, про определитель номера, требовалось по последовательности нулей и единиц с выхода компаратора распознать номер телефона. В другой задаче нужно было картинку представить в виде набора символов заданного шрифта. Наибольшую трудность у участников вызвало решение третьей задачи, автором которой был А. Е. Гуськов Согласно условию задачи, ряд датчиков был установлен вдоль некоторого линейного профиля, и проведен сеанс сбора данных с них. В течение сеанса на линии профиля имели место постоянные импульсные возмущения различной силы на фоне естественных микросейсмических колебаний поверхности. Считается, что естественные колебания имеют нормальное случайное распределение по всему профилю («белый шум»).
Решение задачи состоит в последовательном выделении самого раннего по времени импульса. Для этого сначала вычисляется уровень шума, затем находится самое раннее по времени возмущение, вычисляется импульс, соответствующий этому возмущению. После этого найденный импульс вычитается из сигналов всех датчиков, и для них находятся времена следующих возмущений.
Здесь для успеха требовалось, помимо хорошего владения техникой программирования, умение работать со сложным математическим аппаратом.
При подведении итогов решения участников запускались на наборе тестов, и за каждый правильный ответ начислялись очки в зависимости от сложности теста.
Задачи второго отборочного тура и второй номинации очного тура
Задачи второго отборочного интернет-тура - задачи в стиле АСМ ICPC. Они отличаются между собой по сложности и тематике. Жюри старается давать задачи, для решения которых необходимы знания из различных разделов математики (геометрия, теория чисел, анализ, теория вероятностей и т. п.), а также применение методов динамического программирования или написание технически сложного кода. При решении задач участники должны уметь как применять классические алгоритмы, так и разрабатывать оригинальные алгоритмы, продумывать наиболее подходящие структуры данных.
Рассмотрим ряд задач различной тематики. В качестве примера задачи на динамику и применение физических формул можно привести задачу «Стритрейсинг», предложенную И. А. Семеновым на интернет-тур V олимпиады в 2004 году: вдоль гоночной трассы рас-
ставлены знаки ограничения скорости, требуется рассчитать, за какое минимальное время машина с заданными показателями ускорения и торможения может преодолеть трассу. Алгоритм решения состоит из двух шагов. На первом шаге проходим с финиша трассы к старту и для каждого знака вычисляем, с какой максимальной скоростью можно к нему подъехать. А потом, вторым проходом от старта к финишу, вычисляются оптимальные стратегии проезда интервалов между знаками и затрачиваемое время.
В другой задаче этого же тура про мешок фальшивых денег (предложена Т. В. Овсянниковой) для разработки алгоритма решения необходимо было применить навыки доказательства теорем из теории чисел. По условию задачи, имеется несколько мешков с разным количеством лежащих в них монет. Один мешок наполнен только фальшивыми монетами, в остальных мешках все монеты настоящие, веса фальшивых и настоящих монет отличаются. Требуется определить наименьшее число взвешиваний, которые потребуются, для того чтобы установить, в каком мешке фальшивые монеты, при абсолютном невезении.
Решение основано на идее вынимания из групп разных мешков разного количества монет, в этом случае отклонение веса от ожидаемого веса настоящих монет указывает на мешок с фальшивыми монетами. Для такого подхода к решению необходимо выработать критерий разделения мешков на группы и доказать оптимальность такого разбиения.
Другая задача, использующая знания из теории чисел, - «Бильярд», предложенная на очном туре III Всесибирской олимпиады. В ней заданы размеры бильярдного поля, в углах которого расположены лузы. Необходимо по заданному положению шара на этом поле и направлению удара определить, попадет ли шар в лузу и сколько раз перед этим он ударится о стенку. Все данные - целые. Удар о стенку поля считается абсолютно упругим, а скорость движения шара - постоянной. Решение этой задачи сводится к решению диафантовых уравнений. Дополнительную сложность в то время в этой задаче представляли ограничения на размер входных данных, с которыми нужно было работать, либо используя специальные типы данных, либо написав длинную арифметику.
На II интернет-туре VII олимпиады в качестве геометрической предлагалась задача «Алмаз» С. В. Дятлова. Суть ее в том, чтобы по координатам вершин найти объем выпуклого многогранника, у которого все грани треугольные. Для этого многогранник разбивается на тетраэдры, объемы которых находятся с помощью смешанного произведения. Из всех участников этого тура только 14 команд пытались ее решить, но сдало ее лишь 6 самых опытных команд.
В том же 2006 г. самой трудной с технической точки зрения стала задача «Добыча энергоресурсов», в основу которой были положены операции пересечения, объединения и дополнения многоугольников произвольной формы. Только одна команда из трех пытавшихся решить эту задачу смогла достичь успеха.
Самой популярной стала задача про начисление штрафов, которая сводилась к выведению формулы суммы произведений по модулю. Ее решило 97 команд.
Среди задач, для решения которых требовалось знание классических алгоритмов из теории графов, была задача «СМС счастья». Идея задачи состояла в том, чтобы найти гамильтонов цикл в специальном графе [Асанов и др., 2001].
Традиционно задачи интернет-туров включаются в список олимпиадных тренировок в круглосуточной тестирующей системе 4
По результатам отборочных туров жюри приглашает команды на очный тур. Команды, занявшие первые три места в одном из туров, получают право на участие в заключительном туре. Для остальных команд выстраивается рейтинг по сумме мест, занятых в двух турах.
Иногда команды, решения которых не прошли тесты и не были зачтены, считают, что в тестах присутствуют ошибки, и присылают апелляции.
Жюри, обсуждая апелляции, пытается наглядно показать участникам их ошибки. Например, для геометрической задачи про укладку труб был написан визуализатор, показывающий, что решение команды либо приводит к пересечению труб, либо ответ не оптимальный.
4 См. сайт олимпиадных тренировок НГУ по программированию - http://olimp.iis.nsk.su
Задачи первой номинации очного тура
Распознавание образов, архивация, теория расписаний, определение стратегии - темы задач первой номинации.
Например, девиз первой номинации первой олимпиады - «Точность и классика». Для решения была представлена задача коммивояжера на произвольном графе. Время на решение было ограничено 0,02n2 секунд, где n - количество вершин графа. Максимальные графы имели 400 вершин. Было известно, что большинство расстояний связано неравенством треугольника.
Решающие тесты подбирались таким образом, чтобы заставить «провалиться» известные и описанные в доступной литературе приближенные алгоритмы. В частности, проф. Э. Х. Ги-мади, автор ряда лучших приближенных алгоритмов, создал программу, генерировавшую теоретически наихудшие тесты. С тестами Гимади справились лишь два первых призера. Но не менее трудными оказались контрпримеры, придуманные «вручную» членами жюри и привлеченными для данной работы студентами.
Девиз второй номинации - «Неточность и не классика». Задача, поставленная на второй день, не имела не только точного решения, но и точной постановки. По условию задачи требуется навести порядок в архиве ftp-сайта, в котором хранились картинки в формате JPG. Архив состоит из изображений реальных сцен - пейзажей, животных, людей, репродукций картин. Изображения были получены разными способами: цифровой фотографией, сканированием обычных фотографий, оцифровкой видео- и кинокадров. Среди них много дубликатов - снимков одной и той же сцены с одного и того же ракурса, или просто копий одного и того же изображения.
Основная проблема при решении этой задачи состоит в том, что копии подвергались различной обработке: упаковке алгоритмом JFIF с различными параметрами, масштабированию, цифровому ретушированию и цветокоррекции, добавлению различных логотипов и рамок, обрезанию краев, преобразованию в 256 цветов с диффузией ошибки и без нее и повторному сжатию. Кроме того, сканированные и оцифрованные кадры могли сканироваться с оригиналов различного качества в различном разрешении и с различными настройками сканера по яркости, контрастности и цветопередаче. Все это приводит к тому, что бинарное сравнение изображений (как упакованных, так и распакованных) ни в коем случае не может служить критерием их одинаковости.
Командам была дана случайная выборка изображений из архива (до 30 % его объема). Им предстояло написать программу, просматривающую весь архив и выдающую список файлов, которые она сочтет дубликатами. Командам предоставлялась библиотека libjpeg для работы (распаковка, упаковка и другие преобразования) с изображениями формата JPG с полной документацией. Кроме того, можно было пользоваться программами Adobe Photoshop и AcdSee для просмотра и редактирования изображений.
Поскольку здесь требовалось на ходу ознакомиться с библиотекой libjpeg, технические сложности оказались непреодолимыми для нескольких команд, но три победителя построили программы, работавшие лучше, чем программа, предложенная жюри. Команда победителей решала задачу следующим образом: все изображения масштабировались до иконок 16^16 с градациями серого, яркость иконок нормализовалась. Затем все иконки попарно сравнивались. Вычислялась среднеквадратичная дисперсия результата вычитания двух картинок. Если дисперсия была ниже некоторого эмпирически определенного порога значения, картинки признавались одинаковыми. Основное отличие между командами, занявшими первые три места, заключалось в сбалансированности подбора порогового значения.
В 2006 г. участникам очного тура было предложено написать адаптивную игровую стратегию. Каждая команда пишет произвольное натуральное число. Затем числа всех команд открываются и одинаковые числа вычеркиваются. Тот, у кого осталось наименьшее число, получает один балл. В случае ничьей все участники получают по одному баллу. Так один за другим проводятся раунды, пока какой-нибудь участник не наберет определенное количество очков. Он выбывает из игры и получает свое место в рейтинге, но игра продолжается. Остальные участники разыгрывают очередные места.
Еще до завершения тура жюри провело сессии тестирования на представленных решениях. Таким образом, команды могли получить очки за быструю разработку алгоритма, но победи-
тель должен был научиться учитывать результаты предыдущих тестирований, оценить стратегии соперников и суметь внести коррективы в свой алгоритм.
Заключение
Высокий научно-методический уровень олимпиады обеспечивается участием ведущих научных школ по информатике академических институтов РАН, в первую очередь Института систем информатики имени А. П. Ершова СО РАН. В жюри и оргкомитете олимпиады принимают участие также и представители вузов России, занимающих призовые места на олимпиадах по программированию: Московского, Санкт-Петербургского, Саратовского госу-ниверситетов, Санкт-Петербургского госуниверситета информационных технологий, механики и оптики.
При подготовке задач жюри готовит решения на нескольких языках программирования, проверяющие программы для решений участников и проверяющие программы для предварительной проверки тестов жюри. Разработана система тестирования, сдачи задач и ответов на вопросы через веб-интерфейс.
Участники олимпиадных проектов получают широкие возможности для повышения своей квалификации и неформального общения. Они знакомятся с разделами компьютерных наук, недостаточно поддержанными вузовскими курсами.
Получив соответствующую подготовку, студенты поступают в магистратуру НГУ и аспирантуру НГУ и СО РАН, что позволяет удержать наиболее талантливую молодежь в научной сфере. В аспирантуре они уже развивают ИТ-технологии и одновременно начинают готовить себе смену. Так, например, победители старых олимпиад стали костяком тренерской команды для подготовки новых школьных и студенческих команд.
Механизм проведения Открытой Всесибирской олимпиады позволяет вырабатывать стратегии и модели совершенствования программ обучения в области производственного применения информационных технологий в наукоемком бизнесе, университетском образовании и академической науке в условиях современного общества.
Список литературы
АсановМ. О., Баранский В. А., Расин В. В. Дискретная математика: графы, матроиды, алгоритмы. М.; Ижевск: РХД, 2001.
Боженкова Е. Н., Нестеренко Т. В., Чурина Т. Г. Открытая Всесибирская олимпиада по программированию им. И. В. Поттосина: мотивация повышения уровня подготовки специалиста // Тр. конф. «Информационные технологии в образовании». М., 2006а. Ч. 3. С. 107-110.
Боженкова Е. Н., Нестеренко Т. В., Чурина Т. Г. Методика подготовки Открытой Всеси-бирской олимпиады по программированию им. И. В. Поттосина // Тр. конф. «Перспективы систем информатики». Новосибирск, 2006б. С. 6-8.
Иртегов Д. В., Непейвода Н. Н., Чурина Т. Г. Задачи I Открытой Всесибирской олимпиады по программированию // Тр. конф. «Перспективы систем информатики». Новосибирск, 2001. С. 45-47.
Панкратьев Е. В., Христенко О. Б. Открытый Кубок по программированию: методы, идеи, перспективы // Тр. конф. «Перспективы систем информатики». Новосибирск, 2006. С. 63-65.
Материал поступил в редколлегию 16.04.2007