Üldist

Mis on informaatika?

Informaatika on definitsiooni järgi teadus infosüsteemidest, hõlmates osi nii arvutiteadusest, infotehnoloogiast kui statistikast.

Mis on informaatikaolümpiaad ja mida seal tehakse?

Laiemalt peaks tegelikult rääkima programmeerimisvõistlustest. Selliseid võistlusi on palju, enamik neist toimuvad tänapäeval online võistlusserverites. Eesti informaatikaolümpiaad on põhiline Eestis korraldatav programmeerimisvõistlus, kuid lisaks saab osaleda ka mitmetel teistel võistlustel. Selliste võistluste põhiteemaks on algoritmilise iseloomuga programmeerimisülesannete lahendamine. Tüüpiline programmeerimisvõistluse ülesanne on näiteks selline:

"Malelaual peab ratsu liikuma N käiguga ühelt etteantud väljalt teisele. Mitu erinevat teekonna võimalust tal selleks on? Kirjutada programm, mis saab ette algus- ja lõppväljade tähised ning arvu N ja väljastab erinevate teekondade arvu."

Võistlusel tuleb etteantud aja (tavaliselt 2-5 tundi) jooksul lahendada hulk (tavaliselt 3-5) sellist laadi ülesannet, täpsemalt kirjutada programmid, mis etteantud sisendite põhjal vastused leiavad.

Kui programm on valmis, esitab võistleja selle testimiseks. Testimine toimub tänapäeval automaatselt, programmile antakse hulk sisendeid, programm leiab vastused, mille õigsust testimisraamistik kontrollib. See, millised testid on, ei ole võistlejale reeglina ette teada.

Täpsemalt kontrollitakse kaht asja: kas vastus on õige ja kas see leiti piisavalt kiiresti. Punkte saab ainult juhul, kui mõlemad tingimused on täidetud. Keerulisemate üleannete puhul on tavaline, et suhteliselt lihtne on kirjutada programmi, mis vastuse küll leiab, aga töötab väga kaua - peamine väljakutse on panna programm tööle võimalikult kiiresti. Rohkem teste läbinud programm saab ka rohkem punkte ning punktide koguarv määrabki võistluse võitja.

Lisaks "puhastele" programmeerimisülesannetele võib võistlusel olla ka teisi nuputamist vajavaid ning programmeerimisega seotud ülesandeid. Peamiseks näiteks on avatud testidega ülesanded, mis on traditsiooniliseks lahtise võistluse osaks. Avatud testidega ülesannete puhul on testid ette antud ja programmi esitama ei pea. Teoreetiliselt on võimalik selliseid ülesandeid lahendada ka "näppude peal" ehk üldse ilma programmeerimiseta. Reeglina on siiski kasulik kirjutada mõni abistav programm (või ka mitu), mis andmeid töödelda ja variante läbi vaadata aitab. Selliste ülesannete puhul on ka üsna tavaline, et tuleb mõelda "kastist väljas", et ülesande ivale pihta saada, täiendavaid materjale otsida vms.

Mis vahe on olümpiaadi- ja tavalisel programmeerimisel?

Tarkvara koosneb tänapäeval tohutust hulgast loogilistest kihtidest, mis üksteisega andmeid vahetavad. Tavalise programmeerija töö koosneb suuresti kahest osast:

  1. Andmete kopeerimine ühest kihist teise, sooritades nendega vahepea mingi transformatsiooni.
  2. Uurimine, miks mõni üleval- või allpool asuv kiht ei tööta oodatud viisil. Kihtide hulka arvestades on tegelikult imekspandav, et vahel üldse mõni asi töötab :)

Olümpiaadil on enamik sellest kihilisusest elimineeritud ning keskendutakse konkreetsele ülesandele: kuidas leida lähteandmete põhjal konkreetne vastus.

Võime tuua ka sellise võrdluse: olümpiaad on nagu rallisõit ja tavaprogrammeerimine on nagu liinibussi juhtimine. Sarnased, kuid siiski erinevad.

Mis on programmeerimisvõistluste eesmärk?

Siin võib tõmmata paralleeli spordiga ning eristada inimeste individuaalseid eesmärke ja ühiskondlikku kasu.

Individuaalselt on osalejate eesmärk sarnane võistlussportlaste omaga - arendada oma võimed maksimaalseks ning olla parem kui teised.

Institutsioonidele (nt ülikoolidele) on sageli oluline prestiiž, näiteks ICPC võistluse võit on märk sellest, et meie ülikoolis on kõvad tegijad.

Kõige laiem kasu on aga ühiskondlik: võistlustel osalemine arendab järgmisi oskusi:

Need oskused aitavad kaasa kogu tarkvaratööstuse kvaliteedi arengule. Me kõik oleme kogenud seda, et tarkvara on puudulikult testitud või töötab aeglaselt. Kui igale programmile lähenetaks nii, nagu seda tehakse võistlusel, oleks suur hulk selliseid probleeme olemata.

Mis on olümpiaadi ajalugu?

Esimene rahvusvaheline informaatikaolümpiaad (IOI) toimus 1989. aastal Bulgaarias. Sellest ajast saadik on olümpiaadi raskus järk-järgult tõusnud, kooskõlas sellega, et suuremad riigid muudavad oma ettvalmistusprogramme põhjalikumaks.

Läbi aegade parimad üksikvõistlejad IOI-l on olnud:

  1. Gennady Korotkevich – Valgevene
  2. Filip Wolski – Poola
  3. Rares-Darius Buhai – Rumeenia
  4. Rumen Hristov – Bulgaaria
  5. Martin Pettai - Eesti
  6. Andrzej Gąsienica-Samek - Poola

Parimad riigid on olnud Hiina, Venemaa, USA, Poola, Korea, Rumeenia, Iraan

Kes on tuntumad olümpiaadil osalenud inimesed?

Eestis on informaatikaolümpiaadil osalenud mitmed hiljem tööstuse ja teaduse alal edu saavutanud inimesed. Mõned neist on:

Korraldus

Kes olümpiaadi korraldab?

Ei ole ühtki inimest, kelle ametinimetus oleks "informaatikaolümpiaadi korraldaja". Korraldustoimkond on grupp vabatahtlikke, keda organisatsiooniliselt toetab Teaduskool. Toimkonna koordinaatoriks on olnud Rein Prank (1992-1997), Ahto Truu (1998-2014), Targo Tennisberg (2015-2019) ja Sandra Schumann (alates 2020).

Kuidas võistlused toimuvad?

Eestis koostab ülesandeid ja teste informaatikaolümpiaadi toimkond. Rahvusvahelistel võistlustel korraldatakse tavaliselt ülesannete esitamise konkursse, kuhu ülesandeid saata saab ning kust vastav žürii parimad ülesanded välja valib. Online võistlustel on vahel ka palgalised ülesandekoostajad.

Kui ülesanded ja testid on koostatud, siis võistluse läbiviimine ise on tänapäeval üpris automaatne. Lahendusi saab tehniliselt kirjutada ükskõik millises Internetiga ühendatud arvutis. Žüriil on testimisserver, kuhu osalejad oma lahendused esitavad. Testimisserver kompileerib programmi ja käivitab selle erinevate testidega, vastavalt millele saab võistleja punkte. Olenevalt võistluse formaadist saab lahenduse esitaja tulemuse teada kas kohe või hiljem.

Millised võistlused aset leiavad?

Programmeerimisvõistlusi on üsna palju, osad neist on avatud kõigile soovijatele, osad on piiratud (nt ainult üldhariduskoolide õpilased).

Eestis toimuvad hooaja jooksul toimuvad traditsiooniliselt järgmised võistlused:

Regionaalsed võistlused, kus Eesti osaleb:

Ülemaailmsed võistlused:

Online võistlused. Internetis on mitmed serverid, kus toimuvad regulaarsed võistlused, sealhulgas:

Kuidas ma osaleda saan?

  1. Jälgi infot olümpiaadi kodulehel ning olympiaadid-meililistis.
  2. Lahtisele võistlusele saab end veebis ise registreerida ja siis ülesandeid lahendada.
  3. Eelvoorul osalemiseks leia endale lähim kool, mis eelvooru korraldab ning registreeri ennast seal.
  4. Ülejäänud võistlustele saadetakse vajadusel juba spetsiaalne kutse.

Lahendamine

Milliseid programmeerimiskeeli saab kasutada?

Milline on hea olümpiaadiülesande lahendus?

Olümpiaadiülesande lahendamisel on kaks peamist aspekti:

  1. Korrektsus ja täielikkus. See tähendab, et programm peab hakkama saama igasuguse lubatud sisendite kombinatsiooniga.
  2. Efektiivsus tähendab, et programm peab hakkama saama võimalikult suure sisendi käsitlemisega minimaalse aja jooksul.

Efektiivsuse peamine mõõdik on algoritmi ajaline keerukus. Näiteks kui me suurendame sisendit 10 korda ja programmi tööaeg pikeneb samuti 10 korda, on meil tegemist lineaarse keerukusega algoritmiga. Kui tööaeg pikeneb sisendi 10-kordsel suurendamisel aga 100 korda, on tegu ruutkeerukusega algoritmiga. Mida kiiremini pikeneb tööaeg sisendi suurendamisel, seda suurem on ajaline keerukus (niisiis näiteks ruutkeerukus on suurem kui lineaarne keerukus). Enamasti on olümpiaadiülesannetel mitu erinevat võimalikku lahendust ning väiksema keerukusega lahendus saab rohkem punkte kui suurema keerukusega lahendus, sest suurema keerukusega algoritmid ei suuda suurematel sisenditel jääda etteantud ajalimiidi piiresse.

Kuidas valmistuda?

Informaatikaolümpiaad on teiste olümpiaadidega võrreldes hea selle poolest, et veebis on massiliselt erinevaid ressursse, mida kasutada, toimub palju online-võistlusi jne.

Vt näidetena:

Miks ülesanded nii lihtsad/rasked/erineva tasemega on?

Osad ülesanded (nt lahtise võistluse esimesed ülesanded) on meelega tehtud võimalikult lihtsad, et ka programmeerimist äsja alustanud õpilased neid teha oskaks. Oskad mõne ülesande 2 minutiga ära teha? Suurepärane, võta järgmine ülesanne!

Osad ülesanded on sihitud neile, kelle eesmärgiks on rahvusvaheliselt olümpiaadilt medalit võita, arvestusega, et see oleks piisavalt suur väljakutse. Kui sa ei oska mõnd sellist ülesannet üldse teha, siis ära heida meelt, harjutamine teeb meistriks.

Kuna Eestis pole programmeerimist oskavate õpilaste arv just hiiglaslik, ei saa igale tasemele eraldi võistlust korraldada ja nii võib mõnel võistlusel (eriti lahtisel) olla väga erineva raskusega ülesandeid. Selline lähenemine võimaldab leida pingerea nii tugevamate kui ka algajamate võistlejate vahel. Ideaalne pingerida on selline, kus vahed on võimalikult ühtlased, mitte ei ole kusagil mikroskoopiliste, statistiliselt mitteoluliste vahedega troppi. Seetõttu katsutakse ülesannete komplektid disainida selliselt, et tulemuste jaotus on võimalikult lähedane lineaarsele: ideaalis on meil üks võitja, kes suudab saavutada 100% punktidest, pooled võistlejad saavad vähemalt pooled punktid jne.

Lehekülg viimati muudetud October 21, 2023, at 10:30 PM