Mitä Tiran jälkeen?

Moni on varmaankin kevään mittaan ajatellut, ettei Tira loppuisi koskaan. Kaikki hyvä kuitenkin päättyy aikanaan, joten myös Tiran on päätyttävä. Onneksi Tiran päättymisen ei tarvitse tarkoittaa algoritmien koodaamisen tai opiskelun loppua, näitä aiheita käsitellään myös monilla muilla kursseilla. Nämä kurssit voi karkeasti jakaa teoreettisiin kursseihin ja koodauskursseihin, vaikka jako saattaakin olla hieman harhaanjohtava. Teoreettisilla kursseilla keskitytään algoritmien matemaattiseen tarkasteluun, ne ovat kuin Tira ilman TMC-tehtäviä. Toisaalta koodauskursseilla keskitytään eri algoritmien soveltamiseen, hieman kuten TMC-tehtävissä.

Teoreettisia kursseja

Tiran teoreettisena jatkokurssina voisi pitää kurssia Algoritmien suunnittelu ja analyysi (ASA, Design and Analysis of Algorithms), joka on yleensä järjestetty vuosittain ensimmäisessä periodissa. Tällä kurssilla käydään läpi melko sekalainen kokoelma erilaisia algoritmeihin liittyviä aiheita, joihin kuuluvat mm. dynaaminen ohjelmointi, NP-täydellisyys, tasoitettu aikavaativuusanalyysi ja satunnaiset algoritmit. Kurssi on Tiraa matemaattisempi, mutta ei vaadi kauheasti esitietoja miltään tietyltä kurssilta. Algoritmien suunnittelu ja analyysi vaatii kuitenkin sitä, että on tottunut käsittelemään asioita matemaattisesti, joten jonkin verran matematiikan opintoja kannattaa olla suoritettuna ennen kurssin aloittamista. Matematiikan kursseista hyödyllisimmät ovat varmaankin Analyysi I&II.

Tietojenkäsittelytieteen laitoksella järjestetään myös useita muita algoritmeihin liittyviä teoreettisia kursseja, mutta Tirasta ja ASA:sta poiketen, näillä kursseilla on paljon rajatumpi aihepiiri. Tällaisia kursseja ovat mm. String Processing Algorithms, Approximation Algorithms ja Randomized Algorithms. Moniin näistä kursseista liittyy myös harjoitusprojekti.

Koodauskursseja ja kurssien ulkopuolista koodausta

Ohjelmointihaasteita I&II sopivat erityisen hyvin Tiran suorittaneille. Ohjelmointihaasteita I -kurssilla on 24 ohjelmointitehtävää ja aina 8 tehdyn tehtävän välein saa opintopisteen. Alun tehtävät saattavat vaikuttaa Tiran jälkeen hyvin helpoilta, mutta viimeisimmät tehtävät ovatkin jo melko haastavia. Kurssin voi suorittaa milloin tahansa, kun haluaa suorittamansa opintopisteet, pitää siitä vain ilmoittaa Antti Laaksoselle.

Ohjelmointihaasteita II keskittyy kisakoodaukseen ja se on yleensä järjestetty syksyisin ensimmäisessä periodissa. Kurssin aikana tehdään useita ohjelmointikilpailuita pienissä joukkueissa. Kisoissa on useita TMC-tehtävien kaltaisia tehtäviä, joista mahdollisimman moni pitää saada koodattua parin tunnin aikana. Kurssi on yleensä huipentunut pohjoismaisten yliopistojen väliseen NCPC-kilpailuun, jossa on 5 tuntia aikaa koodata noin 10 vaihtelevantasoista tehtävää.

Nyt keväällä järjestetyllä Algoritmit ongelmanratkaisussa -kurssilla oli useita hyviä ohjelmointitehtäviä, jotka jäivät palautusjärjestelmään vielä kurssin päättymisen jälkeen. Vaikka näiden tekemisestä ei enää opintopisteitä saakaan, kannattaa niitä silti tehdä, jos vain kiinnostusta riittää. Kurssin materiaali ja tehtävät ovat saatavilla täältä. Kurssi perustuu Kisakoodarin käsikirjassa käsiteltäviin asioihin.

Kisakoodauksen aloittaminen voi olla myös yksi hyvä tapa kartuttaa tietojaan algoritmeista. Codeforces on tällä hetkellä maailman suurin kisakoodaukseen keskittyvä sivu ja siellä järjestetään kisoja lähes viikottain. Codeforces-kisat kestävät tyypillisesti 2h ja tehtäviä on 5 kappaletta. Tehtävien vaikeustaso vaihtelee hyvin helposta erittäin vaikeaan. Kisoissa vaaditaan monien algoritmien soveltamista ja näiden nopeaa koodaamista. Tiran tiedot ovat hyvä pohja ohjelmointikisoissa, mutta kisoihin osallistumalla oppii varmasti paljon myös Tiran ulkopuolista asiaa.


Hyvää kesää :)

-Toni (OOliOO)