Aineopintojen harjoitustyö: Tietorakenteet ja algoritmit (periodi I)

58161
3-5
Algoritmit ja koneoppiminen
Aineopinnot
Opintojaksossa opiskelijat harjoittelevat vaikeahkojen tietorakenteiden ja algoritmien toteuttamista, sekä erilaisten ratkaisujen vertailemista käytännössä. Työn arvioinnissa keskeistä on ohjelmakoodin oikeellisuus, selkeys ja tehokkuus, sekä vertailuissa saatujen tulosten esittäminen ja arviointi. Työn tekeminen edellyttää jossain määrin tieteellisen kirjallisuuteen perehtymistä. Esitiedot: Tietorakenteet ja algoritmit sekä Aineopintojen harjoitustyö: Ohjelmointi.
Vuosi Lukukausi Päivämäärä Periodi Kieli Vastuuhenkilö
2013 syksy 02.09-11.10. 1-1 Suomi Tomi Pasanen

Harjoitusryhmät

Group: 1
Aika Huone Ohjaaja Päivämäärä Huomioitavaa
Ti 16-18 B119 Jani Rahkola 03.09.2013—03.09.2013 Aloitusluento TI 3.9. 16-18 B119.
Ke 16-18 C220 Jani Rahkola 09.10.2013—09.10.2013 Aloitusluento TI 3.9. 16-18 B119.

Yleistä

Demotilaisuudet ke 9.10 klo 16-18 salissa C220 ja to 10.10 klo 12-14 salissa B221

Pajaohjaus loppu

Jos et pääse aloitusluennolle, ota yhteyttä ohjaajaan. Tilaisuudessa kerrotaan miten kurssi toimii ja sovitaan ohjausajoista ja tavoista.

Ohjaajat

Jani Rahkola, jprahkol( at )cs.helsinki.fi, rahcola@IRCnet

Kanava

#tiralabra-2013-1

Deadlinet

Muista raportoida viikon tekemisesi sovitulla tavalla.

Demotilaisuus viimeisellä opetusviikolla 7.10. - 11.10.

Lopullinen palautus koeviikon perjantaina 18.10. kello 23.59 mennessä.

Palautus

Kaikki dokumentit, koodi ja mahdolliset skriptat yhdessä pakatussa kansiossa toimitettuna ohjaajalle.

Kurssin suorittaminen

tl;dr;

Dokumentit .txt, .html tai .pdf muodossa, riippuen ladonnan tarpeesta. Pyri selvään ja tiiviiseen esitykseen, yhdestä kahteen sivua.

  • Määrittelydokumentti
    • Minkä ongelman ratkaiset ja millä tietorakenteella tai algoritmilla
    • Miten tehokkaasti toteutuksesi tulee ongelman ratkaisemaan (aika- ja tilavaativuudet)
    • Mitä lähdettä käytät. Mistä ohjaaja voi ottaa selvää tietorakenteestasi/algoritmistasi
  • Toteutusdokumentti
    • Ratkaiseeko toteutuksesi ongelman määrittelyssä esittämälläsi tehokkuudella
    • Miksi näin on. Perustele pseudokoodia käyttäen
    • Onko toteutuksessasi puutteita
  • Testausdokumentti
    • Onko automaattista testausta
    • Millaisilla testisyötteillä ajoit toteutustasi
    • Millaisia tuloksia testisi antoivat
  • README
    • Miten ohjelmasi kääntyy
    • Miten ohjelmasi ajetaan
    • Millaisia syötteitä ohjelmasi ottaa

Kurssilla toteutat itsenäisesti jonkin algoritmin tai tietorakenteen, tai vertailet useaa saman ongelman ratkaisevaa algoritmia tai tietorakennetta. Tärkeää on, että toteutus saavuttaa ongelman ratkaisun tunnetut aika- ja tilavaativuudet. Esimerkiksi toteuttamasi kekojärjestämisen tulee toimia ajassa O(n log n). Toteutuksen tulee olla myös oikeellinen, joten koodin selkeys ja testaus ovat myös merkittävässä osassa. Erityisesti vertailutöissä toteutuksien tehokkuustestaus on tärkeä osa. Testisyötteet tulee valita perustellusti ja testien tulokset esittää havainnollisesti.

Suoritukseen sisältyy myös jonkin verran dokumentaatiota. Ensiksi määrittelet mitä algoritmeja ja/tai tietorakenteita aiot toteuttaa. Määrittelydokumentissa olisi myös hyvä kertoa minkä ongelman ohjelmasi ratkaisee, tai minkälaisen rajapinnan se tarjoaa. Määrittelydokumenttia varten selvität myös algoritmien ja tietorakenteiden aika- ja tilavaativuudet ja etsit muutaman hyvän lähtee. Lähteet auttavat myös ohjaajaa antamaan sinulle parempaa opastusta.

Kun toteutus alkaa olla kasassa, dokumentoit seuraavaksi sen. Toteutusdokumentissa kuvaat ohjelman rakenteen yleisellä tasolla. Tämä helpottaa ohjelmakoodin lukemista. Dokumentin keskeinen sisältö on toteutuksen aika- ja tilavaativuusanalyysi. Perustelet miksi ohjelmasi saavuttaa määrittelyssä asettamasi tavoitteet, ja teet analyysin pseudokoodille. Vertailutöissä esität suorittamiesi suorituskykyvertailujen tulokset. Toteutusdokumenttiin on myös hyvä listata ohjelman mahdolliset puutteet ja parannusehdotukset.

Testausdokumentti voi olla joko erillinen, tai osa toteutusdokumenttia. Siinä kerrot millaista testausta olet ohjelmallesi suorittanut. Vertailutöissä perustelet valitsemasi testisyötteet ja esität niillä saadut tulokset havainnollisessa muodossa. Useimmiten tämä tarkoittaa kuvaajia. Myös yhden algoritmin tai tietorakenteen töissä aika- ja tilavaativuusanalyysin tueksi on hyvä esittää testiajojen tuloksia.

Viimeinen dokumentti on README joka kertoo kuinka toteutuksesi käännetään, ajetaan ja testataan. Mahdolliset riippuvuudet tulee olla listattu, ja kääntämistä ja ajamista varten olisi hyvä olla komentoriviltä toimivat scriptit.

Ja sitten käytännössä

Toteuttamiseen käytettävän kielen saat valita melko vapaasti. Ohjaaja käyttää kuitenkin viimeisen sanan. Java on turvallinen ja hyvä valinta, ja sen työkalut ovat parhaasta päästä. Tämä on myös hyvä tilaisuus kokeilla ohjelmointikieltä johon olet jo hiukan tutustunut. Muista kuitenkin, että itse toteutus vie aikaa tutunkin kielen kanssa.

Yksikkötestaus kuuluu nykyaikaiseen ohjelmistokehitykseen, ja tietorakenteen tai algoritmin toteuttaminen on erinomainen tilaisuus harjoitelle testausta. Yksikkötestit antavat varmuutta sille, että toteutuksesi toimii oikein. Ne auttavat myös tehdessäsi muutoksia jo toimivaan koodiin.

Ohjaajat suosittelevat lämpimästi versionhallinan käyttöä. Jos et tiedä minkä valitsisit, ota Git. Vaikkei versionhallinan käyttösi olisikaan juuri muuta kuin yksi iso commit jokaisen koodaustuokiosi lopuksi, on versionhallinnasta yksi iso hyöty. Se on helppo tapa jakaa haluamasi versio koodistasi ohjaajan tarkasteltavaksi. Githubin tai jonkin vastaavan palvelun käyttö tekee kaikesta vielä helpompaa.

Aiheita

Klassikoita

  • Reitinhaku verkossa
  • Kauppamatkustajan ongelma
  • Hakupuut
  • Keot
  • Pakkausalgoritmit

Seikkailunhaluisille

  • Funktionaaliset tietorakenteet
  • Salausalgoritmit
  • Säännöllisten lausekkeiden tunnistaja
  • Pelitekoälyt
  • Merkkijonoalgoritmit

Arvostelu

Arvosana 0-5 määräytyy pisteiden 0-30 mukaan lineaarisesti. Hyväksyttävä suoritus vaatii vähintään viisi pistettä, arvosana 5 vähintään 25 pistettä. Työ arvostellaan seuraavien kriteerien mukaan.

  • Oikeellisuus - 15p
    • Testaus - 5p
    • Toimivuus - 10p
  • Tehokkuus - 10p
  • Selkeys - 5p
    • Koodi - 3p
    • Dokumentaatio - 2p