Tietorakenteet

58131
8
Algoritmit ja koneoppiminen
Aineopinnot
Perustietorakenteet kuten pinot, jonot, puut ja verkot sekä niiden käsittelyalgoritmit. Esitiedot: Kurssien Ohjelmoinnin jatkokurssi (Java-ohjelmointi) ja Johdatus diskreettiin matematiikkaan suoritukset (tai esitietokoe). Huom: Kurssin harjoitukset alkavat jo ensimmäisellä luentoviikolla. Kurssikirja: T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein: Introduction to Algorithms, 3rd ed., MIT Press, 2009.
Vuosi Lukukausi Päivämäärä Periodi Kieli
2012 kevät 16.01-25.04. 3-4 Suomi

Luennot

Aika Huone Luennoija Päivämäärä
Ma 12-14 A111 Patrik Floréen 16.01.2012-22.02.2012
Ke 12-14 A111 Patrik Floréen 16.01.2012-22.02.2012
Ma 12-14 A111 Patrik Floréen 12.03.2012-25.04.2012
Ke 12-14 A111 Patrik Floréen 12.03.2012-25.04.2012

Luento ke 25.4. peruutettu!

Non finnish students, contact the lecturer beforehand.

Information for international students

There will not be lecture materials or exercises in English.

For self-studies these are the pages in the Cormen et. al book to read. For the first course exam the pages in the 3rd edition are 5-29, 43-60, 229-240, 1176-1179, 246-247, 286-298, 253-276 and for the second course exam 151-165, 29-38, 170-199, 1168-1172, 587-699, 561-572. Also the 2nd edition book is ok (the difference is mainly in the pseudocode style). The corresponding pages in the 2nd edition are for the first exam 5-27, 41-56,197-208, 1087-1090, 214-216, 253-264, 221-244 and for the second exam127-142, 27-36, 145-173, 1080-1084, 525-635, 498-509.

For the first exam also AVL-trees (not in Cormen).

There will be three batches of example exercises for the non-Finnish students; first batch , second batch , third and last batch. This are intended for self-study.

Please note: You are allowed to have with you for the exams hand-written A4-size notes (one paper, you can write on both sides).


Yleistä

 KURSSIN TULOKSET OVAT VALMISTUNEET!.

Esitiedot

Kurssin pakollisina esitietovaatimuksina on kurssit Ohjelmoinnin jatkokurssi ja Johdatus diskreettiin matematiikkaan.

Esitietokoe, joka korvaa puutteet esitietovaatimuksista, pidettiin 13.1.

Opiskelijat, joilla ei ole vielä esitietovaatimukset kunnossa, pyydetään ottamaan yhteyttä luennoijaan.

Luennot

Luentomateriaali (pdf)

Luentomateriaali korjataan sitä mukaan kun korjattavaa ilmenee, joten sitä kannattaa tulostaa osissa. Materiaalia tulee myös lisää ajan kanssa.

Korjaukset 16.1.: s. 5 (ei B+-puita), s. 9 (pariton -> parillinen), s. 10 loppusulku puuttui, s. 23 Algoritmien suunnittelu ja analyysi -kurssin nimi englanniksi.

Korjaukset 18.1.: s.46 algoritmin B aikavaativuuksissa oli kirjain A, s. 66 lisätty selventävä "(while)", s. 73 Algoritmien suunnittelu ja analyysi -kurssin nimi englanniksi, s. 98 kalvon viimeisenä kohtana ollut turha lisäselitys poistettu, s.99 kirjoitusvirhe korjattu ("jäälkeen") - tästä lähtien pienten ilmeisten kirjoitusvirheitten korjauksista ei kerrota erikseen.

Korjaukset 25.1.: s.107 tasoitettu analyysi: poistettu ettei siihen palata kurssilla (koska siihen palataan), s. 144 pidetty huolta, että mahtuu yhdelle siuvlle, s. 163 lehtisolmujen lukumäärä korjattu (puuttui +1 kaavasta), s.167 on uusi sivu, johon on koottu puiden läpikäyntien pseudokoodit ja tämän jälkeen viittaukset sivuihin on päivitetty.

Korjaukset 30.1.: s. 234 lisätty (AVL-insertin toinen osa puuttui), s. 239 pidetty huolta, että mahtuu yhdelle sivulle.

Korjaukset 7.2.: s. 278 current-sana korjattu, s. 288 prev korjattu -> pred, s. 302 m selostettu tarkemmin, s. 306 kuva korjattu.

Korjaukset 8.2.: s. 319 NIL->DEL, sl. 323 vaihdettu 27 92:ksi, jotta kokeilujunon askelpituudeksi saataisiin 5.

Korjaukset 22.2. Tilanteessa, jossa AVL-deleten johdosta AVL-ehti riikkoontuu ja korkeamman alipuun oikea ja vasen haara ovat yhtä pitkiä, ei ole annettu luennolla yksikäsitteistä vastausta käytetäänkö kiertoa vai kaksoiskiertoa. Tällaisessa yhteydessä pitäisi yksinkertaisuuden vuoksi käyttää yhtä kiertoa. Tällainen tilanne esiintyi laskarien 5 tehtävässä 3. Sivulla 238 vaihdettu algoritmin rivien 8-9 ja 10-11 paikkaa ja s. 239 lisätty korjaavan kierto-operaation yhteyteen "(mahdollisimman yksinkertainen)".

Korjaukset 12.3.: s.348 muutettu lista aikaisemmin esiintyneistä järjestämisalgoritmeista, s. 376 otsikko lisätty, s. 377 algoritmin lyöntivirheet korjattu.

Korjaukset 14.3.: s. 384-385 korjattu lyöntivirheitä epäyhtälöissä, s. 395 kalvolla 70 -> kalvolla 79, s. 396 korjattu lyöntivirheitä, myös algoritmin rivillä 1, s. 400 kalvo 147 -> kalvo 157. Ylipäätään korjattu kirjoitusvirheitä koko luvun 6 loppuosassa (pikajärjestämisestä alkaen).

Korjaukset 19.3.: s. 420 todettu että polku u:sta u:hun on nollamittainen polku, s. 426 automaatti tunnistaa vain etumerkittömiä lukuja, s. 441 algoritmin viimeisellä rivillä pitäisi olla color[u] = black, s. 456 todettu, että saadaan syvyyssuuntainen etsintä korvaamalla BFS:n jono pinolla, korjattu kirjoitusvirheitä sieltä täältä.

Korjaukset 28.3.: s. 510 kirjoitusvirheitä korjattu, s. 515 algoritmin rivi 10 korjattu (väärä sisennys), s. 514, 519-520 ja 523 viittaukset sivunumeroihin korjattu, s.516 merkitty selkeämmin mitä rivi 5 tulostaa.

Korjaukset 4.4.: s. 560 jollekin pienimmälle virittävälle puulle (V,T) (tämä on tärkeä korjaus), myös osajoukkomerkintä tehty selvemmäksi, s. 568 while -> for, s. 572 A ->T algoritmin rivillä 10, s. 580 alaindeksi 2 puuttui log*-merkinnästä, s. 581 sulkumerkkejä puuttui, toistolauseeseen -> while-silmukkaan.

Korjaukset 16.4.: s. 585 sivunumerot korjattu, s. 589 tarkennettu että etäisyysarvio on siihen mennessä tiedossa oleva etäisyys, s. 610 lisätty viittaus Cormeniin.

Luennoilla 30.1.2012 esitetty induktiotodistus. Lisälehti verkkoalgoritmien kertausosioon (lisätty kurssisivulle 16.4.2012).

Järjestämisalgortmien havainnollistuksia internetissä (Annika Piiroisen löytämät linkit:)

Luentoaikataulu:

  • Viikko 1: ma s. 1-31, ke s. 32-64
  • Viikko 2: ma s. 65-126, ke s. 127-168
  • Viikko 3: ma s. 169-204, ke s. 205-268
  • Viikko 4: ma s. 269-306, ke s. 307-347. Keko ei kuulu ensimmäisen kurssikokeen alueeseen, vaan ensimmäisen kurssikokeen viimeinen asia on hajautus.
  • Viikot 5-6: Kertausta ja vanhojen tenttitehtävien läpikäynti, ei luentoa 22.2.
  • Viikko 7: ma Keon kertausta ja s. 348-380, ke s. 381-414, kurssikokeen malliratkaisut
  • Viikko 8: ma s. 415-444, ke s. 445-476
  • Viikko 9: ma 477-498, ke s. 499-524
  • Viikko 10: ma s. 525-557, ke s. 558-583
  • Viikko 11: ma s. 584-622 ja kertausta (keko, järjestäminen), ke kertausta (verkot) ja vanhojen tenttitehtävien läpikäynti
  • Viikko 12: ma vanhojen tenttiehtävien läpikäynti, ei luentoa 25.4.

Laskuharjoitukset alkavat jo ensimmäisellä luentoviikolla!

Laskuharjoituspisteiden tarkistuslista 18.5.2012.

Ohjelmointitehtävät (TiRa-paja)

Pajatehtävien tarkastusautomaatista on nyt uusi versio, joka edellyttää että tehtävät on ohjelmoitu nimenomaan Javalla. Uusi versio tarkastelee ohjelmakoodia, eikä vain tee syöte-tuloste-testausta.

TiRa-paja

Trakla2

Tehtävät ovat traklassa. Traklaan kirjaudutaan tietojenkäsittelytieteen laitoksen tunnuksilla.

Trakla-tehtävillä on kaksi deadlineä. Ensimmäisten modulien deadline on välikoepäivä 27.2., ja loppujen välikoepäivä 7.5.

Trakla on auki. Ota yhteyttä Joel Kaasiseen (joel . kaasinen ät cs . helsinki . fi) jos et pääse kirjautumaan.

Jatkuva palaute

Mikä osio toisen puoliskon asioista on ollut vaikein? Keko: 1, Järjestäminen: 4, Verkkojen läpikäynnit: 7, Lyhimmät polut verkoissa: 8, Pienimmät virittävät puut verkoissa: 12.

Vauhti luennoilla on  nyt verkko-osiossa ollut: liian nopea: 5; nopea: 5; sopiva: 9; hidas: 0; liian hidas: 0.

Laskaritehtävistä 7 ja 8 oltiin mieltä näin: erittäin vaikeita: 2; vaikeita: 3; sopivia: 8; helppoja: 0; erittäin helppoja: 0.

Tirapajan bonustehtävistä oltiin mieltä näin: olivat hyviä: 4, olivat ok: 9, olivat huonoja: 2, olivat turhia, olisi pitänyt olla kunnon taukoa: 1. Näistä ei ollut erillisiä kommentteja.

Kurssikokeesta 1 oltiin mieltä näin: erittäin vaikea: 23, vaikea: 25, sopiva: 31, helppo: 3, erittäin helppo: 0. Kommenteista sai kuvan, että suurin ongelma oli ajan loppuminen kesken, ei tehtävien vaikeus sinänsä.

Trakla-tehtävistä oltiin mieltä näin: erittäin hyviä: 4, hyviä: 13, huonoja: 3, erittäin huonoja: 1. Edustava kommentti Traklasta: "Sisällöltään hyviä, mutta Trakla on kyllä sekava systeemi." Yksi kommentti sanoi, että eniten aikaa menee pajatehtäviin. Tähän voisi todeta, ettei kaikkia pajatehtäviä suinkaan tarvitse tehdä. Pajatehtävistä kolmasosan voi korvata Traklalla ja koko tästä puolesta voi saada korkeintaan 8 pistettä. Mutta tähän aiheeseen sopii, että tekemällä oppii, joten siksi pajatehtävät ovat käytännössä tärkeitä.

Luentoilla etenemisestä oltiin mieltä näin: aivan liian nopeasti: 22, aika nopeasti: 16, sopivasti: 6, aika hitaasti: 2, aivan liian hitaasti: 0. Luennoista oli hyviä kommentteja muun muassa siitä, että luennot on edennyt laskareita ripeämmin, joka ei ole hyvä asia.

Pajatehtävistä 1-3 oltiin mieltä näin: liian vaikeita: 17, vaikeita: 15, just sopivia: 16, helppoja: 0, liian helppoja: 0 Oli kommenttia, jonka mukaan tehtävien vaikeusaste on nousussa 1->2->3. Sanottiin näin: "Jos tavoitteena on kurssin suurin droppausprosenttti niin jatka vain samalla linjalla." Luennoijan kommentti kommentteihin: Pajasta saa opastusta, jos on vaikeuksissa. Ja toki seuraamme miten tehtävät onnistuvat ja reagoimme siihen. Ei kannata heittää pyyhettä kehään jos jotain vaikeata tulee vastaan. Ei tässä vaadita että kaikkia tehtäviä osaisi tehdä.

Viikon 2 laskareista oltiin mieltä näin: liian vaikeita: 8, vaikeita: 19, just sopivia: 11, helppoja: 3, liian helppoja: 1. Kommenteissa mm. todettiin, että matemattiset tehtävät ovat vaikeita kun matematiikkan opinnoista voi olla useita vuosia ja jopa vuosikymmen, että tehtävä 1 oli epäselvästi kirjoitettu ja osa tehtävistä liian matemaattisia.

Viikon 1 laskareista oltiin mieltä näin: liian vaikeita: 10, vaikeita: 22, just sopivia: 25, helppoja: 11, liian helppoja: 3. Kommenteissa mm. valitettiin, että liian monta ja vaikeita harjoituksia ja toivottiin lisää rekursiotehtäviä. 

Kurssimateriaali

Kurssimateriaali pohjautuu suurelta osin kirjaan: T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein: Introduction to Algorithms, 3nd ed., MIT Press, 2009. Kirjan 2. painos on sekin käyttökelpoinen.Kurssilla on muutamia asioita joita Cormenin kirjasta ei löydy. Kaikissa asioissa käsittelytapa ei vastaa täysin Cormenia.

Tietorakenteiden harjoitustyö

Kesällä on mahdollisuus suorittaa Tietorakenteen kurssille jatkoa oleva Tietorakenteiden harjoitustyö. Hyvä ajankohta harjoitystyön suorittamiselle on, kun tiedot ovat vielä tuoreessa muistissa, ja ohjelmointitaidot hyvällä mallilla. Kesällä kurssi järjestetään kaksi kertaa. 14.5.-15.6. on mahdollista suorittaa kurssi kolmen tai viiden viikon pituisena, 30.7.-31.8. viiden viikon pituisena. Kurssi on pajamuotoinen, eli ohjausta on tarjolla 3-4 kertaa viikossa. Paikalle täytyy tulla vähintään kerran viikossa keskustelemaan edistymisestä. Opettajana toimii kummallakin kurssilla Kristiina Paloheimo.

Kurssin suorittaminen

Toinen kurssikoe oli aika vaikea, mistä syystä pudotettiin vähimmäisraja pisteitä 22:sta 20:een ja laskettiin hyväksymisraja (ja raja kaikille muillekin arvosanoille) kahdella pisteellä (eli 28 pistettä antoi arvosanaksi 1 ja 48 pistettä arvosanan 5).. Näin hyväksyttyyn suoritukseen vaaditiin 28 pistettä ja vähintään 20 pistettä molemmista kurssikokeista yhteensä.

Laskuharjoituspisteiden rajat olivat seuraavat: 30-32 tehtävää 1 piste, 33-36: 2, 37-39: 3, 40-43: 4, 44-46: 5, 47-49: 6, 50-53:7 ja 54-: 8 pistettä.

Kurssin tulokset ovat tässä.

Tässä on korjattu lista lisäpisteitä ohjelmointi- ja traklatehtävistä (18.5.2012).

KURSSIPALAUTTEESEEN OLI 14.5. MENNESSÄ VASTANNEET VAIN 39 OPISKELIJAA. KÄYKÄÄ VASTAAMASSA, KIITOS! (https://ilmo.cs.helsinki.fi/kurssit/servlet/Valinta)

 Kurssiin kuuluu kaksi välikoetta (1. välikoe 27.2. klo 16-19 salissa Exactum A111, 2. välikoe 7.5. klo 16-19 sallissa Exactum A111), kukin maksimipistemäärältään 22. Kokeissa saa olla mukana itse tehty, käsin kirjoitettu yksi A4-kokoinen "lunttilappu", jonka molemmilla puolilla saa olla tekstiä. Lunttilapun tekemisessä ei siis saa käyttää tietokonetta eikä kopiokonetta.

Kurssikokeen 1 alueeseen kuuluu luentokalvojen sivut 1-327. Kurssin 2 alueeseen kuuluu koko kurssin materiaali.

Kurssikokeen 1 tehtävät. Kurssikokeen 1 tehtävien 1 ja 3 malliratkaisut. Kurssikokeen 1 tehtävien 2 ja 4 malliratkaisut. Koetulokset näkyvät  samalla tarkistuslistalla kuin laskuharjoitustehtävät. Tehtävien keskiarvot ovat 1: 3,77/5, 2: 3,93/6, 3: 4,72/6, 4: 2,25/5, koko tentin: 14,67/22.

Kursikokeen 2 tehtävät. Kurssikokeen 2 tehtävien 1 ja 3 malliratkaisut. Kurssikokeen 2 tehtävien 2 ja 4 malliratkaisut. Tenttien tulokset ovat nyt nähtävänä laskuharjoituspistelistassa ja tuloslistassa. Tehtävien keskiarvot ovat: 1: 3,808/4, 2: 2,80/4, 3: 4,14/6, 4: 3,78/8, koko tentin: 14,53/22. Vertailtaessa kurssikokeeseen 1 on muistettava, että monet huonosti menestyneet jättivät ensimmäisen kurssikokeen jälkeen kurssin kesken, joten luvut eivät ole vertailukelpoisia.

PALAUTETILAISUUS PIDETÄÄN PE 25.5. KLO 15-16 HUONEEN A316 ULKOPUOLELLA.

Harjoituksia on kolmenlaisia:

  • Tavallisia laskuharjoituksia, joista voi saada yhteensä 8 pistettä. Yhden pisteen saa tekemällä noin 50% tehtävistä. Täydet 8 pistettä saa tekemällä noin 90%:lla tehtävistä
  • Ohjelmontitehtäviä, joista saa ohjausta TiRa-pajassa ja joista voi saada yhteensä 8 pistettä (samalla kaavalla: 50% antaa 1 pisteen, 90% antaa 8 pistettä). Ohjelmointitehtävien määräaika on tiistai-aamuna klo 7. Ohjelmointitehtävät tarkastetaan TMC-ohjelmalla ("Test My Code").
  • TRAKLA2-automattitehtäviä, joilla voi korvata (noin) 1/3 ohjelmointitehtävistä (eli pistemäärä sisällytetään ohjelmointitehtäväpistemäärään). Tarkka kaava riippuu TRAKLA2-tehtävien määrästä.

Kurssin suoritukseen vaaditaan vähintään puolet kurssin kokonaispistemäärästä eli 30, koepisteiden summan täytyy myös olla vähintään 22 (eli vaikka ensimmäisestä kurssikokeesta 9 ja toisesta 13). Huomaa, että harjoitukset eivät ole pakollisia, mutta jos harjoituksia ei tee, voi maksimissaan saada koepisteiden summan verran pisteitä, eli ei ole mahdollista saada ylempiä arvosanoja. Tällöin voisi olla eduksi suorittaa kurssi erilliskokeella ilman että harjoituspisteet vaikuttaisivat (viimeinen vaihtoehto alla).

Kurssin jälkeisessä ensimmäisessä (kesäkuun) erilliskokeessa voi kurssin suorittaa neljällä vaihtoehtoisella tavalla:

  • Erilliskokeen osalla 1 korvataan kurssikoe 1 (maks. 22 p.), kurssikoe 2 ja laskuharjoituspisteet otetaan huomioon.
  • Erilliskokeen osalla 2 korvataan kurssikoe 2 (maks. 22 p.), kurssikoe 1 ja laskuharjoituspisteet otetaan huomioon.
  • Erilliskokeella korvataan molemmat kurssikokeet (maks 44 p.), laskuharjoituspisteet otetaan huomioon.
  • Erilliskokeella korvataan kurssin koko suoritus (maks. 60 p.), laskuharjoituspisteitä ei oteta huomioon.

Myös erilliskokeissa saa olla mukana itse tehty, käsin kirjoitettu yksi A4-kokoinen " lunttilappu", samalla tavalla kuin välikokeissa.

Harjoitusryhmät

Ryhmän numero: 1
Aika Huone Ohjaaja Päivämäärä Huomioitavaa
Ke 14-16 B222 Miikka Hilke 16.01.2012-24.02.2012
Ke 14-16 B222 Miikka Hilke 12.03.2012-27.04.2012
Ryhmän numero: 2
Aika Huone Ohjaaja Päivämäärä Huomioitavaa
Ke 16-18 B222 Patrik Floréen 16.01.2012-24.02.2012
Ke 16-18 B222 Patrik Floréen 12.03.2012-27.04.2012
Ryhmän numero: 3
Aika Huone Ohjaaja Päivämäärä Huomioitavaa
Pe 12-14 B222 Pekka Mikkola 16.01.2012-24.02.2012
Pe 12-14 B222 Pekka Mikkola 12.03.2012-27.04.2012
Ryhmän numero: 4
Aika Huone Ohjaaja Päivämäärä Huomioitavaa
Pe 14-16 B222 Pekka Mikkola 16.01.2012-24.02.2012
Pe 14-16 B222 Pekka Mikkola 12.03.2012-27.04.2012
Ryhmän numero: 5
Aika Huone Ohjaaja Päivämäärä Huomioitavaa
Ti 14-16 BK107 Joel Kaasinen 16.01.2012-27.04.2012 TIRAPAJA!
Ma 14-20 BK107 Joel Kaasinen 16.01.2012-27.04.2012 TIRAPAJA!
Pe 12-14 BK107 Joel Kaasinen 16.01.2012-27.04.2012 TIRAPAJA!
To 10-14 BK107 Joel Kaasinen 16.01.2012-27.04.2012 TIRAPAJA!