Ü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 üks mitmest Eestis toimuvast programmeerimisvõistlusest. 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 numbrid ning arvu N ja väljastab erinevate teekondade arvu."

Võistlusel tuleb etteantud aja (nt 2-5 tundi) jooksul lahendada hulk (nt 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.

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 selgitabki välja võistluse võitja.

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 ACM-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) ja Targo Tennisberg (2015 praeguseni).

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. Peamine mõõdik on siin 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:

Lehekülg viimati muudetud February 15, 2018, at 11:47 AM