Tietorakenteiden harjoitustyö (alkukesä)

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ö
2012 kesä 14.05-15.06. 5-5 Suomi Tomi Pasanen

Harjoitusryhmät

Group: 1
Aika Huone Ohjaaja Päivämäärä Huomioitavaa
Ti 10-14 B221 Kristiina Paloheimo 14.05.2012—01.06.2012
Ma 12-16 B221 Kristiina Paloheimo 14.05.2012—01.06.2012
To 10-14 B221 Kristiina Paloheimo 14.05.2012—01.06.2012
Ke 12-16 B221 Kristiina Paloheimo 14.05.2012—01.06.2012
Group: 2
Aika Huone Ohjaaja Päivämäärä Huomioitavaa
Ti 10-14 B221 Kristiina Paloheimo 04.06.2012—15.06.2012 Lisäksi ryhmän 1 kokoontumisajat!
Ma 12-16 B221 Kristiina Paloheimo 04.06.2012—15.06.2012 Lisäksi ryhmän 1 kokoontumisajat!
To 10-14 B221 Kristiina Paloheimo 04.06.2012—15.06.2012 Lisäksi ryhmän 1 kokoontumisajat!
Ke 12-16 B221 Kristiina Paloheimo 04.06.2012—15.06.2012 Lisäksi ryhmän 1 kokoontumisajat!

Ryhmä 1 on kolmen viikon ryhmä ja ryhmä 2 viiden viikon ryhmä!

Yleistä

Kurssin aloitusinfot ovat maanantaina 14.5. 12.15 ja 14.15 luokassa B221. Jos et pääse tuolloin paikalle, sovi aika ohjaajan kanssa. Aloitusinfossa kerrotaan kurssin yleisiä asioita ja käytäntöjä. Jokaisen opiskelijan kanssa sovitaaan aihe. 3 viikon ryhmän opiskelijoiden suosittellaan jäämään paikan päälle kirjoittamaan aihekuvaus ja laittamaan pystyyn versionhallinta, koska 1. deadline osapalautuksille on heillä jo tiistaina 15.5.  

Ohjaajan yhteystiedot: mkpalohe [ at ] cs.helsinki.fi

Irc-kanava: #TiraKesa

 

Ohjausajat - kumpikin ryhmä - B221, 14.5.-1.6.

 

Maanantai 12-16

Tiistai 10 - 14

Keskiviikko 12-16

Torstai 10-14 (24.5. ja 31.5. 12-14)

 

Ohjausajat - 5 viikon ryhmä - B221, 4.6.-14.6.

 

Maanantai 10-13.30 (lounastauko 12.00-12.30)

Tiistai 13 - 16

Keskiviikko 10-13.30 (lounastauko 12.00-12.30)

Torstai 13-16

Kurssi on pajamuotoinen, kaikki ohjaus/tapaamisajat ovat tarkoitettu ohjaukseen. Paikalla ei ole pakko olla kuin kerran viikossa (3 viikon ryhmällä 2 krt/vko), toki saa tulla paikan päälle tekemään työtä vaikka jokaiselle ohjauskerralle. Kerran viikossa on tultava juttelemaan ohjelman edistymisestä ja siitä, mitä on tekemässä tulevalla viikolla. Yhteensä pakollisia tapaamisia on siis 5 kpl (3 viikon ryhmä), tai 6 kpl (5 viikon ryhmä). Ensimmäinen tapaaminen on aloituskerta. Tällöin sovitaan projektin aihe. Viimeinen tapaaminen on projektin demo-tilaisuus. Tässä välissä on siis käytävä keskustelemassa työstä ja edistymisestä 3-4 kertaa (ryhmästä riippuen).

Kurssin suorittaminen

Kursilla opiskelija toteuttaa ohjelman, joka ratkaisee jonkin ohjelmointiongelman. Ongelmanratkaisuun käytetään sopivia algoritmeja sekä tietorakenteita. Oppimismatriisin tiedoista poiketen, opiskelja valitsee ratkaistavan ongelman yhdessä ohjaajan kanssa. Suoritus ei edellytä oman algoritmin kehittämistä. Tämäkin on mahdollista, mikäli opiskelija haluaa haastavamman aiheen.

Keskeistä työsä on, että ohjelma on toimiva ja tehokas. Sen tullee kaikissa tapauksissa antaa nopeasti oikea vastaus. Työn aiheesta riippuu, miten suuria tapauksia ohjelman tulee pystyä käsittelemään. Tämä sovitaan ohjaajan kanssa.

Ohjelma toteutetaan Java-kielellä, sen ohjelmointikäytänteitä noudattaen. Myös muiden kielten käyttö on mahdollista, perustelluista syistä. Kurssin yksi tavoite on oppia toteuttamaan itse tietorakenteita, ei käyttämään muiden toteuttamia. Tästä syystä tarvittavat algoritmit ja tietorakenteet tulee toteuttaa itse. Nyrkkisääntönä vain perustietotyyppejä, taulukoita ja merkkijonoja saa käyttää, muu on tehtävä itse, erityisesti Tietorakenteet-kurssilla opetellut rakenteet. Javan muita apuvälineitä, kuten tiedostonkäsittelyluokkia, saa tietenkin käyttää. Javan valmiita tietorakenteita (ArrayList, HashMap...) tai algoritmeja (esim. Collections.sort) ei saa käyttää lopullisessa työssä. Jos olet epävarma jonkin luokan käyttämisestä, kysy ohjaajalta. Esim. ArrayListin käyttö on sallittua tietyissä tilanteissa. 

 

Hyväksi koettu tapa tehdä työ vaiheittain on laittaa ensin kuntoon algoritmin ydin käyttäen Javan valmista kalustoa (jonot, keot, järjestämisalgoritmit). Kannattaa siis pyrkiä toteuttamaan algoritmin ydin nopeasti ja sen jälkeen korvata käytetty kalusto omilla toteutuksilla. Eli toteuttaa rajapintojen takana olevat rakenteet ja/tai algoritmit itse.  Tätä tapaa käytetään osapalautusten pohjana algoritmin/tietorakenteiden kehityksen osalta. Mikäli toteutat työn erilaisella lähestymistavalla, sovi työn edistymisen "Milestone":t jo 1. tapaamisella.