Kurssiesittely Tietojenkäsittelytieteiden laitos Tampereen yliopisto A215 Tietorakenteet Periodit I-II, syksy 2007 Luennot/vastuuhenkilö: Heikki Hyyrö Sähköposti: heikki.hyyro@cs.uta.fi Kurssin kotisivu: http://www.cs.uta.fi/tira/ 10 op (5 ov) laajuinen aineopintotasoinen kurssi Pakollinen osa tietojenkäsittelyopin kandidaatin tutkielmaa 26 luentokertaa (52 tuntia) Pinni B:n luentosali B1097 Tiistaisin klo 10-12 Keskiviikkoisin klo 10-12 Viimeinen luento ke 5.12 Tietorakenteet, syksy 2007 1 Kurssiesittely 13 viikkoharjoituskertaa (26 tuntia) Linnan luentosali K108 Kolme eri ryhmää: tiistaisin klo 12-14, 14-16 ja 16-18 Ohjaajat: Pekka Niemenlehto (pekka.niemenlehto@cs.uta.fi) ja Jyri Saarikoski (jyri.saarikoski@cs.uta.fi) Ensimmäiset harjoitukset ti 11.9, viimeiset ti 11.12 Tietorakenteet, syksy 2007 2 Kurssiesittely Harjoitustyö Tietorakenteisiin liittyvää ohjelmointia Javalla Aihe loka-marraskuussa Ohjaaja: Tuomas Talvensaari (tuomas.talvensaari@cs.uta.fi) Palautus tammikuussa 2008 Harjoitustyöhön liittyy tasapainotestin suorittaminen virtuaalilaboratoriossa Saatavaa testidataa voidaan hyödyntää harjoitustyön aineistona Tietorakenteet, syksy 2007 3
Kurssiesittely Kurssin läpipääsy vaatii seuraavat osasuoritukset Tentti (13.12, uusintatentti tammikuussa 2008) Maksimi 30 pistettä, läpipääsyyraja 12 Viikkoharjoitukset: vähintään 20% tehtynä Tuottaa 0-5 pistettä Pisterajat: 33,33% = 1 p, 46,66% = 2 p, 60% = 3 p, 73,33% = 4 p, 86,66% = 5 p Harjoitustyön hyväksytty palautus Arvostellaan asteikolla 0-10 pistettä Kurssiesittely Tasapainotesti Antaa 3 lisäsuoritetta viikkoharjoitustehtäväsaldoon Kurssinumero asteikolla 1..5 määräytyy kokonaispistemäärän mukaan (välillä 12-40) Harjoitustehtävien avulla saatavissa olevat pisteet ovat bonuspisteitä Kysymyksiä kurssijärjestelyistä tms.? Tietorakenteet, syksy 2007 4 Tietorakenteet, syksy 2007 5 Tietorakenne: tapa tallentaa ja organisoida tietoa tiedon lukemisen ja/tai päivittämisen kannalta sopivalla tavalla Tietorakenteet, syksy 2007 6 Esim. nimiluettelo näin... SMITH ANDERSON CLARK JOHNSON THOMAS RODRIGUEZ WILLIAMS JACKSON LEWIS JONES WHITE LEE BROWN HARRIS WALKER DAVIS MARTIN HALL MILLER THOMPSON ALLEN WILSON GARCIA YOUNG MOORE MARTINEZ HERNANDEZ TAYLOR ROBINSON KING Tietorakenteet, syksy 2007 7
...vain näin? ALLEN JOHNSON RODRIGUEZ ANDERSON JONES SMITH BROWN KING TAYLOR CLARK LEE THOMAS DAVIS LEWIS THOMPSON GARCIA MARTIN WALKER HALL MARTINEZ WHITE HARRIS MILLER WILLIAMS HERNANDEZ MOORE WILSON JACKSON ROBINSON YOUNG Tietorakenteet, syksy 2007 8 Tietorakenne: tapa tallentaa ja organisoida tietoa tiedon lukemisen ja/tai päivittämisen kannalta sopivalla tavalla Algoritmi: äärellinen joukko täsmällisesti määriteltyjä ohjeita jonkin tehtävän suorittamiseksi Korkean tason suunnittelussa kaksi tärkeää päämäärää: oikeellisuus tehokkuus Tietorakenteet, syksy 2007 9 Toteutukseen liittyviä tavoitteita vahvuus (eng. robustness) mukautuvuus uudelleenkäytettävyys Olioperustaisia suunnittelu/toteutusmenetelmiä abstraktio kapselointi modulaarisuus Sovellus Algoritmi1 Algoritmi2 Algoritmi3 Sovellus Algoritmi1 Algoritmi2 Algoritmi3 Tietorakenteet, syksy 2007 10 Tietorakenteet, syksy 2007 11
Algoritmien analysoinnista Algoritmin tehokkuuden mittaaminen? haluttaisiin muodostaa funktio f(n), joka kuvaa algoritmin suoritusaikaa Algoritmien analysoinnista Kokeellinen analyysi? algoritmin suoritusaika t Algoritmi 1 Algoritmi 2 Syötteen koko (parametri) n Tietorakenteet, syksy 2007 12 Tietorakenteet, syksy 2007 13 Algoritmien analysoinnista Kokeellinen analyysi + sinänsä varmin tapa tutkia tietyn algoritmin suorituskykyä tietyn tehtävän ratkaisussa - vaikea arvioida algoritmin suorituskykyä kaikilla mahdollisilla syötteillä - algoritmien yleisempi vertailu/luokittelu hankalaa - vaatii algoritmin toteuttamisen Algoritmien analysoinnista Ajatus 2: suoritettujen perusoperaatioiden tarkka analysointi muodostetaan algoritmille alhaisen tason koodiesitys (esim. kännetään konekielelle) määritetään t i = alhaisen tason komennon i vaatima suoritusaika määritetään n i = alhaisen tason komennon i suoritusten lukumäärä kokonaisaika = Σ i (n i t i ) Ehkä tarkkaa, mutta työlästä ja laite/kieliriippuvaista! Tietorakenteet, syksy 2007 14 Tietorakenteet, syksy 2007 15
Pseudokoodi Algoritmin tarkastelu paperilla: pseudokoodi Geneeristä ohjelmakoodia, jossa sivuutetaan tarpeettomat yksityiskohdat oleellista toiminta-askeleiden kuvaus, ei esim. pilkulleen tietynlainen syntaksi sekoitus luonnollista kieltä ja geneerisiä ohjelmointirakenteita (kontrollirakenteet, aliohjelmakutsut jne.) kuvaa algoritmin toiminnan riittävän täsmällisesti (asiayhteyden vaatimalla tarkkuudella) Tietorakenteet, syksy 2007 16 Pseudokoodi Algorithm OddCount(A, n) Input: Taulukko A, jossa n kokonaislukua Output: Tulostaa taulukon A parittomien lukujen lukumäärän odds 0 for i 0 to n 1 Do if A[i] on pariton then odds odds + 1 end if end for tulosta arvo odds return Tietorakenteet, syksy 2007 17 Pseudokoodi int OddCount( int A[ ], int n ) { /* Funktio OddCount C/C++ -kielellä */ int odds = 0, i = 0; for( i = 0; i < n; i++ ) { if( (A[i] % 2) == 1 ) { odds++; } } printf( %d\n, odds ); return; } Suoritusajan arviointi yleisellä tasolla Yhä ongelma: konkreettinen suoritusaika riippuu suoritusympäristöstä suoritusajan abstraktimpi tarkastelu? Suoritusaika kuitenkin aina verrannollinen suoritettujen operaatioiden lukumäärään funktion f(n) abstrakti aikayksikkö = suoritettavien alkeisoperaatioiden määrä Alkeisoperaatio: perusoperaatio, jonka suoritusaika oletetaan vakioksi Tietorakenteet, syksy 2007 18 Tietorakenteet, syksy 2007 19
Alkeisoperaatiot Esim. seuraavat voidaan katsoa alkeisoperaatioiksi arvon asetus muuttujaan taulukon alkion muistipaikan laskenta olioviitteen laskenta kahden arvon vertailu aritmeettinen operaatio metodikutsu metodin arvon palauttaminen Esimerkki alkeisoperaatioiden määrän laskennasta Algorithm OddCount(A, n) odds 0 1 operaatio for i 0 to n 1 Do 2 alkuoperaatiota, 3 operaatiota if A[i] on pariton then odds odds + 1 end if end for return odds 2 operaatiota 2 operaatiota 1 operaatio Yhteismäärä? vähintään? 1 + 2 + n (3 + 2) + 1 = 4 + 5n enintään? 1 + 2 + n (3 + 4) + 1 = 4 + 7n Tietorakenteet, syksy 2007 20 Tietorakenteet, syksy 2007 21 Toinen esimerkki Algorithm OCRepeat(A, n) for i 1 to n Do 2 alkuoperaatiota, 3 operaatiota OddCount(A, i) end for return 1 + kork. 4 + 7i operaatiota 1 operaatio Yhteismäärä enintään? 3+n (3+1)+Σ n i=1 (4+7i) = 3+4 n+4 n+7 Σ n i=1 i = 3+8 n+7 n(n+1)/2 Tietorakenteet, syksy 2007 22