Tietorakenteet ja algoritmit (ohjattu itseopiskelu)

58131
8-10
Algoritmit ja koneoppiminen
Aineopinnot
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.

Koe

23.10.2015 16.00 A111 ja B123
15.12.2015 09.00 A111 ja CK112
Vuosi Lukukausi Päivämäärä Periodi Kieli Vastuuhenkilö
2015 syksy 02.09-09.12. 1-2 Suomi Patrik Floréen

Luennot

Aika Huone Luennoija Päivämäärä
Ke 10-12 B123 Patrik Floréen 02.09.2015-14.10.2015
Ke 10-12 B123 Patrik Floréen 28.10.2015-09.12.2015

Harjoitusryhmät

Group: 1
Aika Huone Ohjaaja Päivämäärä Huomioitavaa
Ke 14-16 D122 Patrik Floréen 07.09.2015—16.10.2015
Ke 14-16 D122 Patrik Floréen 26.10.2015—11.12.2015
Group: 2
Aika Huone Ohjaaja Päivämäärä Huomioitavaa
Pe 10-12 D122 Ilari Sinkkonen 07.09.2015—16.10.2015
Pe 10-12 D122 Ilari Sinkkonen 26.10.2015—11.12.2015
Group: 3
Aika Huone Ohjaaja Päivämäärä Huomioitavaa
Pe 14-16 D122 Ilari Sinkkonen 07.09.2015—16.10.2015
Pe 14-16 D122 Ilari Sinkkonen 26.10.2015—11.12.2015

Non finnish students, contact the lecturer beforehand.

Information for international students

The course is given in Finnish without lectures. International students may study the course material using the book Cormen, Leiserson, Rivest & Stein: Introduction to Algorithms, 3rd ed., and participate in the written exam(s). No particular guidance is given in English.

Students at the course 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.

Please note that you are allowed to have a hand-written A4-sized sheet of paper of personal notes with you at all the exams of this course (you can write on both pages).

Yleistä

Esitiedot

Kurssi vaatii riittävää ohjelmointi- ja matematiikkaosaamista. Kurssin esitietovaatimuksina on kurssit Ohjelmoinnin jatkokurssi ja Johdatus yliopistomatematiikkaan (ennen Johdatus diskreettin matematiikkaan). Kurssin suorittaminen on käytännössä mahdotonta, jos näissä esitiedoissa on huomattavia puutteita. Matematiikan osalta on riittävää, että osallistuu kurssille Johdatus yliopistomatematiikkaan samanaikaisesti tämän kurssin kanssa.

Kokemus osoittaa, että ellei suoridu ensimmäisistä laskuharjoituksista, ei käytännössä pysty suoriutumaan kurssista. Siksi vaadimme tällä itseopiskelukurssilla, että kolmessa ensimmäisessä laskuharjoituksessa on kussakin tehtävä vähintään kaksi tehtävää, muuten opiskelija poistetaan kurssilta.

"Luennot" ja luentomateriaali

Kurssi on ns. itseopiskelu-kurssi, joka tarkoittaa, että tavallisia luentoja ei pidetä. "Luentoina" on yllä merkitty kyselytunnit, joiden aikana opiskelijat voivat kysyä viikon aiheena olevasta materiaalista.

Syksyn 2015 kurssi on sisällöltään sama kuin kevään 2015 kurssi. Luentomateriaali kevään kurssilta on käytössä:

  • sivut 1–350 valmiina varsinaisesta kurssimateriaalista (tosin muokkasin 17.9. sivun 41, kun valitettiin että on harjaanjohtavaa puhua invariantin kolmannesta osasta ja korjasin 7.10. sivut 228-229). Tarkensin 14.10. puun määritelmän sivulla 252; suppeammassa kalvosarjassa hakupuista on myös hyvä puun määritelmä. Lisäesimerkki rekursiosta (liittyy luentojen sivun 24 asiaan), luennolla esitettyjä suppeampia kalvosarjoja: hajautus, hakupuut, AVL-puut.
  • luennot sivut 351–638. Tarkennus materiaaliin: Suuntaamattoman verkon kaaria (u,v) ja (v,u) katsotaan olevan sama kaari, joten sivun 425 verkon kaarien lukumäärä (merkitään |E|) on 6. Suuntaamattomissa verkoissa ei ole kaaria solmusta itseensä (u,u). Suutaamattoman verkon syklissä on oltava vähintään 3 solmua, eli se että edetään edestakaisin yhtä kaarta (u,v) ei kelpaa sykliksi. Suunnatussa verkossa syklissä on oltava vähintään 1 kaari, eli jos kaari (u,u) on olemassa, se kelpaa sykliksi. (Valppaille opiskelijoille kiitos näistäkin huomioista!) Sivulla 630 lukee "luvun 3 lopussa" kun pitäisi olla "luvun 6 lopussa".
  • lyhyt johdatus rinnakkaisiin algoritmeihin (ei tule tenttiin)

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.

Opiskelija Simone Romeon tekemä lista termeistä suomeksi ja englanniksi.

Aikataulu

Opiskelijoiden on todellakin syytä osallistua ensimmäiseen tilaisuuteen 2.9.2015 klo 10-12, koska siinä selitetään perin pohjin miten kurssi suoritetaan. Huomio: Voit aloittaa kurssin, vaikka et mahtunutkaan mihinkään harjoitusryhmään.

Alustava aikataulu on seuraava:

  • Viikko 36: 2.9. aloitusluento, käytännössä moniste s. 1-17 + uudet kalvot induktiotodistuksesta
  • viikko 37: sivut 18-43, laskari 1
  • viikko 38: sivut 44-100, laskari 2
  • viikko 39: sivut 101-157, laskari 3
  • viikko 40: sivut 158-211, laskari 4
  • viikko 41: sivut 212-274, laskari 5
  • viikko 42: sivut 275-296, laskari 6
  • viikko 43: Tenttiviikko, kurssin 1. kurssikoe on pe 23.10. klo 16
  • viikko 44: sivut 297-393, laskari 7
  • viikko 45: sivut 394-423, laskari 8
  • viikko 46: sivut 424-485, laskari 9
  • viikko 47: sivut 486-508, laskari 10
  • viikko 48: sivut 509-551, laskari 11
  • viikko 49: sivut 552-634, laskari 12
  • viikko 50: Pidetään 9.12. kertaussessio, ei enää laskareita.
  • viikko 51: Tenttiviikko, kurssin 2. kurssikoe on ti 15.12 klo 9
  • Uusintakuulustelu on ti 26.1.2016 klo 16.

Harjoitukset

Harjoituksia on kahdenlaisia: Tavalliset laskuharjoitukset ja ohjelmointitehtävät (Tira-paja).

Laskuharjoitukset: Laskuharjoituksia ei palauteta etukäteen, vaan tehdään etukäteen ja käydään läpi laskuharjoitustilaisuudessa. Aloitusviikolla ei ole laskuharjoituksia. Harjoitusryhmät ovat ylitäynnä, mutta päätimme katsoa miten tilanne kehittyy, joten tässä vaiheessa emme vielä perusta lisäryhmää. Ilman pakollisia 2 tehtävääkin aika moni opiskelija on yleensä poistunut kurssilta parin ensimmäisen laskuharjoituskerran jälkeen.

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 suurimman osan kohdista.

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

Tira-paja: Määräaika pajalle on maanantai-aamuisin klo 4.00. Ensimmäisten pajatehtävien määräaika on 14.9. klo 4.00. Yhteyshenkilö: Ilari Sinkkonen, aisinkko(at)cs.helsinki.fi.

Kurssin suorittaminen

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 on 23.10.2015 klo 16. Koetehtävissä oli valitettavasti virhe tehtävässä 2b (outo ei palauttanut mitään), tässä korjattu versio: tehtävät (korjattu), vastauksia. Tehtävää 2b arvostellaan tietysti sen mukaan mitä koepaperissa oikeasti luki. Tentti on nyt korjattu. Keskiarvo oli 15,55, joka on normaalia korkeampi keskiarvo. Tehtäväkohtaiset keskiarvot / maksimipistemäärä: 1: 2,93/4, 2: 3,74/5, 3: 2,41/4, 4: 4.42/5, 5: 2,03/4. Palautetilaisuus: Exactum A317 (eli avoin tila huoneen A316 ulkopuolella) ti 24.11. klo 14.00-15.00.

Kurssikoe 2 on 15.12.2015 klo 9. Tehtävät, vastauksia. Kurssikoe on nyt korjattu. Keskiarvo oli 12,58. Tehtäväkohtaiset keskiarvot / maksimipistemäärä: 1: 4,99/6, 2: 3,50/6, 3: 3,23/6, 4: 0,86/4. Palautetilaisuus: Exactum A317 (eli avoin tila huoneen A316 ulkopuolella) ti 22.12. klo 14.00-15.00. Jos ette pääse palautetilaisuuteen, mutta haluaisitte katsoa tehtäväpaperinne, lähettäkää sähköpostia patrik.floreen (at) cs.helsinki.fi viimeistään 10.1.2016.

Uusintakoe oli 26.1.2016 klo 16. Uusintakokeessa voi uusia joko kurssikokeen 1 tai kurssikokeen 2 tai molempia tai suorittaa koko kurssi erilliskokeena. Tehtävät, malliratkaisuja. Kokeen tuloksia ei näy Tiklistä, vaan katso omat pisteesi tästä taulukosta. Kerro heti, jos on vikaa esimerkiksi laskaripistemäärässä. Palautetilaisuus: lähetä sähköpostia patrik.floreen (at) cs.helsinki.fi ja sovi aika; lähetä sähköpostipyyntö viimeistään 8.2.

Harjoitustehtävät:

  • 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ä. Laskuharjoituksia oli yhteensä 78, joista 6 ylimääräisiä tehtäviä, joten pisteet lasketaan käyttäen jakajana 72. Laskaripisteet ovat seuraavat: 36-39 tehtävää vastaa 1 pistettä, 40-43: 2, 44-47: 3, 48-51: 4, 52-55: 5, 56-59: 6, 60-63: 7, 64-: 8.
  • 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"). Pajatehtäviä oli yhteensä 67, joista 10 bonustehtäviä, joten pisteitä pitäisi laskea käyttäen jakajana 57. Nyt kuitenkin pajalukumäärästä huomattiin vasta 21.12. puuttuvan 5 tehtävää, eli aiemmin oli ilmoitettu pakollisia olevan 52, joten käytetään laskentaan 52. Pajapisteet ovat seuraavat: 26-28 tehtävää vastaa 1 pistettä, 29-31: 2, 32-34: 3, 35-37: 4, 38-40: 5, 41-43: 6, 44-45: 7, 46-: 8.

Kurssin suoritukseen vaaditaan tavallisesti 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 (eli jakajana on 72+57=129). Pajalukumäärästä puuttui paja 1:n 5 tehtävää, mutta tämä ei nyt otettu huomioon. Eli 9 op saa jos on tehnyt yhteensä vähintään 99 tehtävää ja 10 op saa jos on tehnyt yhteensä vähintään 117 tehtävää.

Vaihtoehtoinen tapa suorittaa kurssi on erilliskokeella (60 maksimipistettä), jolloin kurssin suoritukseen kuuluu ainoastaan yksi erilliskoe. Harjoituspisteitä ei ole. Kurssin suoritus erilliskokeena on 8 opintopisteen laajuinen.

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

Syksyllä 2015 pidettävien erilliskokeiden (myös 1.12.2015 erilliskokeen) tietoja löytyvät kevään kurssin kotisivulta!

Tässä joitakin 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. Uusintakokeen 10.6.2014 kysymykset ja vastaukset.

Tietorakenteet ja algoritmit kurssipalaute syksy 2015

Kurssipalautteeseen vastasi 36 opiskelijaa, mutta vaikuttaa siltä, että yksi on vastannut väärän kurssin palautteeseen (ks. kommentti englanninkielisestä palautteesta). Arvosanallisten kysymysten keskiarvot olivat kaikki noin 4, siten että vain muutama vastaus kuhunkin kysymykseen osui arvioihin 1-3. Eniten oltiin yksimielisiä siitä, että kurssi oli työläs (keskiarvo 4,4) ja että arviointi mittasi keskeisten oppimistavoitteiden saavuttamista (4,3). Yleisarvosana oli 4,0.

Suurin osa palautteesta oli positiivista, osa jopa ylistävää (”Mielenkiintoisin kurssi, jota olen tähän mennessä käynyt”, ”Paras ja hyödyllisin käymäni käpistelykurssi tähän asti”, ”Ilari hoiti laskarien vetämisen hyvin”, ”Floréen on ehdottomasti yksi parhaista luennoitsijoista Kumpulassa”, ”Luentomateriaali oli hyvää”, ”TMC-tehtävät olivat mukavia”, ” Kurssin tavoitteiden läpikäyminen alussa on loistava käytäntö”  jne.). Kiitos näistä. Keskityn alla enemmän kriittisiin kommentteihin ja kehittämisehdotuksiin.

There was one lengthy response in English saying it is a continuation to a previous (non-existing) comment. The comments do not fit to this course: “If possible, make the course a two-period course” (this is a two-period course); “Combine the homework exercise groups and the workshops” (what workshops?); “Writing on the blackboard is sometimes preferable to just showing slides” (there were no normal lectures and the slides were used only as background material in the question hours, where explanations were given using the overhead projector); “Scanning your lecture notes to the course webpage was good idea” (I don’t know what this is, as nothing was scanned and the slides were produced directly from latex into pdf form). So it looks this comment in English, to a course given in Finnish only, is some form of error. Notably also the grade “1” was in almost all numerical answers given by exactly one respondent. As the system is anonymous, it cannot of course be tracked whether it is the same respondent who gave the text comment and the numerical comments of grade 1.

Opiskelijoiden palaute Opettajan kommentit
Kurssi pidettiin työläänä. Suurin osa tämänsuuntaisista kommenteista viittasi laskari- ja erityisesti pajatehtävien määrään ja työläyteen. Yhdessä palautteessa katsottiin kurssilla olevan liikaa asiaa pakolliseksi peruskurssiksi. Ehdotettiin myös laskareita pidettäväksi vain joka toinen viikko. Totta, kurssi on aika työläs. Voisi harkita pitäisikö laskari- ja pajatehtävien määrää jonkin verran karsia, mieluumin kuin karsia laskarikertoja. Monta kertaa on harkittu pitäisikö kurssi jakaa kahtia, mutta toisaalta on katsottu, että tässä kokonaisuudessa parempi menestys yhdessä osassa auttaa saamaan toistakin osaa läpi, esimerkiksi jos verkkoalgoritmit tuntuvat vaikeilta, erillinen Tira II, jossa verkkoalgoritmeilla olisi merkittävä osuus, voisi olla haasteellinen. Verkkoalgoritmit ovat kuitenkin tietojenkäsittelyn perusasioita.
”Opintopistemäärän määräytyminen tehtyjen tehtävien määrän mukaan tuntuu vähän kyseenalaiselta.” Tätä on keksitty nimenomaan siksi, että kurssi on työläs ja jos tosiaan käyttää paljon aikaa ja vaivaa, olemme antaneet tehtävämäärien mukaan 1 tai 2 op lisää.
”Ymmärrän aiheen olevan keskeistä tietojenkäsittelytieteen perustietoa, mutta kurssi on aivan naurettavan vaikea niille, joita aihepiiri ei kiinnosta.” Niin, on opetusohjelman tarkoituskin, että pakollisissa kursseissa on tietojenkäsittelytieteen perustietoa. Samat asiat ovat pakollisia tietojenkäsittelyn opinto-ohjelmissa kansallisesti (ks. Aalto) että kansainvälisesti (ks. esim. johtavat yhdysvaltalaiset yliopistot).
Pajatehtävät olivat vaikeita ja harmitti, että pisteen sai vain täysin oikeasta vastauksesta eikä mitään melkein oikeasta vastauksesta. ”Testit olivat välillä aika natseja paitsi aikarajoituksiltaan, myös muutenkin.” Osa tehtävistä oli tosiaan aika vaikeita ja helpompien määrää on yritetty pikku hiljaa lisätä. Paja-vastaukset tarkistetaan automaatilla, joten on (useimmiten) vaikeata tunnistaa mikä on melkein oikea vastaus.
Olisi ollut hyvää nähdä esimerkkejä miten uusia asioita koodataan (muussakin kuin pseudokoodina). Tosiaan etäisyyttä on ehkä aika paljon pseudokooditason ja javaohjelman välillä. Muutamassa pajatehtävässä oli valmiiksi annettuja objekteja, joita pystyi ohjelmassa käyttää hyväkseen. Pitää harkita olisiko näitä enemmänkin. Luennoilla voisi olla enemmän "live-koodausta". Sitä harrastettiin vain kerran kyselytunnilla.
”Java-keskisyys TMC-tehtävissä välillä rasitti, olisi mukavaa jos tehtävät olisi mahdollista tehdä vapaavalintaisella ohjelmointikeilellä.” Kurssi on tarkoitettu myös Javan jatkokurssina, siksi Java.
Kyselytunnilla käytiin viikon aihe läpi hyvin, vaikka oppilaat eivät hirveästi kyselleetkään. Toinen palaute sanoo: Kyselytunnilla olisi ollut kivaa jos luennoitsija olisi ottanut enemmän asioita oma-aloitteisesti esille. Eräässä palautteessa ehdotettiin konkreettisesti: Kyselytunnit voisi ihan virallisestikin muuttaa 45 min ”tärkeiden asioiden luennoksi” + 45 min kyselytunniksi. Kyselytunnin pitäjänä tunnistan enemmän ensimmäistä palautetta kuin toista. Osoittautui muutaman kerran jälkeen, että saadaan parempaa keskustelua aikaiseksi siten, että käydään alue (summittaisesti) läpi ja kytketään kysymykset tähän läpikäyntiin, niin että epäselvät asiat saadaan selitetyksi. Ainakin kyselytunnin pitäjä piti tilaisuuksista, joissa oli järjestelmällisesti läsnä kohtalaisen aktiivinen, joskin valitettavan pieni, osallistujakunta. Ehdotettu ”pikaluento + kyselytunti” tuntuu hyvältä ehdotukselta.
Paja-ajat olisivat voineet painottua enemmän loppuviikkoon. Kommentti noteerattu, mutta paja-ohjaajat ovat itse opiskelijoita ja ohjausajat riippuvat siis myös ohjaajien aikatauluista, eli heidän opiskelustaan.
Ehdotettiin laskariryhmä erityisesti sivuaineopsikelijoille. Laskariryhmiä ei voi olla kovin monta ja käytäntö osoittaa, että suurin joukko kurssin sivuaineopiskelijoista ovat matematiikan opiskelijoita, eikä kurssi ole heille erityisen vaikea.
”Laskuharjoitustehtävissä olisi ollut hauskaa, jos algoritmien oikeellisuuteen liittyviä tuloksia olisi havainnollistettu johdetusti esim. yhden moniosaisen tehtävän kautta.” Jos tällä tarkoitetaan, että olisi iso tehtävä, jonka kukin osa vastaisi normaalia laskaritehtävää (ja siis yhtä rastia per osa), niin näiden isojen tehtävien ongelma on, että jos tökkii jo alussa, jää opiskelijalta monet rastit saamatta. Siksi tehtävät tarkoituksellisesti ovat kohtalaisen pieniä kokonaisuuksia. Aikaisempina vuosina on tosin myös kokeiltu laajempia tehtäviä, joista sai useita pisteitä per tehtävä. Nämä olivat silloin toteutettuina usean hengen ryhmätehtävinä. Ryhmä työsti tehtävän valmiiksi ja jätti sen sisään kirjallisesti.
Tuntui kohtuuttomalta, että laskuharjoituspisteitä alkoi saada vasta yli 50% tehtyään. Tästä ei yleensä ole valiteltu ja kurssilla tehdään kyllä ahkerasti tehtäviä. On tarkoituskin kannustaa opiskelijoita tekemään tehtäviä runsaasti, koska se on tehokas tapa oppia. Tämä 50% ei kuitenkaan ole mikään ”pyhä sääntö” ja pisteskaalaus voidaan toki tehdä ihan muulla tavalla.
Luentomateriaalin voisi jakaa pienempiin kokonaisuuksiin. Niin, toki pdf:n voi pilkkoa osiin moneksi pdf:ksi.  Tästä on yleisö luultavasti erimielistä mikä on parempi: kaikki yhdessä vai jokainen luku erikseen. Tekstin voisi toki laittaa sekä yhtenä isona tiedostona, että pilkottuna.
Jotkin luentokalvojen esimerkkikuvat vaikealukuisia. Esim. ALV-puiden kuvaus: selvät numerot tai värit. Pyysin monta kertaa esittämään kertomaan, jos kalvoissa on ongelmia ja muutamasta suorasta virheestä kerrottiin ja ne saatiin korjattua, kiitos siitä! ALV-puut kalvoilla voi tosiaan värittää paremmin.
Luentomateraalin pseudokoodin fonttia voisi muuttaa, u ja v ovat liian samankaltaisia. Kiitos huomiosta.
JYMistä olisi ollut erittäin paljon hyötyä, nyt asiat käytiin JYMIssä myöhemmin läpi kuin Tirassa. Tämä on tosiaan haaste, koska syksyn versio ei ole standardiaikataulun mukainen (standardiaikataulussa JYM on 1. vuoden syksynä ja Tira 1. vuoden keväänä). Sisällöllisesti on käytä keskusteluja JYM-opettajan ja Tiraopettajan välillä, mutta aikataulutus on tosiaan haasteellista kun kurssit eivät lähtökohtaisesti ole tarkoitettu käytävän yhtä aikaa. MOOC-sisäänoton takia olemme kuitenkin halunneet antaa mahdollisuuden käydä Tira heti syksyllä. Tosin sen voi hyvin jättää myös keväälle, jos matematiikkaan haluaa satsata aluksi syksyllä. Yliopisto-opiskelun perinteisen hengen mukaisesti on jätetty opiskelijalle valinnanvaraa. MOOC-fukseille voisi tehdä oman pienen matematiikan kalvosetti kurssin sivulle. Tässä olisi matematiikan kertausta ja selitetty vielä tarkemmin induktiota.
Tenttien osalta yksi palaute mainitsi Käyttöjärjestelmäkurssin 8 minikoetta hyvänä järjestelynä. Käyttöjärjestelmäkurssin minikoejärjestelmä on Teemu Kerolan pilottikokeilu ja se mahdollisesti laajenee muihin kursseihin saatujen kokemusten perusteella.

Lopuksi sitaatti yhdestä palautteesta: ”Kurssi oli omasta mielestäni melko helppo, eikä lainkaan vastannut kuulemiani huhupuheita kurssin vaikeudesta.”  Kurssin läpäisseistähän tosiaan noin 25% sai arvosanan 5.

Kirjallisuus ja materiaali

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.