Соревновательное программирование

редактировать
Петр Митричев (слева) и Геннадий Короткевич (справа), два выдающихся конкурентоспособных программиста во время

Соревновательное программирование - это интеллектуальный спорт, обычно проводимый через Интернет или локальную сеть, с участием участников, пытающихся программировать согласно предоставленным спецификациям. Участников конкурса называют спортивными программистами. Конкурентное программирование признается и поддерживается несколькими транснациональными компаниями, занимающимися разработкой программного обеспечения и Интернетом, такими как Google и Facebook. Есть несколько организаций, которые регулярно проводят соревнования по программированию.

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

Содержание
  • 1 История
  • 2 Обзор
  • 3 Известные соревнования
    • 3.1 Краткосрочные
    • 3.2 Долгосрочные
      • 3.2.1 Искусственный интеллект и машинное обучение
    • 3.3 Конкурсы, посвященные технологиям с открытым исходным кодом
  • 4 Онлайн-конкурсы и учебные ресурсы
  • 5 Преимущества и критика
  • 6 Литература
  • 7 См. также
  • 8 Ссылки
  • 9 Внешние ссылки
История

Один из старейших известных конкурсов - ICPC, который возник в 1970-х годах и в 2011 году расширился до 88 стран.

С 1990 по 1994 год Оуэн Астрахан, Вивек Кера и Дэвид Котц провели один из первых распределенных интернет-конкурсов программирования, вдохновленных ICPC.

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

Обзор

Целью соревновательного программирования является написание исходного кода компьютерных программ, которые могут решить данные проблемы. Подавляющее большинство задач, возникающих на олимпиадах по программированию, имеют математический или логический характер. Типичные такие задачи относятся к одной из следующих категорий: комбинаторика, теория чисел, теория графов, теория алгоритмических игр, вычислительная геометрия, анализ строк и структуры данных. Задачи, связанные с искусственным интеллектом, также популярны на определенных соревнованиях.

Независимо от категории проблемы, процесс решения проблемы можно разделить на два основных этапа: построение эффективного алгоритма и реализация алгоритма на подходящем языке программирования (набор разрешенных языков программирования варьируется от конкурса к конкурсу). Это два наиболее часто проверяемых навыка на соревнованиях по программированию.

В большинстве соревнований судейство осуществляется автоматически хост-машинами, обычно известными как судьи. Каждое решение, представленное участником, оценивается судьей по набору (обычно секретных) тестовых примеров. Обычно задачи контеста имеют систему оценок «все или ничего», что означает, что решение считается «принятым» только в том случае, если оно дает удовлетворительные результаты по всем тестовым случаям, проведенным судьей, и отклоняется в противном случае. Однако некоторые задачи конкурса могут допускать частичную оценку, в зависимости от количества пройденных тестовых примеров, качества результатов или некоторых других заданных критериев. Некоторые другие конкурсы требуют только, чтобы участник представил выходные данные, соответствующие заданным входным данным, и в этом случае судье нужно только проанализировать предоставленные выходные данные.

Онлайн-судьи - это онлайн-среда, в которой происходит тестирование. У онлайн-судей есть рейтинговые списки, в которых показаны пользователи с наибольшим количеством принятых решений и / или самым коротким временем выполнения для конкретной проблемы.

Известные соревнования

Существуют два типа форматов соревнований: краткосрочные и долгосрочный. Каждый раунд краткосрочных соревнований длится от 1 до 5 часов. Длительные соревнования могут длиться от нескольких дней до нескольких месяцев.

Краткосрочная

В большинстве вышеуказанных конкурсов, поскольку количество участников достаточно большой, соревнования обычно проходят в несколько туров. Обычно они требуют онлайн-участия во всех раундах, кроме последнего, который требует участия на месте. Особым исключением из этого правила является IEEEXtreme, ежегодное 24-часовое соревнование по виртуальному программированию. Лучшие участники IOI и ACM-ICPC получают золотые, серебряные и бронзовые медали, а в других конкурсах денежные призы присуждаются лучшим финишерам. Также занятие первых мест в таблицах результатов таких конкурсов может заинтересовать рекрутеров из софтверных и интернет-компаний.

Долгосрочная

Искусственный интеллект и машинное обучение

  • Kaggle - соревнования по машинному обучению.
  • CodeCup - соревнования по искусственному интеллекту для настольных игр, проводимые ежегодно с 2003 года. Правила игры публикуются в сентябре, а финальный турнир проводится в Январь.
  • Google AI Challenge - соревнования, проводимые два раза в год для студентов, прошедших с 2009 по 2011 гг.
  • Halite - соревнования по программированию искусственного интеллекта, спонсируемые Two Sigma, Cornell Tech и Google
  • Russian AI Cup открытый конкурс по программированию с искусственным интеллектом

Конкурсы по технологиям с открытым кодом

  • Список может быть неполным
Название конкурсаГлавный спонсорОписаниеВыполняется сОбычное времяСледующий цикл приложенияСтатус
Соревнование по программированию нескольких агентов Клауст Hal University of Technology в сочетании с агентно-ориентированными семинарамиЕжегодные международные соревнования по программированию для стимулирования исследований в области разработки многоагентных систем и программирования.2005сентябрьсентябрь 2011Активный
Google Summer of Code Google Inc. Годовая программа, в рамках которой Google присуждает стипендии сотням студенты, успешно завершившие запрошенный проект бесплатного программного обеспечения / программирования с открытым исходным кодом в течение лета.2005март - август23 марта - 3 апреляАктивно
Конкурс открытого участия Google Google Inc.Конкурс, проведенный Google в 2007–2008 годах для старшеклассников. Конкурс призван побудить старшеклассников участвовать в проектах с открытым кодом.2007ноябрь-февральНеизвестноНеизвестно
Онлайн-конкурсы и обучающие ресурсы

Сообщество программистов во всем мире создал и поддерживает несколько интернет-ресурсов, посвященных соревновательному программированию. Они предлагают отдельные конкурсы с небольшими призами или без них. Также прошлые архивы задач являются популярным ресурсом для обучения соревновательному программированию. К ним относятся:

ИмяОписаниеВеб-сайт
CodeChef Поддерживается unacademy, он ежемесячно проводит 10-дневный конкурс и пару коротких конкурсов (один в стиле IOI называется Luchtime и другие ACM ICPC в стиле Cook-Off), и предоставляет образовательным учреждениям платформу для проведения соревнований бесплатно. Два лучших победителя длительного конкурса выиграют денежные призы, а 10 лучших во всем мире получат футболку.www.codechef.com
CodeCupЕжегодный международный конкурс настольных игр AI по программированию, организуемый Голландской олимпиадой по информатике с 2003 года.codecup.nl
Codeforces Российский ресурс, поддерживаемый Университетом ИТМО, который в основном предоставляет частые (до двух в неделю) короткие соревнования. Особенности: возможность проверять правильность решений других участников во время «фазы взлома», виртуальных конкурсов, тренировок и т. Д.codeforces.com
CodinGame Пазлы (возрастающая сложность), код гольф. Проводит регулярные онлайн-соревнования (AI вызовы, задачи оптимизации ).www.codingame.com
HackerEarth Бангалор, Индия Компания со штаб-квартирой в Индии, предлагающая онлайн-конкурсы, подобные среде, с целью предоставления решений по оценке набора персонала.www.hackerearth.com
HackerRank HackerRank предлагает задачи программирования в различных областях компьютерных наук. На нем также размещаются ежегодные коды, которые помогают объединить программистов и стартапы Кремниевой долины.hackerrank.com
Project Euler Большой набор задач вычислительной математики (т.е. не связанных напрямую с программированием, но часто требующих навыков программирования для решения).projecteuler.net
Topcoder американский ресурс и компания, которая организует конкурсы, а также предоставляет производственные проблемы как своего рода внештатную работу; Он предлагает десятки коротких конкурсов и несколько длинных («марафонов») каждый год. Особенность - участники имеют возможность проверить правильность решений других участников после фазы кодирования и перед финальным автоматическим тестированием (так называемая «фаза вызова»).www.topcoder.com
UVa Online Judge Содержит более 4500 задач для практики. Проводит регулярные онлайн-соревнования. Открытый в 1995 году, он является одним из старейших подобных сайтов.onlinejudge.org
SPOJ Польская система онлайн-судьи, которая создает множество проблем для обучения и предоставляет платформу для других организаторов для проведения своих соревнований по программированию.www.spoj.com
Open KattisОткрытая версия системы управления контестами Kattis с архивом более 2600 задач. Kattis был разработан для обучения компьютерным наукам, но он также используется для проведения престижных соревнований, таких как ICPC World Finals.open.kattis.com
AtCoderБазируется в Японии, AtCoder еженедельно предлагает онлайн-конкурсы по программированию. Конкурсы проводятся на японском и английском языках.

По состоянию на 2020 год это одна из самых популярных платформ в своем роде.

atcoder.jp
Caribbean Online JudgeИспанский ресурс, поддерживаемый University of Информатика. Содержит более 3000 задач для практики. Также проводятся регулярные онлайн-соревнования.coj.uci.cu
Преимущества и критика

Участие в олимпиадах по программированию может повысить интерес студентов к изучению информатики. Навыки, приобретенные в соревнованиях по программированию, подобных ICPC, также улучшают карьерные перспективы, поскольку они помогают пройти «технические собеседования», которые часто требуют от кандидатов решения сложных программных и алгоритмических задач на месте.

Также было критика конкурентного программирования, особенно со стороны профессиональных разработчиков программного обеспечения. Важным моментом является то, что многие быстро развивающиеся соревнования по программированию учат конкурентов плохим навыкам программирования и стилю кода (например, ненужное использование макросов, отсутствие абстракции и комментариев ООП, использование коротких имен переменных и т. Д.). Кроме того, предлагая только небольшие алгоритмические головоломки с относительно короткими решениями, соревнования по программированию, такие как ICPC и IOI, не обязательно обучают хорошим навыкам и методам разработки программного обеспечения, поскольку реальные программные проекты обычно содержат многие тысячи строк кода и разрабатываются большими командами в течение длительных периодов времени. Питер Норвиг заявил, что, судя по имеющимся данным, победа в олимпиадах по программированию отрицательно коррелирует с эффективностью программиста на его или ее работе в Google (даже если конкурс у победителей были более высокие шансы получить работу).

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

Литература
  • Халим, С., Халим, Ф. (2013). Соревновательное программирование 3: Новая нижняя граница соревнований по программированию. Лулу.
  • Лааксонен, А. (2017). Руководство по соревновательному программированию (темы бакалавриата в области компьютерных наук). Cham: Springer International Publishing.
См. Также
Ссылки
Внешние ссылки
Проект с открытым исходным кодом для проведения конкурсов
Последняя правка сделана 2021-05-15 08:10:42
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте