Konkurenční programování - Competitive programming

Image
Petr Mitrichev (vlevo) a Gennadij Korotkevich (vpravo), dva prominentní konkurenční programátoři během soutěže.

Soutěžní programování je myšlenkový sport, který se obvykle pořádá přes internet nebo místní síť a zahrnuje účastníky, kteří se snaží programovat podle poskytnutých specifikací. Soutěžící jsou označováni jako sportovní programátoři . Konkurenční programování je uznáváno a podporováno několika nadnárodními softwarovými a internetovými společnostmi, jako jsou Google a Facebook .

Soutěž v programování obvykle zahrnuje hostitel předkládá soubor logických nebo matematických problémů , také známých jako hádanky , soutěžícím (kterých se může lišit v počtu od desítek do několika tisíc) a soutěžící jsou povinni napsat počítačové programy schopné vyřešit každý problém. . Posuzování je založeno především na počtu vyřešených problémů a času stráveném napsáním úspěšných řešení, ale může zahrnovat i další faktory (kvalita vytvořeného výstupu, doba provádění, velikost programu atd.)

Dějiny

Jednou z nejstarších známých soutěží je ICPC , která vznikla v 70. letech a v roce 2011 se rozrostla na 88 zemí.

V letech 1990 až 1994 organizovali Owen Astrachan , Vivek Khera a David Kotz jednu z prvních distribuovaných, internetových programovacích soutěží inspirovaných ICPC.

Zájem o soutěžní programování od roku 2000 značně vzrostl a je silně spojen s růstem internetu, který usnadňuje pořádání mezinárodních soutěží online a odstraňuje geografické problémy.

Přehled

Cílem konkurenčního programování je napsat zdrojový kód počítačových programů, které jsou schopny řešit zadané problémy. Naprostá většina problémů, které se objevují v programátorských soutěžích, má matematický nebo logický charakter. Typické takové úlohy patří do jedné z následujících kategorií: kombinatorika , teorie čísel , teorie grafů , algoritmická teorie her , výpočetní geometrie , řetězcová analýza a datové struktury . Problémy související s omezovacím programováním a umělou inteligencí jsou také populární v určitých soutěžích.

Bez ohledu na kategorii problému lze proces řešení problému rozdělit do dvou širokých kroků: sestavení efektivního algoritmu a implementace algoritmu ve vhodném programovacím jazyce (množina povolených programovacích jazyků se liší soutěž od soutěže). To jsou dvě nejčastěji testované dovednosti v programátorských soutěžích.

Ve většině soutěží je posuzování prováděno automaticky hostitelskými stroji, běžně známými jako rozhodčí. Každé řešení předložené soutěžícím je posuzováno soudcem proti souboru (obvykle tajných) testovacích případů. Normálně mají soutěžní problémy systém známkování všechno nebo žádné, což znamená, že řešení je „přijato“ pouze v případě, že poskytuje uspokojivé výsledky ve všech testovacích případech prováděných soudcem, a jinak je zamítnuto. Některé problémy se soutěžemi však mohou umožnit částečné bodování v závislosti na počtu úspěšných testovacích případů, kvalitě výsledků nebo některých dalších specifikovaných kritériích. Některé jiné soutěže vyžadují pouze to, aby soutěžící předložil výstup odpovídající daným vstupním datům, v takovém případě musí rozhodčí pouze analyzovat zaslaná výstupní data.

Online rozhodčí jsou online prostředí, ve kterých probíhá testování. Online rozhodčí mají žebříčky, které zobrazují uživatele s největším počtem přijatých řešení a/nebo nejkratší dobou provedení pro konkrétní problém.

Pozoruhodné soutěže

Existují dva typy soutěžních formátů: krátkodobé a dlouhodobé. Každé kolo krátkodobé soutěže trvá od 1 do 5 hodin. Dlouhodobé soutěže mohou trvat několik dní až několik měsíců.

Krátkodobý

Ve většině výše uvedených soutěží, protože počet soutěžících je poměrně velký, jsou soutěže obvykle organizovány v několika kolech. Obvykle vyžadují online účast ve všech kolech kromě posledního, které vyžaduje účast na místě. Zvláštní výjimkou je IEEEXtreme, což je každoroční 24hodinová soutěž ve virtuálním programování. Nejlepší hráči na IOI a ICPC dostávají zlaté, stříbrné a bronzové medaile, zatímco v ostatních soutěžích jsou nejlepším vítězům uděleny peněžní ceny. Také umístění na předních místech v bodovacích tabulkách takových soutěží může přitáhnout zájem náborářů ze softwarových a internetových společností.

Dlouhodobý

Umělá inteligence a strojové učení

  • Kaggle – soutěže ve strojovém učení.
  • CodeCup – AI soutěž deskových her se koná každoročně od roku 2003. Pravidla hry jsou zveřejněna v září a finálový turnaj se koná v lednu.
  • Google AI Challenge – dvouleté soutěže pro studenty, které probíhaly v letech 2009 až 2011
  • Halite – Programovací výzva AI sponzorovaná společnostmi Two Sigma, Cornell Tech a Google
  • Ruský AI Cup otevřená soutěž v programování umělé inteligence

Soutěže zaměřené na open source technologie

  • Seznam může být neúplný
Název soutěže Hlavní sponzor Popis Běží od Obvyklý čas Další aplikační cyklus Postavení
Soutěž v programování více agentů Clausthal University of Technology ve spojení s workshopy zaměřenými na agenty Každoroční mezinárodní programátorská soutěž na podporu výzkumu v oblasti vývoje a programování multiagentních systémů . 2005 Září září 2011 Aktivní
Kódové léto Google Google Inc. Každoroční program, ve kterém společnost Google uděluje stipendia stovkám studentů, kteří během léta úspěšně dokončí požadovaný projekt kódování bezplatného softwaru / open source. 2005 březen-srpen 23. března – 3. dubna Aktivní
Soutěž Google Highly Open Participation Google Inc. Soutěž pořádaná společností Google v letech 2007–8 zaměřená na studenty středních škol. Soutěž je navržena tak, aby povzbudila studenty středních škol k účasti na projektech s otevřeným zdrojovým kódem. 2007 listopad–únor Neznámý Neznámý

Online zápas a zdroje školení

Programátorská komunita po celém světě vytvořila a udržuje několik internetových zdrojů věnovaných konkurenčnímu programování. Nabízejí samostatné soutěže s drobnými cenami nebo bez nich. Také minulé archivy problémů jsou oblíbeným zdrojem pro školení v konkurenčním programování. Existuje několik organizací, které pravidelně pořádají programátorské soutěže. Tyto zahrnují:

název Popis webová stránka
CodeChef Spravuje ji Unacademy a každý měsíc pořádá 10denní soutěž a několik krátkých soutěží (jedna ve stylu IOI s názvem Lunchtime a další ve stylu ICPC s názvem Cook-Off) a poskytuje vzdělávacím institucím zdarma platformu pro pořádání soutěží. Dva nejlepší vítězové dlouhé soutěže získávají peněžní ceny, zatímco 10 nejlepších z celého světa získá tričko. www .codechef .com
CodeCup Každoroční mezinárodní soutěž v programování AI deskových her , kterou od roku 2003 pořádá Nizozemská olympiáda v informatice. codecup .nl
Codeforces Ruský zdroj, spravovaný ITMO University , který většinou poskytuje časté (až dvě týdně) krátké soutěže. Zvláštnosti: všechna řešení jsou open source , možnost kontroly správnosti řešení ostatních soutěžících během „hackingové fáze“, virtuálních soutěží, školení atd. codeforces .com
CodinGame Hádanky (zvyšující se obtížnost), code golf . Pořádá pravidelné online soutěže ( AI сhallenges, problémy s optimalizací ). www .codingame .com
HackerEarth Společnost se sídlem v Bangalore v Indii poskytující online soutěžní prostředí zaměřené na poskytování řešení pro hodnocení náboru. www .hackerearth .com
HackerRank HackerRank nabízí problémy s programováním v různých oblastech informatiky. Hostí také každoroční Codesprints, které pomáhají propojit kodéry a startupy v Silicon Valley. hackerrank .com
Projekt Euler Velká sbírka výpočetních matematických problémů (tj. které přímo nesouvisejí s programováním, ale často vyžadují programátorské dovednosti pro řešení). projecteuler .net
Topcoder americký zdroj a společnost, která organizuje soutěže a také poskytuje průmyslové problémy jako druh práce na volné noze; každoročně nabízí desítky krátkých soutěží a několik dlouhých („maratonů“). Specifika - účastníci mají možnost zkontrolovat správnost řešení ostatních soutěžících po fázi kódování a před závěrečným automatickým testováním (tzv. „fáze výzvy“). www .topcoder .com
UVa Online soudce Obsahuje přes 4500 úloh k procvičení. Pořádá pravidelné online soutěže. Byl otevřen v roce 1995 a je jedním z nejstarších takových webových stránek. onlinejudge .org
SPOJ Polský online systém rozhodčích , který poskytuje spoustu problémů pro školení a poskytuje platformu pro ostatní organizátory, aby mohli pořádat své programátorské soutěže. www .spoj .com
Otevři Kattis Veřejná verze systému řízení soutěže Kattis s archivem více než 2600 problémů. Kattis byl vyvinut na podporu kurzů informatiky, ale používá se také k pořádání prestižních soutěží, jako je světové finále ICPC. otevřít .katis .com
AtCoder AtCoder se sídlem v Japonsku nabízí online programové soutěže na týdenní bázi. Soutěže jsou nabízeny v japonštině a angličtině.

Od roku 2020 je to jedna z nejpopulárnějších platforem svého druhu.

atcoder .jp

Pozoruhodní účastníci

Následující seznam obsahuje soutěžící, kteří dosáhli významných výsledků v programátorských soutěžích a do určité míry i ve své kariéře. Všimněte si, že tento seznam nezahrnuje lidi (například Mark Zuckerberg ), kteří by mohli být úspěšní ve své kariéře, ale neměli významné výsledky v konkurenčním programování:

Výhody a kritika

Účast v programovacích soutěžích může zvýšit nadšení studentů pro studium informatiky . Dovednosti získané v programovacích soutěžích podobných ICPC také zlepšují kariérní vyhlídky, protože pomáhají absolvovat „technické pohovory“, které často vyžadují, aby kandidáti řešili složité programovací a algoritmické problémy přímo na místě.

Objevila se také kritika konkurenčního programování, zejména ze strany profesionálních softwarových vývojářů. Jedním kritickým bodem je, že mnoho rychlých programovacích soutěží učí konkurenty špatným programovacím návykům a stylu kódu (jako zbytečné používání maker , nedostatek OOP abstrakce a komentářů, používání krátkých názvů proměnných atd.). Programovací soutěže, jako je ICPC a IOI, také tím, že nabízejí pouze malé algoritmické hádanky s relativně krátkými řešeními, nemusí nutně učit dobré dovednosti a postupy softwarového inženýrství, protože skutečné softwarové projekty mají obvykle mnoho tisíc řádků kódu a jsou vyvíjeny velkými týmy. dlouhá časová období. Peter Norvig uvedl, že na základě dostupných údajů to, že se stal vítězem programátorských soutěží, negativně korelovalo s výkonem programátora v jeho práci ve společnosti Google (i když vítězové soutěže měli vyšší šance na získání zaměstnání). Norvig později uvedl, že tato korelace byla pozorována na malém souboru dat, ale že to nebylo možné potvrdit po prozkoumání většího souboru dat

Dalším názorem je, že než „ztrácet čas“ nadměrným soupeřením řešením problémů se známými řešeními, měli by významní programátoři raději investovat svůj čas do řešení skutečných problémů.

Literatura

  • Halim, S., Halim, F. (2013). Soutěžní programování 3: Nová spodní hranice soutěží v programování . Svůdná žena.
  • Laaksonen, A. (2017). Průvodce konkurenčním programováním (vysokoškolská témata informatiky). Cham: Springer International Publishing.

Viz také

Reference

externí odkazy

Open-source projekt pro pořádání soutěží