Tietorakenteet ja algoritmit

58131
8-10
Algorithms and machine learning
Intermediate studies
Perustietorakenteet kuten pinot, jonot, puut ja verkot sekä niiden käsittelyalgoritmit. Esitiedot: Ohjelmoinnin jatkokurssi (Java-ohjelmointi) ja Johdatus yliopistomatematiikkaan (Johdatus diskreettiin matematiikkaan). 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.

Exam

24.02.2014 16.00 A111
02.05.2014 09.00 A111
Year Semester Date Period Language In charge
2014 spring 13.01-23.04. 3-4 Finnish Patrik Floréen

Lectures

Time Room Lecturer Date
Mon 10-12 A111 Patrik Floréen 13.01.2014-19.02.2014
Wed 10-12 A111 Patrik Floréen 13.01.2014-19.02.2014
Wed 10-12 A111 Patrik Floréen 12.03.2014-02.04.2014
Mon 10-12 A111 Patrik Floréen 17.03.2014-14.04.2014
Wed 10-12 CK112 Patrik Floréen 09.04.2014-09.04.2014

Exercise groups

Group: 1
Time Room Instructor Date Observe
Tue 16-18 B119 Pauli Perälä 13.01.2014—21.02.2014
Tue 16-18 B119 Pauli Perälä 10.03.2014—18.04.2014
Group: 2
Time Room Instructor Date Observe
Wed 12-14 B222 Mika Huttunen 13.01.2014—21.02.2014
Wed 12-14 B222 Mika Huttunen 10.03.2014—18.04.2014
Group: 3
Time Room Instructor Date Observe
Wed 14-16 B222 Patrik Floréen 13.01.2014—21.02.2014
Wed 14-16 B222 Patrik Floréen 10.03.2014—18.04.2014
Group: 4
Time Room Instructor Date Observe
Fri 14-16 D122 Pauli Perälä 13.01.2014—21.02.2014
Fri 14-16 B222 Pauli Perälä 10.03.2014—25.04.2014

Non finnish students, contact the lecturer beforehand.

Information for international students

The course is given in Finnish. There will not be lecture materials or exercises in English. Non-Finnish speakers please contact the lecturer before starting the course!

At the course, students are expected to know programming in the extent of the Java programming courses Ohjelmoinnin perusteet and Ohjelmoinnin jatkokurssi and mathematics in the extent of the course Johdatus yliopistomatematiikkaan - Introduction to University Mathematics, or similar.

For self-studies these are the pages in the book Cormen, Leiserson, Rivest, Stein:  Introduction to Algorithms, 3rd edition: 5-29, 43-60, 229-240, 1176-1179, 246-247, 286-298, 253-276, 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 5-27, 41-56,197-208, 1087-1090, 214-216, 253-264, 221-252,127-142, 27-36, 145-173, 1080-1084, 525-635, 498-509.

For the first exam also AVL-trees (not in Cormen) are included. The material is available here. Decided on the spring 2014 course: The first exam covers the material up to hashing, but not heaps.

So to make this completely clear, the following broad topics were included in the first exam: introductory stuff like recursion, invariant and O-notation, stacks, queues and linked lists, trees, hashing. The second exam thus covers everything, in particular: heaps, sorting, graphs.

Some freely available videos from MIT covering even more than what this course covers (but not AVL-trees).

Three batches of example exercises for the non-Finnish students have been prepared for the course in 2012: first batch , second batch , third and last batch. This are intended for self-study and are suitable also in year 2014.

We offer two ways to pass this course: either by participating in the two exams on the normal course OR by participating in ONE separate exam covering the full course.

The next separate exam is 10.6.2014 at 16.00 in Exactum B123. Please note that although this is a "renewal exam" it is also a separate exam. Please note that you are allowed to have a hand-written A4-sized sheet of paper of personal notes with you at the exam (you can write on both pages). No pocket calculators at the exam.

Please note: if you wish to have the exam questions in English, you have to explicity request it from the lecturer (patrik.floreen@cs.helsinki.fi) in advance, perferably at least one week before.

General

Esitiedot

Kurssin esitietovaatimuksina on kurssit Ohjelmoinnin jatkokurssi ja Johdatus yliopistomatematiikkaan (aiemmin Johdatus diskreettiin matematiikkaan). Kurssin suorittaminen on käytännössä erittäin vaikeata, jos näissä esitiedoissa on huomattavia puutteita. Esitietovaatimuksia ei enää testata esitietokokeessa, niin kuin vielä pari vuotta sitten. Luennoijalta ei siis tarvitse kysyä, saako osallistua kurssille vaikka esitietokurssi puuttuu.

Luennot

Luentomateriaali (pdf). Materiaali päivitetään kurssin kuluessa.

Korjauksia 13.1.: s. 8 viittaus lyhimpien polkujen ongelmaan, s. 16 log_a n, s. 31 reittien lkm suhteessa kaupunkien määrään (kun on 32 kaupunkia on 30! vaihtoehtoista järjestystä välille jääville 30 kaupungille; vanhassa tekstissä luki 30 kaupunkia ja 30! vaihtoehtoa).

Muutoksia 17.1.: s. 33, 39, 70 laitettu koodiin mukaan "invariantin paikka" sopiviin kohtiin.

Korjauksia 20.1.: s. 65 neljä apumuttujaa -> viisi apumuuttujaa, s. 81 algoritmin rivillä 5 korjattu lattiafunktion paikka.

Korjauksia 22.1.: s. 131 koodin rivi 6 liikaa -> liian vähän, s. 133 kuudes bullet: mainittu myös tapaus n push-operaatiota, eli pinon koko on n.

Korjauksia 27.1.: s. 141 koodissa korjattu = -> ==, s.150 muutettu kuvassa linkki nil muotoon L.nil.

Muutoksia 1.2.: s. 105 lisätty "keskimäärin" kohtaan hajautustaulun search, s. 280 viimeisellä rivillä itseisarvo x < 1, s. 295 find -> search, s. 334 lisätty sana "keskimäärin" ajassa O(1), s. 627 peruuttava algoritmi -> peruuttava etsintä (otsikossa). Lisäksi muutama selvä lyöntivirhe siellä täällä (esim. keskinäärin -> keskimäärin).

Korjauksia 5.2.: s. 338 korjattu lukujen numerot (7 ja 8 eikä 6 ja 7), s. 339 tarkennettu että kuvan puu on maksimikeko (aiemmin luki vain "keko").

Korjauksia 19.3.: s. 504 lauseessa 8.3 ollaan verkossa G ei transpoosiverkossa, joten todistuksessa on korjattu DFS-visit(G,x). Huomasin myös, että numerointi on väärin; verkkoluku on luku 8, joten kaikki lemmat ja lauseet on numeroitava 8.1 jne eikä 7.1 jne.

Oppimista tukevaa lisämateriaalia internetissä (HUOM! Yksityiskohdat eivät välttämättä ole toteutettu täsmälleen niin kuin Cormenin kirjassa ja luentomateriaalissa): Tietorakenteiden visualisointeja (esimerkiksi tässä binääripuiden delete on erilainen, kun on kaksi lasta poistettavalla alkiolla). Järjestämisalgoritmien visualisointi. Lyhimpien polkujen etsinnän visualisointi.

Kurssikokeen 1 alueeseen kuuluu luennoilla 5.2. tehdyn päätöksen mukaisesti luennot hajautukseen asti, kussikokeen 2 alueeseen kaikki, mutta erityisesti keko, järjestäminen ja verkot. On huomattava, että Verkot-luvun lopussa on "ylikurssia", joka ei tule kokeeseen: eli kokeeseen ei tule A* tai vuo verkoissa; ihan luvun lopussa on yhteenveto, joka koskee aiemmin esitettyjä asioita ja on sitä kautta siis koealuetta. Algoritminsuunnitelumenetelmiä-luku on yhteenveto aiemmin kurssilla mainitusta asioista.

Luentoaikataulu:

  • Viikko 1: ma s. 1-32, ke s. 33-61
  • Viikko 2: ma s. 62-106, ke s. 107-143
  • Viikko 3: ma s. 144-197, ke s. 198-251
  • Viikko 4: ma s. 252-308, ke s. 309-334
  • Viikko 5: ma s. 335-375, ke s. 376-421
  • Viikko 6: Kertausta ja vanhojen tenttitehtävien läpikäyntiä. Huom: ensimmäisen tentin alue päättyy sivuun 334. Maanantain luennolla kerrattiin monisteen luvut 1-3.
  • Tenttiviikolla ja väliviikolla ei ole luentoja eikä laskuharjoituksia (mutta kylläkin pajatehtävien bonustehtäviä).
  • Viikko 7: Luento ma 10.3. on peruutettu. Toisin sanoen, periodin 3 viimeinen luento on 19.2. ja periodin 4 ensimmäinen luento on 12.3. Ke 12.3. s. 422-462.
  • Viikko 8: ma s. 463-487, ke s. 488-512
  • Viikko 9: ma s. 513-534, ke s. 535-564
  • Viikko 10: ma s. 565-593, ke s. 594-loppu
  • Viikko 11: Kertausta ja vanhoja tenttitehtäviä. Huomaa keskiviikon luennon poikkeuksellinen sali CK112! Keskiviikon 9.4. luento peruutettu, koska Patrik on sairaana. Patrikin laskuharjoitukset pitää Mika Huttunen.
  • Viikko 12: Kertausta ja vanhoja tenttitehtäviä. Luento ke 16.4. on peruutettu.
  • Pääsiäisloma on 17.4.-23.4., minkä aikana EI ole opetusta (ei luentoja, ei laskuharjoituksia).

Harjoitukset

Harjoituksia on kahdenlaisia: Tavalliset laskuharjoitukset ja ohjelmointitehtävät (Tira-paja). Aikaisempina vuosina käyttössä olleista ns. Trakla-tehtävistä on luovuttu.

Laskuharjoitukset: Laskuharjoituksia ei palauteta etukäteen, vaan tehdään etukäteen ja käydään läpi laskuharjoitustilaisuudessa. Jos sinulla on vaikeuksia laskuharjoitusten kanssa, voi kysyä neuvoja Jarmolta pajassa. Laskuharjoitukset ja pajat alkoivat jo ensimmäisellä luentoviikolla!

Huomio: Jos tehtävä koostuu monesta alakohdasta (a, b, c, ...), voit merkitä rastin tehtävän suorituksen merkkinä, jos olet valmis tulemaan taululle esittämään tehtävä (minkä tahansa kohdan).

Laskuharjoituspisteiden tarkastaminen: Yrittääkää tätä  linkkiä Tikliin.

Tira-paja. Määräaika on aina seuraavan viikon tiistaina klo 01.00 (siis maanantain ja tiistain välisenä yönä). Ensimmäisten pajatehtävien määräaika on siis ti 21.1. klo 01.00. Yhteyshenkilö: jarmo.isotalo(at)cs.helsinki.fi. Tira-pajassa on pääsiäisen bonusviikko. Tira-paja on nyt suljettu.

Jatkuva palaute

Viimeisessä kysymyksessä kysyttiin. Saatiin 20 vastausta. Toinen kurssikoe oli 2 mielestä vaikea, 2 mielestä vähän vaikea, 7 mielestä sopiva, 6 mielestä aika helppo ja 3 mielestä helppo.

Kymmenennessä kysymyksessä kysyttiin nyt mitä kurssin loppupuolella on vaikeita asioita. Tähän vastasi 18. Eniten ääniä sai kohdat Transitiivinen sulkeuma (10 ääntä), Pisin polku DAGissa (7 ääntä), Union-Find (7 ääntä) ja Kruskalin algoritmi (5 ääntä). Suurin osa aiheista sai 1-4 ääntä. Nolla ääntä sai Keko ja Verkon syvyyssuuntainen etsintä.

Yhdeksäs kysymys oli mikä tehtävä oli opettavaisin laskareissa ja pajassa. Kysymys oli harvinaisen epäsuosittu; per 31.3. ei ollut yhtäkään vastausta, joten vaihdoin uuteen kysymykseen, joka on tärkeämpi kertausluentojen kannalta.

Kahdeksas kysymys oli "Onko tarpeen aktivoida opiskelijoita luennoilla?" Vastaukset: Kyllä 1, Ehkä 6, Ei 6, Ei maanantai-aamuisin 3, En tiedä 3. Eli opiskelijat eivät kaipaa aktivointia... Tekstikommenteissa todettiin, että kyselyn kohteeksi joutuminen voi aiheuttaa stressiä, että ei ainakaan saa pakottaa vastaamaan ja konkreettisena ehdotuksena ehdotettiin ryhmäkeskustelua luennoilla.

Seitsemännin viikon kysymyksenä oli vapaavalintainen tekstivastaus paja-tehtävistä. Kommenteista suurin osa oli sensuuntaisia, että on vaikeita ja tarvittaisiin jotain vinkkejä lisää tehtävien tekemiseen. Oli myös mielipide, että saisi olla vähän haastettakin.

Kuudennen viikon kysymys: Tentti oli erittäin vaikea: 1, vaikea: 7; sopiva: 22, helppo: 5, erittäin helppo: 1. Vaikein tehtävä oli nro 1: 3; nro 2: 13; nro 3: 4; nro 4: 13.

Viidennen viikon kysymys: Sana oli vapaa, mutta vain 8 vastasi. Yksi vastaaja valitti vaikeita tehtäviä, luentokalvoihin haluttiin sisällysluettelo, ehdotettiin että laskuharjoitukset olisi samaa asiaa kuin mitä sillä viikolla luennoidaan (luennoijan huomio: on tarkoituksella niin että ensin käsitellään asia luennoilla, vasta sitten laskuharjoituksissa),  yksi valitti laskuharjoituksista (mm. ryhmäkeskusteluissa osa ei tee oikein mitään), pari olivat tyytyväisiä, yksi piti vaativuustasoa sopivana ja yksi oli huolissaan siitä meneekö tentti hyvin.

Neljännen viikon kysymys: Mitkä aiheet ovat olleet vaikeita tähän mennessä (saa vastata 1-3 vaihtoehtoa): rekursio: 10, invariantti: 12, suuruusluokat (O-notaatio) käsitteenä: 2, suuruusluokkien todistaminen: 18, aika- ja tilavaativuuksien määrittäminen käytännössä: 7, pino: 1, jono: 1, linkitetty lista: 6, binääripuun läpikäynti: 8, binäärihakupuu: 5, AVL-puu: 13, puun käyttö ongelmanratkaisussa: 19, hajautus: 15, ei ole ollut mitään vaikeaa: 2 .

Kolmannen viikon kysymys: Pajatehtävät tähän mennessä ovat olleet liikan vaikeita: 26, sopivia: 24, turhan helppoja: 2.

Toisen viikon kysymys: Laskuharjoitustehtävät 1 ovat olleet liian vaikeita: 20, sopivia: 44, liian helppoja: 3.

Ensimmäisen kysymyksen vastaukset: Ensimmäisellä viikolla olemme edenneet kurssilla liian nopeasti:12 , sopivalla vaudilla: 27, liian hitaasti: 8.

Completing the course

Kurssiin kuuluu kaksi koetta, kukin 22 maksimipistettä, eli yhteensä 44 maksimipistettä. 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. Tentissä ei saa olla taskulaskinta.

Kurssikoe 1 oli 24.2.2014 klo 16.00 saleissa Exactum A111 ja B123. Kurssikokeen 1 tehtävät ja malliratkaisut. Keskiarvo 14,97 / 22, tehtävien keskiarvot: 1: 2,65/4, 2: 3,61/6, 3: 4,53/6, 4: 4,19/6. Palautetilaisuus: luentotauolla 12.3. ja sen jälkeen voi ottaa yhteyttä kokeen korjaajaan Mika Huttuseen.

Kurssikoe 2 oli 2.5.2014 klo 9.00 salissa Exactum A111. Kurssikokeen 2 tehtävät ja malliratkaisut. Keskiarvo 14,80 / 22, tehtävien keskiarvot: 1: 3,00/4, 2: 4,20/6, 3: 4,21/6, 4: 3,40/6. Kokeen korjasi Mika Huttunen (mika.huttunen@helsinki.fi) ja palautetta vastauksista saatte ottamalla sähköpostitse yhteyttää Mikaan 30.5. mennessä. Tästä löytyvät laskuharjoitus- ja koepisteet.Pajapisteet ja lisäopintopisteet tarkistusta varten.

Kurssipalaute: Kurssipalautelomakkeeseen vastasi 37 henkeä. Vastaukset olivat seuraavanlaisia: "Kurssin tavoitteet olivat minulle alusta alkaen selvät" 4.2/5 ,"Kurssilla käytetty materiaali tuki oppimistavoitteiden saavuttamista" 4.4/5, "Toiminta kurssilla tuki oppimistavoitteiden saavuttamista" 4.2/5, "Kurssin arviointi mittasi keskeisten oppimistavoitteiden saavuttmamista" 4,1/5, "Kurssi oli työläs" 4,6/5, "Annan kurssille kokonaisuutena arvosanan" 4.2/5. Tekstimuotoisia vastauksia tuli runsaasti. Merkittävä osa palautteesta oli kiitettävä. Erityisesti laskuharjoitukset saivat kehuja.

  • Monet kommentit koskivat sitä, että kurssi on työläs (kuten näkyy arvosanavastauksista myös). Erityisesti todettiin, että pajatehtäviin sai kulumaan runsaasti aikaa ja osa tehtävistä olivat liian vaikeita. Jotkut valittivat siitä, että tehtäväpisteet olivat jopa 16 koko kurssita ja jotkut siitä, että on liian vaikeata saada lisäopintopisteitä. Ehdotettiin esimerkiksi, että jo kun on tehnyt 20% tehtävistä saisi pisteen, eikä 50% niin kuin nyt. Pajatehtäviin voisi olla enemmän vinkkejä. Toisaalta todettiin pajatehtävien olevan opettavaisia, erityisesti vaikeat tehtävät. Luennoijan kommentti: Kurssi on tosiaan työläs. Kurssin aihe on sellainen, josta oppiminen pääosin (ainakin useimpien opiskelijoiden osalta) tapahtuu itse tekemällä. Siksi arvostelu on tehty kannustamaan tekemistä (laskarit ja paja). Tehtäväpisteiden osuus kokonaispistemäärästä on aika tavanomaista tasoa. Kurssin voi tietysti myös suorittaa erilliskokeella ilman mitään laskuharjoitus- ja pajatehtäviä. Otetaan harkintaan tulisiko lisäpisteet helpommalla. Pajatehtävät ovat jatkuvan kehittelyn kohteena.
  • Toinen paljon kommentteja saanut kohta koski luentomateriaalia. Jotkut kaipasivat varsinaista luentomonistetta ja sitä että luentokalvot voisivat mieluummin olla "lyhyitä ja ytimekkäitä". Valitettiin myös sitä, että luentojen jälkeen joutui uudestaan lukeman kalvoja laskuharjoituksia varten. Toisaalta oli runsaasti kiitettäviä kommentteja materiaalista. Luennoijan kommentti: Kalvot on tietoisesti tehty niin, että niillä yksinään pärjää, vaikka oikeastaan on olemassa kurssikirja, eikä siis näin tarkoin tehtyjä kalvoja tarvitsisi välttämättä olla. Kokemus kuitenkin osoittaa, että mieluummin opiskelijat ottavat tällaisia kalvoja kuin kurssikirjan + ylimalkaisemmat kalvot. Kalvot on tarkoituskin lukea moneen kertaan:) Opiskelija on siis toiminut niin kuin on tarkoituskin, kun on lukenut kalvot uudestaan laskuharjoituksia varten.
  • Tentit pidettiin helpohkoina. Luennoijan kommentti: Kurssin lopputuloksena olikin harvinaisen paljon arvosanoja 5 (35 kpl). Toisaalta kokeiden keskiarvot olivat vain hiukan tavanomaista korkeammat, eikä läpipääsyprosentti ollut kuin 57% kurssikokeessa 2 olleista.
  • Esiintyi yksi ehdotus jakaa Tira kahteen osaan. Luennoijan kommentti: Tästä on aikaisemmin keskusteltu ja asia tulee aina välillä esillä muutenkin kuin kurssipalautteen kautta. Tässä vaiheessa on päädytty jatkaa näin.
  • Oli myös muita yksittäisiä kommentteja liittyen esimerkiksi johonkin tiettyyn yksityiskohtaan.

Tässä vanhoja kurssikokeita: Vuoden 2013 kevään kurssikoe 1 ja kurssikoe 2. Vuoden 2012 kevään kurssikoe 1 ja kurssikoe 2. Vuoden 2011 kevään kurssikoe 1 ja kurssikoe 2.

Harjoituksia on siis kahdenlaisia:

  • 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ä. Koska laskuharjoitustehtäviä on yhteensä 74, joista 4 olivat ylimääräisiä tehtäviä, puolet 70:stä on 35 (1 piste) ja 90% on 63 (8 pistettä). Eli skaala on 35-38: 1 p, 39-42: 2 p, 43-46: 3 p, 47-50: 4 p, 51-54: 5 p, 55-58: 6 p, 59-62: 7 p, 63-74: 8 p.
  • 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ävät tarkastetaan TMC-ohjelmalla ("Test My Code").

Kurssin suoritukseen vaaditaan vähintään puolet kurssin kokonaispistemäärästä eli 60/2 = 30, koepisteiden summan täytyy myös olla vähintään 44/2 = 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.

Erittäin kiitettävästä harjoitustehtävien tekemisestä saa lisäksi ylimääräisiä opintopisteitä 1 tai 2: jos on tehnyt vähintään 80% tehtävistä saa yhden lisäopintopisteen, jos on tehnyt vähintään 95% saa kaksi lisäopintopistettä. Harjoitustehtävillä tarkoitetaan tässä sekä laskuharjoitustehtäviä että ohjelmointitehtäviä, eli nämä lasketaan yhteen.

Vaihtoehtoinen tapa suorittaa kurssi on erilliskokeella (60 maksimipistettä), jolloin kurssin suoritukseen kuuluu ainoastaan yksi erilliskoe. Harjoituspisteitä ei ole.

Myös uusinta- ja erilliskokeissa saa olla mukana samanlainen "lunttilappu" kuin kurssikokeissa.

Tässä vanhoja erilliskokeita: Uusinta- ja erilliskoe 12.6.2012: tehtävät, ratkaisut. Erilliskoe 14.8.2012: tehtävät, ratkaisut. Erilliskoe 18.9.2012: tehtävät. Erilliskoe 27.11.2012: tehtävät, ratkaisut. Erilliskoe 29.1.2013 (syksyn Tiralle uusintakoe): tehtävät, ratkaisut, tulokset.

Erilliskoe 8.4.2014: tehtävät.

Kurssin uusintakoe ja erilliskoe oli 10.6. klo 16.00 Exactum B123:ssa. Uusintakoe tarkoittaa, että harjoituspisteitä käytetään hyväksi kurssin arvostelussa. Uusintakokeessa voi korvata myös vain ensimmäisen kurssikokeen suoritus tai toisen kurssikokeen suoritus. Huomaa, että uusintakoe toimii myös erilliskokeena! Uusintakokeen arvostelu on valmistunut (13.6.2014). Uusintakokeen 10.6.2014 kysymykset ja vastaukset. Palaute: Lähetä maili patrik.floreen (at) helsinki.fi 19.6.2014 mennessä.

Erilliskoe 16.9.2014: tehtävät. Koe on nyt (19.9.) korjattu. Palaute: Lähetä maili patrik.floreen (at) cs.helsinki.fi 30.9.2014 mennessä.

Erilliskoe 2.12.2014 on korjattu. Tehtävät. Tulokset. Palaute: Lähetä maili patrik.floreen (at) cs.helsinki.fi 17.12.2014 mennessä.

Seuraava erilliskoe on syksyn 2014 kurssia seuraava erilliskoe ja on Antti Laaksosen laatima.

 

Kurssin arvosana määräytyy kokonaispistemäärästä, ohjeellisesti seuraavalla tavalla:

50-60 p.: arvosana 5

45-49 p.: arvosana 4

40-44 p.: arvosana 3

35-39 p.: arvosana 2

30-34 p.: arvosana 1

0-29 p.: hylätty

Literature and material

Kurssimateriaali pohjautuu suurelta osin kirjaan: T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein: Introduction to Algorithms, 3rd 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.