A215 Tietorakenteet. Tietojenkäsittelytieteiden laitos Tampereen yliopisto. Periodit I-II, syksy 2007

Koko: px
Aloita esitys sivulta:

Download "A215 Tietorakenteet. Tietojenkäsittelytieteiden laitos Tampereen yliopisto. Periodit I-II, syksy 2007"

Transkriptio

1 Kurssiesittely Tietojenkäsittelytieteiden laitos Tampereen yliopisto 25 Tietorakenteet Periodit I-II, syksy 2007 Luennot/vastuuhenkilö: Heikki Hyyrö Sähköposti: Kurssin kotisivu: 0 op (5 ov) laajuinen aineopintotasoinen kurssi Pakollinen osa tietojenkäsittelyopin kandidaatin tutkielmaa 26 luentokertaa (52 tuntia) Pinni B:n luentosali B097 Tiistaisin klo 0-2 Keskiviikkoisin klo 0-2 Viimeinen luento ke 5.2 Tietorakenteet, syksy 2007 Kurssiesittely 3 viikkoharjoituskertaa (26 tuntia) Linnan luentosali K08 Kolme eri ryhmää: tiistaisin klo 2-4, 4-6 ja 6-8 Ohjaajat: Pekka Niemenlehto (pekka.niemenlehto@cs.uta.fi) ja Jyri Saarikoski (jyri.saarikoski@cs.uta.fi) Ensimmäiset harjoitukset ti.9, viimeiset ti.2 Tietorakenteet, syksy Kurssiesittely Harjoitustyö Tietorakenteisiin liittyvää ohjelmointia Javalla ihe 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

2 Kurssiesittely Kurssin läpipääsy vaatii seuraavat osasuoritukset Tentti (3.2, uusintatentti tammikuussa 2008) Maksimi 30 pistettä, läpipääsyyraja 2 Viikkoharjoitukset: vähintään 20% tehtynä Tuottaa 0-5 pistettä Pisterajat: 33,33% = p, 46,66% = 2 p, 60% = 3 p, 73,33% = 4 p, 86,66% = 5 p Harjoitustyön hyväksytty palautus rvostellaan asteikolla 0-0 pistettä Kurssiesittely Tasapainotesti ntaa 3 lisäsuoritetta viikkoharjoitustehtäväsaldoon Kurssinumero asteikolla..5 määräytyy kokonaispistemäärän mukaan (välillä 2-40) Harjoitustehtävien avulla saatavissa olevat pisteet ovat bonuspisteitä Kysymyksiä kurssijärjestelyistä tms.? Tietorakenteet, syksy Tietorakenteet, syksy Tietorakenteet (ja algoritmit) Tietorakenne: tapa tallentaa ja organisoida tietoa tiedon lukemisen ja/tai päivittämisen kannalta sopivalla tavalla Tietorakenteet, syksy Tietorakenteet (ja algoritmit) Esim. nimiluettelo näin... SMITH NDERSON CLRK JOHNSON THOMS RODRIGUEZ WILLIMS JCKSON LEWIS JONES WHITE LEE BROWN HRRIS WLKER DVIS MRTIN HLL MILLER THOMPSON LLEN WILSON GRCI YOUNG MOORE MRTINEZ HERNNDEZ TYLOR ROBINSON KING Tietorakenteet, syksy

3 Tietorakenteet (ja algoritmit)...vain näin? LLEN JOHNSON RODRIGUEZ NDERSON JONES SMITH BROWN KING TYLOR CLRK LEE THOMS DVIS LEWIS THOMPSON GRCI MRTIN WLKER HLL MRTINEZ WHITE HRRIS MILLER WILLIMS HERNNDEZ MOORE WILSON JCKSON ROBINSON YOUNG Tietorakenteet, syksy Tietorakenteet (ja algoritmit) Tietorakenne: tapa tallentaa ja organisoida tietoa tiedon lukemisen ja/tai päivittämisen kannalta sopivalla tavalla lgoritmi: ää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 Tietorakenteet (ja algoritmit) Toteutukseen liittyviä tavoitteita vahvuus (eng. robustness) mukautuvuus uudelleenkäytettävyys Olioperustaisia suunnittelu/toteutusmenetelmiä abstraktio kapselointi modulaarisuus Tietorakenteet (ja algoritmit) Sovellus lgoritmi lgoritmi2 lgoritmi3 Sovellus lgoritmi lgoritmi2 lgoritmi3 Tietorakenteet, syksy Tietorakenteet, syksy 2007

4 lgoritmien analysoinnista lgoritmin tehokkuuden mittaaminen? haluttaisiin muodostaa funktio f(n), joka kuvaa algoritmin suoritusaikaa lgoritmien analysoinnista Kokeellinen analyysi? algoritmin suoritusaika t lgoritmi lgoritmi 2 Syötteen koko (parametri) n Tietorakenteet, syksy Tietorakenteet, syksy lgoritmien 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 lgoritmien analysoinnista jatus 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 Tietorakenteet, syksy

5 Pseudokoodi lgoritmin 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 Pseudokoodi lgorithm OddCount(, n) Input: Taulukko, jossa n kokonaislukua Output: Tulostaa taulukon parittomien lukujen lukumäärän odds 0 for i 0 to n Do if [i] on pariton then odds odds + end if end for tulosta arvo odds return Tietorakenteet, syksy Pseudokoodi int OddCount( int [ ], int n ) { /* Funktio OddCount C/C++ -kielellä */ int odds = 0, i = 0; for( i = 0; i < n; i++ ) { if( ([i] % 2) == ) { 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ä lkeisoperaatio: perusoperaatio, jonka suoritusaika oletetaan vakioksi Tietorakenteet, syksy Tietorakenteet, syksy

6 lkeisoperaatiot 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 lgorithm OddCount(, n) odds 0 operaatio for i 0 to n Do 2 alkuoperaatiota, 3 operaatiota if [i] on pariton then odds odds + end if end for return odds 2 operaatiota 2 operaatiota operaatio Yhteismäärä? vähintään? n (3 + 2) + = 4 + 5n enintään? n (3 + 4) + = 4 + 7n Tietorakenteet, syksy Tietorakenteet, syksy Toinen esimerkki lgorithm OCRepeat(, n) for i to n Do 2 alkuoperaatiota, 3 operaatiota OddCount(, i) end for return + kork i operaatiota operaatio Yhteismäärä enintään? 3+n (3+)+Σ n i= (4+7i) = 3+4 n+4 n+7 Σ n i= i = 3+8 n+7 n(n+)/2 Tietorakenteet, syksy

7 Palataan edellisen kerran esimerkkiin lgorithm OddCount(, n) odds 0 operaatio for i 0 to n Do 2 alkuoperaatiota, 3 operaatiota if [i] on pariton then odds odds + end if end for return odds 2 operaatiota 2 operaatiota operaatio Saatiin alkeisoperaatioiden lukumääriksi vähintään 4 + 5n ja enintään 4 + 7n Paras/keskimääräinen/pahin Tyypillisesti kolme analysointinäkökulmaa Parhaan tapauksen (syötteen) analyysi Keskimääräisen tapauksen (syötteen) analyysi Pahimman tapauksen (syötteen) analyysi Yleisin ja usein tärkein: pahimman tapauksen analyysi esim. laskentaresurssien riittävyyden arviointi Tietorakenteet, syksy 2007 Tietorakenteet, syksy Paras/keskimääräinen/pahin Kiinnostava mutta yleensä hankalin: keskimääräisen tapauksen analyysi keskimääräinen syöte usein hankala määrittää (alkeisoperaatioiden lukumäärän keskiarvo kaikkien mahdollisten syötteiden käsittelyssä) Vähemmän tärkeä: parhaan tapauksen analyysi Joskin voi olla mielenkiintoista esim. verrata, paljonko parhaan ja pahimman syötetapauksen suoritusajat poikkeavat toisistaan Edellisen kerran viimeinen esimerkki lgorithm OCRepeat(, n) for i to n Do 2 alkuoperaatiota, 3 operaatiota OddCount(, i) end for return + kork i operaatiota operaatio lkeisoperaatioiden yhteismäärä enintään 3 + 8n + 7n(n + )/2 rvion f(n) = 3+8n+7n(n+)/2 vertailukelpoisuus?jos esim jollekin muulle algoritmille saadaan arvio f 2 (n) = 0n + 4n 2? Tietorakenteet, syksy Tietorakenteet, syksy

8 Vakiokertoimet Kuinka tarkkoja vertailuja saadaan käyttäen alkeisoperaatioihin perustuvia arvoja f(n)? Seikka : eri alkeisoperaatioiden suoritusajat voivat vaihdella, mutta ovat kuitenkin vakioita Olkoon t min nopeimman ja t max hitaimman alkeisoperaation suoritusaika jat vakioita, joten on vakiokerroin c jolla t max = c t min f(n) voi poiketa vakiokertoimen c verran Tietorakenteet, syksy Vakiokertoimet Esimerkki: olkoon kahden algoritmit alkeisoperaatioiden määrät f (n) = 3 + 5n ja f 2 (n) = 2 + 6n lgoritmin oikea suoritusaika on välillä 3 + 5n...3c + 5cn, ja algoritmin 2 välillä 2 + 6n...2c + 6cn (kun ajan mittayksikkö on t min ) kumpi on nopeampi riippuu algoritmien alkeisoperaatioiden yksityiskohdista Korkean tason analyysin kannalta resurssivaatimuksenvakiokerroin ei ole kovin oleellinen kasvun suuruusluokka on tärkeämpi Tietorakenteet, syksy Funktion f(n) kasvun suuruusluokka lgoritmien analysointia yksinkertaistava ja yleistävä (joskin epätarkentava) ajatus: jätetään arvon f(n) termien vakiokertoimet pois Nyt esim. f (n) = 3+5n voidaan esittää muodossa + n Tulkinta: f (n) on jokseenkin muotoa c(+n) jollakin vakiolla c Seuraava askel: jätetään jäljelle ainoastaan dominoiva termi (määrää kasvun suuruusluokan) Esim. f(n) = n + n 2 supistuu muotoon n 2 Tietorakenteet, syksy symptoottinen analyysi symptoottinen analyysi: tarkastellaan funktion f(n) käyttäytymistä suurilla n:n arvoilla (n ) Dominoiva termi syrjäyttää alemmat termit Esim. n + n 2 + n 3 n 3, kun n n+n2 +n 3 n 3 = + n 2 n +, kun n lempien termien poisjättö tuottaa korkeintaan vakiotermin suuruisen virhekertoimen Virhekerroin pienenee arvoon kun n kasvaa epätarkkuus mitätön suurilla n:n arvoilla Tietorakenteet, syksy

9 O-notaatio (iso O, ordo eli järjestys latinaksi) lgoritmin suoritusajan (usein myös muistinkäytön) kuvaamiseen käytetään yleisesti iso O -notaatiota Määritelmä: f(n) on O(g(n)), jos on olemassa vakioarvot n 0 > 0 ja c > 0 siten, että f(n) c g(n) kun n > n 0 O ilmaisee asymptoottisen ylärajan resurssivaatimusten kasvun suuruusluokalle Jos algoritmille pätee f (n) = O(g(n)), niin algoritmin suoritusajan kasvu n:n suhteen on korkeintaan luokkaa g(n) Tietorakenteet, syksy O-notaatio (iso O, ordo eli järjestys latinaksi) algoritmin suoritusaika t f(n) cg(n) n 0 Syötteen koko (parametri) n Tietorakenteet, syksy O-notaatio (iso O, ordo eli järjestys latinaksi) Nyrkkisääntö: funktion f(n) suuruusluokka = sen suurimman suuruusluokan omaavan yksittäisen termin suuruusluokka (dominoi alempia luokkia) Esim. 00n + 3 log(n) + n2 00 = O(n2 ) Tarkastellaan esimerkkinä tämän todistamisesta O-notaatio (iso O, ordo eli järjestys latinaksi) Todistetaan: 00n + 3 log(n) + n2 00 = O(n2 ) rajataan vasemmanpuolen termit yksitellen muotoa c i n 2 olevilla termeillä, missä kukin c i vakio: selvästi esim. 00n 2 00n, 3n 2 3 log(n) ja n 2 n2 00 esim. kun n > n 0 = vakio c: summataan yhteen termirajausten c i - vakiokertoimet: c = = 04 00n+3log(n)+ n n2 +3n 2 +n 2 = 04n 2 = cn 2, kun n > n 0 = Väite on O:n määritelmän nojalla todistettu Tietorakenteet, syksy 2007 Tietorakenteet, syksy

10 Kasvunopeuden suuruusluokista Tyypillisiä suuruusluokkatyyppejä (kasvavassa järjestyksessä, alempi dominoi ylempiä) O(): vakio O(log(n)): logaritminen O(n): lineaarinen O(n log(n)): n log n O(n 2 ): neliöllinen O(n k ): polynomiaalinen (k on vakio) O(a n ): exponentiaalinen (a > ) Kasvunopeuden suuruusluokista Suuruusluokkien kasvunopeuksia log(n) n n log(n) n 2 2 n Tietorakenteet, syksy Tietorakenteet, syksy Lisää O-esimerkkejä on O() (vakio) vasemmanpuolen luku on valtava, mutta kuitenkin vakio voidaan valita esim. c = ja n 0 = selvästi n:n arvosta riippumatta (eli myös kun n > n 0 = ) pätee c = kaikki vakiot ovat O() Tietorakenteet, syksy Lisää O-esimerkkejä Yleisesti: kun f(n) = a 0 n 0 + a n a k n k on k-asteen polynomi, niin f(n) on O(n k ) Todetaan, että ilman vakiokertoimia ylemmän asteen termit rajaavat alempia: n k n k... n n 0 =, kun n > n 0 = Yksittäisten termien ylärajat: valitaan c i = a i (itseisarvo huolehtii negatiivisista vakiotermeistä) c i n k = a i n k a i n i a i n i Valitaan c = Σ i c i a 0 n 0 + a n a k n k c 0 n k + c n k c k n k = cn k, kun n > n 0 = Tietorakenteet, syksy

11 Lisää O-esimerkkejä Entä esim. f(n) = n2 log(n)? voidaan toki osoittaa esim. että n2 log(n) = O(n2 ), n mutta......toisaalta myös 2 log(n) on oma kasvun suuruusluokka n:stä riippuvia kertoimia ei yleensä tule poistaa! Esim. n = O(n 2 ), koska O-notaatio sinänsä sallii turhan löysän ylärajan antamisen Käytännössä O-arvo tulisi määrittää mahdollisimman todenmukaiseksi (tiukaksi) ylärajaksi Tietorakenteet, syksy O-laskusääntöjä O-laskusääntöjä, jotka pätevät reaalifunktiolle f(n), g(n) ja h(n) kun n > 0 f(n) = O(cf(n)) millä tahansa vakiolla c 2 jos f(n) g(n) ja g(n) = O(h(n)), niin f(n) = O(h(n)) 3 jos f(n) = O(g(n)) ja g(n) = O(h(n)), niin f(n) = O(h(n)) 4 f(n) + g(n) = O(max{f(n),g(n)}) 5 jos g(n) = O(h(n)), niin f(n) + g(n) = O(f(n) + h(n)) Tietorakenteet, syksy O-laskusääntöjä 6 jos g(n) = O(h(n)), niin f(n)g(n) = O(f(n)h(n)) 7 jos f(n) on k-asteen polynomi, niin f(n) = O(n k ) 8 n k = O(a n ) millä tahansa vakioilla a >, k > 0 9 log(n k ) = O(log(n)) millä tahansa vakiolla k > 0 0 log(n) k = O(n a ) millä tahansa vakioilla a > 0, k > 0 (luentomonisteessa merkintä log k (n)) Toinen esimerkki suuruusluokkien eroista Kuinka suuri syöte saadaan hoidettua aikarajan puitteissa, jos jokainen alkeisoperaatio vie µs aikaa? aikaraja: alkeisoperaatioita sekunti minuutti tunti 400n n log(n) n n n Tietorakenteet, syksy Tietorakenteet, syksy

12 O, Ω ja Θ Määritelmä: f(n) on O(g(n)), jos on olemassa vakioarvot n 0 > 0 ja c > 0 siten, että f(n) c g(n) kun n > n 0 O eli iso-o tai ordo ilmaisee asymptoottisen ylärajan resurssivaatimusten kasvun suuruusluokalle Samankaltaisia notaatioita: Ω eli iso-omega ja Θ eli theta Ω: asymptoottinen alaraja Θ: asymptoottinen yhtäsuuruus Tietorakenteet, syksy 2007 O, Ω ja Θ Terminologiasta: kasvunopeuden suuruusluokkaa nimitetään usein algoritmin (asymptoottiseksi) kompleksisuudeksi Määritelmä: f(n) on Ω(g(n)), jos on olemassa vakioarvot n 0 > 0 ja c > 0 siten, että f(n) c g(n) kun n > n 0 ainoa ero O:n määritelmään on suuremmuuden suunta f(n) = Ω(g(n)): kompleksisuus on vähintään g(n) Tietorakenteet, syksy O, Ω ja Θ algoritmin suoritusaika t f(n) O, Ω ja Θ f(n) = Ω(g(n)) jos ja vain jos g(n) = O(f(n)) algoritmin suoritusaika t f(n) cg(n) g(n) c f(n) f(n) cg(n) cg(n) n 0 Syötteen koko (parametri) n n 0 Syötteen koko (parametri) n Tietorakenteet, syksy Tietorakenteet, syksy

13 O, Ω ja Θ Esimerkiksi f(n) = 2n 2 + 3n log(n) = Ω(n 2 ) 2n 2 + 3n log(n) n 2, kun n > n 0 = Esimerkiksi f(n) = 00 n2 3n = Ω(n 2 ) 00 n2 = 200 n n2 200 n2 3n, kun n > n 0 = 600 f(n) = 00 n2 3n = 200 n2 + ( 200 n2 3n) 200 n2, kun n > n 0 = 600 O, Ω ja Θ Θ eli theta yhdistää O- ja Ω-merkinnät Määritelmä: f(n) on Θ(g(n)), jos f(n) on Ω(g(n)) ja f(n) on O(g(n)) on olemassa vakio n 0 > 0, c > 0 ja c 2 > 0, joilla c g(n) f(n) c 2 g(n) aina kun n > n 0 f(n) = Θ(g(n)): kompleksisuus on täsmälleen g(n) (vakiotekijän rajoissa) Tietorakenteet, syksy Tietorakenteet, syksy O, Ω ja Θ algoritmin suoritusaika t c 2 g(n) f(n) c g(n) O, Ω ja Θ f(n) = Θ(g(n)) jos ja vain jos g(n) = Θ(f(n)) c g(n) f(n) c 2 g(n) c 2 f(n) g(n) c f(n) algoritmin suoritusaika t c 2 g(n) f(n) c g(n) n 0 Syötteen koko (parametri) n n 0 Syötteen koko (parametri) n Tietorakenteet, syksy Tietorakenteet, syksy

14 O, Ω ja Θ Θ on asymptoottisesti yksikäsitteinen jos esim. f(n) = Θ(g (n)) ja f(n) = Θ(g 2 (n)), niin g (n) ja g 2 (n) omaavat keskenään saman kompleksisuuden Esim. O-raja voi olla asymptoottisesti epätarkka, mutta Θ-arvo ei 2n = O(n) (tarkka) ja toisaalta 2n = O(n 2 ) (epätarkka raja) O, Ω ja Θ Esimerkiksi f(n) = 00 n2 3n = Θ(n 2 ) aiemmin todettiin, että f(n) = Ω(n 2 ) tarvitsee näyttää, että f(n) = O(n 2 ) 00 n2 n 2 3n n 2 f(n) = 00 n2 3n 2n 2, kun n > n 0 = 0 00 n2 3n = Ω(n 2 ) ja 00 n2 3n = O(n 2 ), joten f(n) = 00 n2 3n = Θ(n 2 ) Tietorakenteet, syksy Tietorakenteet, syksy symptoottisen notaation käytöstä Huomioita O-notaation käytöstä merkintä f(n) = O(g(n)) ei oikeasti tarkoita yhtäsuuruutta, vaan että funktiolla f(n) on suuruusluokkaa g(n) oleva yläraja formaalisti O(g(n)) on funktioiden joukko sisältää kaikki funktiot f(n), joiden kasvunopeus on korkeintaan samaa suuruusluokkaa kuin funktion g(n) voitaisiin siis (oikeammin) merkitä f(n) O(g(n)) Tietorakenteet, syksy 2007 symptoottisen notaation käytöstä Kuitenkin vallitseva tapa: f(n) = O(g(n)) Esimerkki: 2n 2 + 5n = 2n 2 + O(n) O(g(n)): jokin kasvunopeuden O(g(n)) omaava funktio O-arvot on yleensä tarkoituksenmukaista antaa mahdollisimman sievennetyssä muodossa Mukaanlukien vakiotermien poisto (esim. O(3n 2 ) sievennetään muotoon O(n 2 )) Vastaavat huomiot pätevät myös esim. Ω- ja Θ-notaatioille Tietorakenteet, syksy

15 symptoottisen notaation käytöstä symptoottisen notaation päätarkoitus on auttaa algoritmien korkean tason analysoinnissa vakiokertoimien huomioimatta jättäminen voi olla käytännössä merkittävää esim. O(n log(n)) toisinaan käytännössä tehokkaampi kuin O(n) Usein O-notaatiota käytetään Θ-notaation roolissa Tyypillinen tulkinta: O(f(n)) tarkoittaa (mahdollisimman) tiukkaa pahimman tapauksen kompleksisuutta Tietorakenteet, syksy symptoottisen notaation käytöstä Jos puhutaan yleisesti ottaen algoritmin kompleksisuudesta, niin O: algoritmin kompleksisuuden yläraja pahimman tapauksen analyysi Ω: algoritmin kompleksisuuden alaraja parhaan tapauksen analyysi Θ: algoritmin kompleksisuus vakiokertoimeen asti syötteestä riippumaton parhaalla ja pahimmalla tapauksella sama kompleksisuus Tietorakenteet, syksy symptoottisen notaation käytöstä Jos tarkastellaan nimenomaan parasta / keskimääräistä / pahinta tapausta: f(n) = Θ(g(n)): kompleksisuus on kyseisessä tapauksessa tarkalleen g(n) f(n) = O(g(n)): kompleksisuus on kyseisessä tapauksessa korkeintaan g(n) f(n) = Ω(g(n)): kompleksisuus on kyseisessä tapauksessa vähintään g(n) tällöin O ja ω mielekkäitä lähinnä jos tarkka Θ vaikea määrittää (tai se on vaikealukuinen) Tietorakenteet, syksy o ja ω O- ja Ω-merkintöjen aidot versiot: o ja ω Määritelmä: f(n) on o(g(n)), jos mille tahansa vakiolle c > 0 on olemassa vakioarvo n 0 siten, että f(n) < cg(n), kun n > n 0 f(n) on o(g(n)): f(n) g(n) 0, kun n tarkoittaa, että funktion f(n) kompleksisuus on aidosti pienempi kuin funktion g(n) vrt. f(n) = O(g(n)): kompleksisuus on pienempi tai yhtäsuuri kuin g(n) Esim. 2n + log(n) = 2n + o(n) Tietorakenteet, syksy

16 o ja ω Määritelmä: f(n) on ω(g(n)), jos mille tahansa vakiolle c > 0 on olemassa vakioarvo n 0 siten, että f(n) > cg(n), kun n > n 0 funktion f(n) kompleksisuus on aidosti suurempi kuin funktion g(n) vrt. f(n) = Ω(g(n)): kompleksisuus on suurempi tai yhtäsuuri kuin g(n) Esim. 2n log(n) + 5n = ω(n) f(n) = ω(g(n)) g(n) = o(f(n)) Muutama esimerkki lgorithm OddCount(, n) odds 0 for i 0 to n Do if [i] on pariton then odds odds + end if end for return odds symptoottinen analyysi: riittää laskea alkeisoperaatioiden lukumäärän suuruusluokka o- ja ω-notaatioita käytetään melko harvoin Tietorakenteet, syksy Tietorakenteet, syksy Muutama esimerkki lgorithm OddCount(, n) odds 0 for i 0 to n do if [i] on pariton then odds odds + end if end for return odds for-silmukan sisällä: O() silmukkaa suoritetaan O(n) kertaa kompleksisuus O() O(n) = O( n) = O(n) Tietorakenteet, syksy Toinen esimerkki lgorithm FindFirstOdd(, n) i 0 while i < n ja [i] ei ole pariton do i i + end while return i Paras tapaus? [0] on pariton parhaan tapauksen työmäärä Θ() Pahin tapaus? jokainen [i] parillinen pahimman tapauksen työmäärä Θ(n) Ω() ja O(n), Θ ei yleisesti ottaen olemassa Tietorakenteet, syksy

17 Toinen esimerkki lgorithm FindFirstOdd(, n) i 0 while i < n ja [i] ei ole pariton do i i + end while return i Keskimääräinen tapaus? O() jos sisältää satunnaislukuja todennäköisyys 2, että [i] parillinen todennäköisyys edetä alkioon i: 2 i esim. i 4 n. = osalle syötteistä Tietorakenteet, syksy Toinen esimerkki lgorithm FindFirstOdd(, n) i 0 while i < n ja [i] ei ole pariton do i i + end while return i Keskimääräinen tapaus jatkuu... olkoon q erilaisten kokoa n olevien syötteiden lukumäärä 2 i q syötettä, joilla tutkitaan alkio [i] Tietorakenteet, syksy Toinen esimerkki lgorithm FindFirstOdd(, n) i 0 while i < n ja [i] ei ole pariton do i i + end while return i Keskimääräinen tapaus jatkuu... kaikkien syötteiden käsittely: tutkitaan yhteensä Σ n i=0 (q ) alkiota 2 i keskiarvo: em. lukumäärä jaettuna arvolla q: Σi=0 n ( ) = 2 < 2 = O() 2 i 2 n Tietorakenteet, syksy Toinen esimerkki Hieman hankalampi tapaus: lgorithm Mysteeri(n) c for i to n do k cn for j c + to k do c c + end for end for return Voidaan soveltaa induktiota koodin yhteydessä ns. silmukkainvariantti Tutkitaan mitä tapahtuu algoritmin alkuvaiheessa (pienillä i:n arvoilla), ja yritetään edetä induktiivisesti arvosta i arvoon i + Tietorakenteet, syksy

18 Toinen esimerkki lgorithm Mysteeri(n) c for i to n do k cn for j c + to k do c c + end for end for return luksi nyrkkisääntö: algoritmin kompleksisuuden määrää sen useimmin suoritetun operaation suorituskertojen lukumäärä, lkm max operaatioita vakio c operaatioiden kokonaislukumäärä korkeintaan c lkm max Tietorakenteet, syksy Toinen esimerkki lgorithm Mysteeri(n) c for i to n do k cn for j c + to k do c c + end for end for return Tästä ensimmäinen huomio: algoritmin Mysteeri kompleksisuus verrannollinen sisäsilmukan suorituskertojen lukumäärään Jatkohuomio: kukin sisäsilmukan suoritus kasvattaa muuttujan c arvoa yhdellä kompleksisuus verrannollinen c:n lopulliseen arvoon Tietorakenteet, syksy Toinen esimerkki lgorithm Mysteeri(n) c for i to n do k cn for j c + to k do c c + end for end for return Tutkitaan arvon c muutosta induktiivisesti i = : sisäsilmukka suoritetaan arvoille j = 2...n eli c kasvaa arvosta arvoon n i = 2: sisäsilmukka suoritetaan arvoille j = n +...n 2 eli c kasvaa arvosta n arvoon n 2 Tietorakenteet, syksy Toinen esimerkki lgorithm Mysteeri(n) c for i to n do k cn for j c + to k do c c + end for end for return i = 3: sisäsilmukka suoritetaan arvoille j = n n 3 eli c kasvaa arvosta n 2 arvoon n 3 c:n arvot kun i =...3: n, n 2, n 3 c:n arvo näyttäisi noudattavan kaavaa n i Edetään induktioperiaatteen mukaisesti ja silmukkainvarianttia käyttäen Tietorakenteet, syksy

19 Toinen esimerkki lgorithm Mysteeri(n) c for i to n do k cn for j c + to k do c c + end for end for return Silmukkainvariantti: c:n arvo on n i kierroksen i jälkeen Induktio-oletus: sääntö päti kun i =...3. Oletetaan, että c:n arvo on n i aina kun i < i Induktioaskel: tutkitaan päteekö väite kierroksen i jälkeen Tietorakenteet, syksy Toinen esimerkki lgorithm Mysteeri(n) c for i to n do k cn for j c + to k do c c + end for end for return Oletuksen nojalla c:n arvo kierroksen i jälkeen on n i kierroksen i alussa asetetaan k cn eli k saa arvon nn i = n i c:n arvo kasvaa arvolla k c, joten c:n uusi arvo on c + k c = k = n i Induktion nojalla väite pätee kaikilla i Tietorakenteet, syksy Toinen esimerkki lgorithm Mysteeri(n) c for i to n do k cn for j c + to k do c c + end for end for return Kierroksen i = n jälkeen c = n i = n n lgoritmin Mysteeri kompleksisuus on näin ollen O(n n ) tarkkaan ottaen Θ(n n ), koska pahin ja paras tapaus identtisiä ja esitetyssä analyysissä ainoastaan vakiotekijän suuruinen epätarkkuus Tietorakenteet, syksy

20 Pino (stack) Pino: viimeisenä sisään, ensimmäisenä ulos (LIFO, Last In, First Out) -tietorakenne kaksi perusoperaatiota: alkion lisäys pinon päälle (push), ja päällimmäisen alkion poisto (pop) tietoalkio Push(alkio2) eli lisätään tietoalkio 2 tietoalkio 2 tietoalkio tietoalkio 3 tietoalkio 2 tietoalkio tietoalkio 2 tietoalkio Push(alkio3) eli lisätään tietoalkio 3 Pop() eli poistetaan päällimmäinen alkio Push(alkio4) eli lisätään tietoalkio 4 tietoalkio 4 tietoalkio 2 tietoalkio Tietorakenteet, syksy 2007 Pinon tarkempi määrittely Pino S on abstrakti tietotyyppi, jolla on ainakin perusmetodit: Push(x): lisää tietoalkion x pinon päälle Pop(): palauttaa pinon päällimmäisen alkion (ja poistaa sen pinosta) tapahtuu virhe, jos pino on tyhjä Muutamia pinon mahdollisia apumetodeja IsEmpty(): palauttaa arvon true, jos pino on tyhjä, ja muuten arvon false Tietorakenteet, syksy Pinon tarkempi määrittely Top(): palauttaa pinon päällimmäisen alkion poistamatta sitä pinosta tapahtuu virhe, jos pino on tyhjä käytetään joskus myös nimeä Peek() Size(): palauttaa kokonaislukuarvon, joka kertoo kuinka monta alkiota pinossa on Esimerkki tietoalkio Top() palauttaa päällimmäisen alkion poistamatta sitä tietoalkio 4 tietoalkio 3 tietoalkio 2 tietoalkio Pop() palauttaa (ja poistaa) päällimmäisen alkion tietoalkio 4 tietoalkio 3 tietoalkio 2 Pop() pino on tyhjä virhe! tietoalkio 5 tietoalkio 4 tietoalkio 3 tietoalkio 2 IsEmpty() palauttaa arvon true tietoalkio 4 tietoalkio 3 tietoalkio 2 Size() palauttaa arvon 3 Push(alkio5) lisää pinon päälle alkion 5 Pop() palauttaa ja poistaa päällimmäisen alkion IsEmpty() palauttaa arvon false Tietorakenteet, syksy Tietorakenteet, syksy

21 Pinon rajapinta Javalla public interface Stack { public int size(); public boolean isempty(); public Object top() throws StackEmptyException; public void push (Object element); public Object pop() throws StackEmptyException; } public class StackEmptyException extends RuntimeException { public StackEmptyException(String err) { super(err); } } Pinon taulukkototeutus bstrakti määrittely ei ota kantaa toteutustapaan Perustapa: pinon alkiot talletetaan taulukkoon Taulukkototeutuksen osat: kokoa N oleva taulukko S muuttuja top, joka kertoo taulukon päällimmäisen alkion indeksin toteutustavan aiheuttama rajoitus: pinoon mahtuu korkeintaan N alkiota, missä N on taulukon koko Tietorakenteet, syksy Tietorakenteet, syksy Pinon taulukkototeutus Esim. pino taulukossa S, jonka koko on N = 0 pinossa 4 alkiota alkio alkio2 alkio3 alkio4 top = 3 Push(alkio5) lisää alkion 5 kohtaan top alkio alkio2 alkio3 alkio4 alkio5 top = 3 top + = 4 ja arvoa top kasvatetaan yhdellä alkio alkio2 alkio3 alkio4 alkio5 Pinon taulukkototeutus tyhjä pino top = pino on täynnä alkio alkio2 alkio3 alkio4 alkio5 alkio6 alkio7 alkio8 alkio9 alkio0 top = 9 top = N, seuraava paikka N menisi taulukon rajojen yli nyt Push(x) tuottaisi virheen (ylivuoto) top = 4 Tietorakenteet, syksy Tietorakenteet, syksy

22 Pinon taulukkototeutus Javalla public class rraystack implements Stack { public static final int defaultn = 000; private int N; private Object S[]; private int top = -; public rraystack() { this(defaultn); } public rraystack(int size) { N = size; S = new Object[N]; } Pinon taulukkototeutus Javalla public int size() { return (top + ); } public boolean isempty() { return (top < 0); } public void push(object obj) { if (size() == N) throw new StackFullException("Stack overflow."); S[++top] = obj; } Tietorakenteet, syksy Tietorakenteet, syksy Pinon taulukkototeutus Javalla public Object top() throws StackEmptyException { if (isempty()) throw new StackEmptyException("Stack is empty."); return S[top]; } } public Object pop() throws StackEmptyException { Object elem; if (isempty()) throw new StackEmptyException("Stack is Empty."); elem = S[top]; S[top--] = null; return elem; } Tietorakenteet, syksy 2007 Jono (queue) Jono: ensimmäisenä sisään, ensimmäisenä ulos (FIFO, First In, First Out) -tietorakenne kaksi perusoperaatiota: alkion lisäys jonon perälle (enqueue), ja jonon ensimmäisen alkion poisto (dequeue) alkio alkio alkio2 alkio alkio2 alkio3 alkio2 alkio3 alkio3 Enqueue(alkio2) Enqueue(alkio3) Dequeue() Dequeue() Tietorakenteet, syksy

23 Jonon tarkempi määrittely Jono Q on abstrakti tietotyyppi, jolla on ainakin perusmetodit: Enqueue(x): lisää tietoalkion x jonon perälle Dequeue(): palauttaa jonon ensimmäisen alkion (ja poistaa sen jonosta) tapahtuu virhe, jos jono on tyhjä Jonon tarkempi määrittely Front(): palauttaa jonon ensimmäisen alkion poistamatta sitä jonosta tapahtuu virhe, jos jono on tyhjä Size(): palauttaa kokonaislukuarvon, joka kertoo kuinka monta alkiota jonossa on Vastaavat apumetodit kuin pinolla IsEmpty(): palauttaa arvon true, jos jono on tyhjä, ja muuten arvon false Tietorakenteet, syksy Tietorakenteet, syksy Esimerkki Front() aiheuttaa virheen Enqueue(alkio) lisää alkion alkio Size() palauttaa arvon alkio Enqueue(alkio2) lisää alkion 2 alkio alkio2 IsEpmty() palauttaa arvon false alkio alkio2 Front() palauttaa alkion poistamatta sitä alkio alkio2 Enqueue(alkio3) lisää alkion 3 alkio alkio2 alkio3 Dequeue() palauttaa ja poistaa alkion alkio2 alkio3 Jonon rajapinta Javalla public interface Queue { public int size(); public boolean isempty(); public Object front() throws QueueEmptyException; public void enqueue (Object element); public Object dequeue() throws QueueEmptyException; } public class QueueEmptyException extends RuntimeException { public QueueEmptyException(String err) { super(err); } } Tietorakenteet, syksy Tietorakenteet, syksy

24 Jonon taulukkototeutus Jonon taulukkototeutuksen osat: kokoa N oleva taulukko Q muuttuja f irst, joka kertoo jonon ensimmäisen alkion paikan taulukossa jos jono on tyhjä, first kertoo mihin ensimmäinen alkio asetetaan muuttuja rear, joka kertoo seuraavan taulukossa vapaana olevan alkion indeksin Jonon taulukkototeutus Esim. jono taulukossa Q, jonka koko on N = 0 jonossa 5 alkiota alkio alkio2 alkio3 alkio4 alkio5 first = 0 rear = 5 Dequeue palauttaa ja poistaa alkion alkio2 alkio3 alkio4 alkio5 first = 0 rear = 5 ja arvoa first kasvatetaan yhdellä alkio2 alkio3 alkio4 alkio5 first = rear = 5 Tietorakenteet, syksy Tietorakenteet, syksy Jonon taulukkototeutus alkutilanne alkio8 alkio9 first = 7 rear = 9 Enqueue(alkio0) lisää alkion 0 kohtaan alkio8 alkio9 alkio0 first = 7 rear = 9 arvoa rear kasvatetaan yhdellä alkio8 alkio9 alkio0 rear = (rear + )%N = 0%0 = 0 first = 7 Jonon taulukkototeutus lähtötilanne alkio alkio2 alkio3 alkio5 alkio6 alkio7 alkio8 alkio9 alkio0 rear = 3 first = 4 Enqueue(alkio4) lisäsi alkion 4 kohtaan alkio alkio2 alkio3 alkio4 alkio5 alkio6 alkio7 alkio8 alkio9 alkio0 first = 4 rear = 4 ongelma, jos jonon tyhjyys tutkitaan ehdon first == rear pohjalta (a la luentomoniste) Tietorakenteet, syksy Tietorakenteet, syksy

25 Jonon taulukkototeutus ratkaisu : sallitaan vain N alkiota (a la luentomoniste) ratkaisu 2: ylläpidetään erikseen tieto alkioiden lukumäärästä (nämä kalvot) jonon alkioiden lukumäärä ratkaisussa : jos alkioita vähemmän kuin N, niin alkioiden lkm = (rear + N first)%n aa2a3 a9 a0aa2a3 rear = 3 first = 8 rear + N = = 3 Jonon taulukkototeutus Javalla public class rrayqueue implements Queue { public static final int defaultn = 000; private int N; private Object Q[]; private int first = 0; private int rear = 0; private int items = 0; public rrayqueue() { this(defaultn); } public rrayqueue(int size) { N = size; Q = new Object[N]; } Tietorakenteet, syksy Tietorakenteet, syksy Jonon taulukkototeutus Javalla public int size() { return items; } public boolean isempty() { return (items == 0); } public void enqueue(object obj) { if (size() == N) throw new QueueFullException("Queue overflow."); Q[rear] = obj; rear = (rear+) % N; items++; } Tietorakenteet, syksy Jonon taulukkototeutus Javalla public Object front() throws QueueEmptyException { if (isempty()) throw new QueueEmptyException("Queue is empty."); return Q[front]; } public Object dequeue() throws QueueEmptyException { Object elem; if (isempty()) throw new QueueEmptyException("Queue is Empty."); elem = Q[front]; Q[front] = null; front = (front+) % N; items--; return elem; } } Tietorakenteet, syksy

26 Loppuhuomautuksia Sekä pinon että jonon taulukkototeutuksen tilavaatimus on Θ(N) muuttumaton, eikä riipu alkioiden lukumäärästä n jos N suuri arvoon n nähden, suuri osa taulukon muistitilasta käyttämättä jos N liian pieni, tila voi loppua kesken Kukin tässä käsitelty perus- sekä apumetodi omaa suoritusajan Θ() Tietorakenteet, syksy

27 Kaksiloppuinen jono (double-ended queue, deque) Viimeksi käsiteltiin pino: lisäys ja poisto lopusta jono: lisäys loppuun, poisto alusta Pinon ja jonon yleistävä tietorakenne: kaksiloppuinen jono alkion lisäys/poisto voidaan kohdistaa jonon alkuun tai loppuun Kaksiloppuinen jono (double-ended queue, deque) Kaksiloppuinen jono D on abstrakti tietotyyppi, jolla on ainakin seuraavat 4 perusmetodia... PushFront(x): lisää tietoalkion x jonon eteen alkio alkio2 alkio3 alkio alkio2 alkio PushFront(alkio2) PushFront(alkio3) muita nimityksiä mm. InsertFront, ppendleft Tietorakenteet, syksy 2007 Tietorakenteet, syksy Kaksiloppuinen jono (double-ended queue, deque) Kaksiloppuinen jono D on abstrakti tietotyyppi, jolla on ainakin seuraavat 4 perusmetodia... PushBack(x): lisää tietoalkion x jonon perään alkio alkio alkio2 alkio alkio2 alkio3 PushBack(alkio2) PushBack(alkio3) vastaa pinon Push(x)- ja tavallisen jonon Enqueue(x)-metodia muita nimityksiä mm. InsertLast, ppend Tietorakenteet, syksy Kaksiloppuinen jono (double-ended queue, deque) Kaksiloppuinen jono D on abstrakti tietotyyppi, jolla on ainakin seuraavat 4 perusmetodia... PopFront(): palauttaa ensimmäisen alkion (ja poistaa sen jonosta) alkio alkio2 alkio3 alkio2 alkio3 alkio3 tapahtuu virhe, jos jono on tyhjä PopFront() PopFront() tavallisen jonon vastine: Dequeue() Tietorakenteet, syksy

28 Kaksiloppuinen jono (double-ended queue, deque) Kaksiloppuinen jono D on abstrakti tietotyyppi, jolla on ainakin seuraavat 4 perusmetodia... PopBack(): palauttaa viimeisen alkion (ja poistaa sen jonosta) alkio alkio2 alkio3 alkio alkio2 alkio tapahtuu virhe, jos jono on tyhjä vastaa pinon Pop()-metodia PopBack() PopBack() Kaksiloppuinen jono (double-ended queue, deque) Vastaavat apumetodit IsEmpty(): palauttaa arvon true, jos jono D tyhjä, ja muuten arvon false Front(): palauttaa jonon ensimmäisen alkion poistamatta sitä jonosta tapahtuu virhe, jos D on tyhjä alkio alkio2 alkio3 alkio alkio2 alkio3 alkio alkio2 alkio3 IsEmpty() palauttaa false Front() palauttaa alkion, ei poista Tietorakenteet, syksy Tietorakenteet, syksy Kaksiloppuinen jono (double-ended queue, deque) Back(): palauttaa jonon viimeisen alkion poistamatta sitä jonosta tapahtuu virhe, jos D on tyhjä vastaa pinon Top()-metodia Size(): palauttaa kokonaislukuarvon, joka kertoo kuinka monta alkiota jonossa D on alkio alkio2 alkio3 alkio alkio2 alkio3 alkio alkio2 alkio3 Back() palauttaa alkion 3, ei poista Size() palauttaa lukumäärän 3 Tietorakenteet, syksy Kaksiloppuisen jonon taulukkototeutus Kaksiloppuinen jono taulukossa: esimerkiksi jonon taulukkototeutusta matkien kokoa N oleva taulukko D muuttuja f irst: jonon ensimmäisen alkion indeksi jos jono on tyhjä, first kertoo mihin ensimmäinen alkio asetetaan muuttuja rear: seuraavan taulukossa vapaana olevan alkion indeksi muuttuja items: jonon alkioiden lukumäärä Tietorakenteet, syksy

29 PushFront(x) taulukossa alkio alkio2 alkio3 alkio7 alkio8 alkio9 alkio0 rear = 3 first = alkio alkio2 alkio3 alkio x alkio7 alkio8 alkio9 alkio0 PushBack(x) taulukossa alkio alkio2 alkio3 alkio7 alkio8 alkio9 alkio0 rear = 3 first = alkio alkio2 alkio3 alkio x alkio7 alkio8 alkio9 alkio0 rear = 3 D.PushFront(x) if items = N then virhe("d täynnä") first (first + N ) mod N D[first] x items items + first = (first + N ) mod N = 5 rear = (rear + ) mod N = 4 D.PushBack(x) if items = N then virhe("d täynnä") D[rear] x rear (rear + ) mod N items items + first = 6 Tietorakenteet, syksy Tietorakenteet, syksy PopFront() taulukossa alkio alkio2 alkio3 alkio7 alkio8 alkio9 alkio0 rear = 3 first = alkio alkio2 alkio3 alkio8 alkio9 alkio0 PopBack() taulukossa alkio5 alkio6 alkio7 alkio8 alkio9 alkio0 rear = 0 first = alkio5 alkio6 alkio7 alkio8 alkio9 rear = 3 first = (first + ) mod N = 7 first = 4 rear = (rear + N ) mod N = 9 D.PopFront() if items = 0 then virhe("d tyhjä") elem D[first] vapauta D[f irst] first (first + )mod N items items Return elem D.PopBack() if items = 0 then virhe("d tyhjä") rear (rear + N )mod N elem D[rear] vapauta D[rear] items items Return elem Tietorakenteet, syksy 2007 Tietorakenteet, syksy

30 Linkitetty lista Keskusmuisti (RM) Linkitetty lista Keskusmuisti (RM) Taulukko Tietorakenteet, syksy Tietorakenteet, syksy Linkitetty lista Keskusmuisti (RM) Linkitetty lista Keskusmuisti (RM) 2 2 Obj. x Tietorakenteet, syksy Tietorakenteet, syksy

31 Linkitetty lista Keskusmuisti (RM) Linkitetty lista Keskusmuisti (RM) 2 Obj. x 3 2 Obj. x 3 2 viite seuraav. alkioon Tietorakenteet, syksy Tietorakenteet, syksy Linkitetty lista 3 Keskusmuisti (RM) 2 Obj. x 4 Linkitetyn listan solmu (node) Javalla class Node { private Object element; private Node next; public Node() { this(null, null); } public Node(Object e, Node n) { element = e; next = n; } public void setelem(object newelem) { element = newelem; } public void setnext(node newnext) { next = newnext; } public Object getelem() { return element; } public Node getnext() {return next; } } Tietorakenteet, syksy Tietorakenteet, syksy

32 Linkitetty lista Tyypillinen yhteen suuntaan linkitetty lista: 2 n null head tail head: viite ensimmäiseen solmuun tail: viite viimeiseen solmuun head = tail = null, jos lista tyhjä kukin solmu omaa viitteen seuraavaan solmuun viimeisen solmun viite = null Linkitetty lista 2 n null head tail Lisäys linkitetyn listan L alkuun L.InsertFront(x) tmp new Node(x, head) if tail = null then tail tmp head tmp Tietorakenteet, syksy Tietorakenteet, syksy Linkitetty lista 2 n null Linkitetty lista 2 n null head tail head tail Lisäys linkitetyn listan L loppuun L.InsertBack(x) tmp new Node(x, null) if head = null then head tmp else tail.setnext(tmp) tail tmp Poisto linkitetyn listan L alusta L.RemoveFront() if head = null then virhe("lista tyhjä") elem head.getelem() head head.getnext() if head = null then tail null return elem Tietorakenteet, syksy Tietorakenteet, syksy

33 Linkitetty lista 2 n null head tail Poisto linkitetyn listan L lopusta L.RemoveBack() tmp.setnext(null) if head = null then elem tail.getelem() virhe("lista tyhjä") tail tmp if head = tail then return elem return L.RemoveFront() tmp head while tmp.getnext() tail do tmp tmp.getnext() Tietorakenteet, syksy Kaksiloppuisen jonon toteutusvaihtoehtoja Kuvatut linkitetyn listan lisäys/poisto-operaatiot toteuttavat kaksiloppuisen jonon tilavaatimus: O(n), missä n jonon alkioiden lukumäärä (vrt. taulukkototeutus: O(N)) tila skaalautuu suoraan solmujen lukumärään suhteen taulukkototeutuksen operaatioiden suoritusaika Θ(), mutta......linkitetyn listan metodi RemoveBack() eli PopBack() oli O(n) toiseksi viimeisen solmun haku! Tietorakenteet, syksy Kahteen suuntaan linkitetty lista Myös viimeisen solmun poisto onnistuu ajassa Θ(), jos käytetään kahteen suuntaan linkitettyä listaa null 2 n head tail null kukin solmu omaa viitteen sekä seuraavaan että edeltävään solmuun toteutus samankaltainen kuin yhteen suuntaan linkitetyllä listalla Kahteen suuntaan linkitetty lista null 2 n head DL.InsertFront(x) tmp new Node(x, null, head) if tail = null then tail tmp else head.setprev(tmp) head tmp tail null Tietorakenteet, syksy Tietorakenteet, syksy

34 Kahteen suuntaan linkitetty lista null 2 n null Kahteen suuntaan linkitetty lista null 2 n null head tail head tail DL.RemoveFront() if head = null then virhe("lista tyhjä") elem head.getelem() head head.getnext() if head = null then tail null else head.setprev(null) return elem Tietorakenteet, syksy Lisäys/poisto kaksoislinkitetyn listan lopussa onnistuu symmetrisesti head tail, Prev Next Tietorakenteet, syksy

35 Sekvenssi Sekvenssi: kokoelma peräkkäisiä alkioita (lineaarinen järjestys) Riku Tero Esim. pino, jono ja kaksiloppuinen jono ovat sekvenssin erikoistapauksia sekvenssejä, jotka kohdistavat operaationsa ensimmäiseen/viimeiseen alkioon alkiolla on yksikäsitteinen seuraaja- ja edeltäjäalkio (paitsi alussa/lopussa) Sekvenssi Yleinen sekvenssi: kullakin alkiolla on aste (rank, järjestysnumero ) Riku Tero aste: 0 aste: aste: 2 aste: 3 aste: 4 ensimmäisen alkion aste on 0, toisen, jne. aste alkion indeksi sekvenssissä Tietorakenteet, syksy 2007 Tietorakenteet, syksy Yleinen sekvenssi kullakin alkiolla on paikka abstrakti sijoituspaikan käsite abstraktina tietotyyppinä: alkio on datajäsen, ja metodi element() palauttaa alkion vrt. esim. solmu, johon alkio on tallennettu paikka a paikka b paikka v paikka y paikka c Riku Tero aste: 0 aste: aste: 2 aste: 3 aste: 4 Yleinen sekvenssi operaatioita voidaan suorittaa sekvenssin mihin tahansa kohtaan kohdan määritys: joko alkion aste, tai sekvenssissä olevan alkion paikka huom: luentomonisteessa käsitellään aluksi erillisinä tapauksina: astetta soveltava sekvenssi (asteet, ei paikkoja) paikkasekvenssi (paikat, ei asteita) Tietorakenteet, syksy Tietorakenteet, syksy

36 Sekvenssin metodit ElemtRank(r): palauttaa asteen r omaavan alkion virhe, jos r ei kuulu väliin 0...n, kun alkioita n kpl paikka b aste: 0 paikka a aste: paikka y Riku aste: 2 ElemtRank(), palauttaa alkion Sekvenssin metodit ReplaceElemtRank(r,x): korvaa asteen r omaavan alkion alkiolla x, ja palauttaa korvatun alkion virhe, jos r ei kuulu väliin 0...n paikka b aste: 0 paikka b aste: 0 paikka a aste: paikka a aste: paikka y Riku aste: 2 paikka y Riku aste: 2 paikka c Tero aste: 3 paikka c Tero aste: 3 ReplaceElemtRank(, ), palauttaa alkion Tietorakenteet, syksy Tietorakenteet, syksy Sekvenssin metodit InsertElemtRank(r,x): lisää alkion x sekvenssiin r-asteiseksi alkioksi virhe, jos r ei kuulu väliin 0...n palauttaa uuden alkion paikan (luentomoniste: ei palauta mitään, koska sovelsi vain astetta) paikka b aste: 0 paikka b aste: 0 paikka b aste: 0 paikka a aste: paikka a aste: paikka p nu aste: paikka y Riku aste: 2 paikka y Riku aste: 2 paikka a aste: 2 InsertElemtRank(3,Tero), palauttaa paikan c paikka c Tero aste: 3 paikka y Riku aste: 3 InsertElemtRank(,nu), palauttaa paikan p paikka c Tero aste: 4 Tietorakenteet, syksy Sekvenssin metodit RemoveElemtRank(r): poistaa asteen r omaavan alkion ja palauttaa sen virhe, jos r ei kuulu väliin 0...n myös poistetun alkion paikka häviää paikka b aste: 0 paikka b aste: 0 paikka a aste: paikka a aste: paikka y Riku aste: 2 paikka c Tero aste: 2 paikka c Tero aste: 3 RemoveElemtRank(2) palauttaa alkion Riku Tietorakenteet, syksy

37 Sekvenssin metodit paikka b paikka a aste: 0 aste: paikka h Hanna aste: 2 paikka y Riku aste: 3 paikka c Tero aste: 4 Size(): palauttaa sekvenssin alkioiden lukumäärän IsEmpty(): palautusarvo true/false kertoo, onko sekvenssi tyhjä Sekvenssin metodit Replace(p,x): korvaa paikassa p olevan alkion alkiolla x, ja palauttaa korvatun alkion paikka b aste: 0 paikka b aste: 0 paikka a aste: paikka a aste: paikka y Riku aste: 2 paikka y Topi aste: 2 paikka c Tero aste: 3 paikka c Tero aste: 3 Replace(y, Topi), palauttaa alkion Riku First()/Last(): palauttaa sekvenssin ensimmäisen/viimeisen alkion paikan Before(p)/fter(p): palauttaa paikkaa p edeltävän/seuraavan paikan sekvenssissä Tietorakenteet, syksy Tietorakenteet, syksy Sekvenssin metodit Swap(p,q): vaihtaa paikkojen p ja q alkiot keskenään paikka b aste: 0 paikka b aste: 0 paikka a aste: paikka a Tero aste: paikka y Riku aste: 2 paikka y Riku aste: 2 paikka c Tero aste: 3 paikka c aste: 3 Swap(a,c) Sekvenssin metodit InsertFirst(x)/InsertLast(x): lisää alkion x sekvenssin ensimmäiseksi/viimeiseksi alkioksi ja palauttaa alkion paikan paikka a aste: 0 paikka b aste: 0 paikka b aste: 0 paikka y Riku aste: paikka a aste: paikka a aste: InsertFirst(), palauttaa paikan b paikka y Riku aste: 2 paikka y Riku aste: 2 InsertLast(Tero), palauttaa paikan d paikka d Tero aste: 3 Tietorakenteet, syksy 2007 Tietorakenteet, syksy

38 Sekvenssin metodit InsertBefore(p,x)/Insertfter(p,x): lisää alkion x paikassa p olevan alkion eteen/perään ja palauttaa uuden alkion paikan paikka b aste: 0 paikka b aste: 0 paikka b aste: 0 paikka a aste: paikka a aste: paikka a aste: paikka c Tero aste: 2 paikka y Riku aste: 2 paikka h Hanna aste: 2 InserBefore(c, Riku) palauttaa paikan y paikka c Tero aste: 3 paikka y Riku aste: 3 Insertfter(a, Hanna) palauttaa paikan h paikka c Tero aste: 4 Sekvenssin metodit Remove(p): poistaa paikassa p olevan alkion ja palauttaa sen paikka b aste: 0 paikka a aste: paikka y Riku aste: 2 paikka a paikka y paikka c aste: 0 Riku aste: Tero aste: 2 paikka c Tero aste: 3 Remove(b), palauttaa alkion trank(r): palauttaa r-asteisen alkion paikan RankOf(p): palauttaa paikassa p olevan alkion asteen Tietorakenteet, syksy Tietorakenteet, syksy Sekvenssin toteutuksesta Sekvenssi on luontevaa toteuttaa kaksoislinkitetyllä listalla paikka: viite alkiota vastaavaan solmuun Operaatioiden aikavaativuudet O(n), jos operaation sovelluskohta täytyy etsiä selaamalla listaa trank, RankOf, ElemtRank, ReplaceElemtRank, InsertElemtRank, RemoveElemtRank muut operaatiot: O() Tietorakenteet, syksy Sekvenssin toteutuksesta Sekvenssin toteutus taulukossa erilliset paikkatietueet paikka b aste: 0 paikka a aste: paikka h Hanna aste: 2 paikka y Riku aste: paikka c Tero aste: 4 taulukossa viitteet paikkatietueisiin paikka säilyy samana, vaikka aste muuttuisi Tietorakenteet, syksy

39 Sekvenssin toteutuksesta Lisäys/poisto taulukon keskellä: O(n) paikka b aste: 0 paikka a aste: paikka y Riku aste: paikka b aste: 0 paikka a aste: paikka y Riku aste: 2 paikka c Tero aste: 4 paikka c Tero aste: 3 Sekvenssin toteutuksesta Seuraus: taulukossa operaatioiden Insertfter, InsertBefore, InsertElemtRank, RemoveElemt- Rank ja Remove aikavaatimus on O(n) Kaikki muut operaatiot O() käytetään rengasrakennetta (a la jono) kun lisäys/poisto alkuun/loppuun Tietorakenteet, syksy Tietorakenteet, syksy Linkitetty lista vs. dynaaminen taulukko Dynaaminen taulukko (esim. Javan Vector) jos koon N taulukko täyttyy(n = N), varataan kokoa 2N oleva taulukko Linkitetty lista vs. dynaaminen taulukko jos n N/4, varataan kokoa N/2 oleva taulukko siirto uuteen taulukkoon: Θ(n) työtä voidaan osoittaa, että pahimmassakin tapauksessa keskimäärin O() per alkio Tietorakenteet, syksy siirto uuteen taulukkoon: Θ(n) työtä voidaan osoittaa, että pahimmassakin tapauksessa keskimäärin O() per alkio N/4 n N taulukon tilahukka O(n) Tietorakenteet, syksy

40 Linkitetty lista vs. dynaaminen taulukko Linkitetty lista: kussakin solmussa tietoalkio (tai viite sellaiseen) ja lisäksi viite toiseen solmuun listan tilahukka on Θ(n) vrt. dynaaminen taulukko: O(n) kutakin lisättyä/poistettua alkiota kohden tehty tietoalkion ja viitteen asetus vrt. dynaamisessa taulukossa siirrettävien alkioiden lukumäärä verrannollinen lisättyjen/poistettujen alkioden määrään Linkitetty lista vs. dynaaminen taulukko Keskusmuisti (RM) Taulukko Tietorakenteet, syksy Tietorakenteet, syksy Linkitetty lista vs. dynaaminen taulukko Keskusmuisti (RM) Linkitetty lista vs. dynaaminen taulukko Yhtenäiselle taulukolle voi olla hankalampaa varata muistia Taulukon ja (kaksoislinkitetyn) listan keskeinen suoritusajan tradeoff: alkion haku indeksin perusteella: taulukossa O(), listassa O(n) lisäys/poisto keskellä: taulukossa O(n), listassa O() (jos lisäyskohta jo tiedetään) Tietorakenteet, syksy Tietorakenteet, syksy

41 Tietoalkioiden hierarkia Pinot, jonot, yleisemmin sekvenssit: kokoelma peräkkäisiä alkioita (lineaarinen järjestys) Riku Tero Yleisempi tilanne: alkioiden hierarkia Tietoalkioiden hierarkia Kukin alkio (viite) talletettuna solmuun (node) vastaa paikan käsitettä solmu c Riku solmu b solmu a solmu d Tero solmu e Kahden solmun u ja v väliset suhteet hierarkiassa: Riku Tero Tietorakenteet, syksy 2007 Tietorakenteet, syksy Tietoalkioiden hierarkia solmu a Tietoalkioiden hierarkia solmu a solmu b solmu e solmu b solmu e solmu c Riku solmu d Tero u on solmun v vanhempi (parent) u on solmun v välitön edeltäjä (askelta ylempänä hierarkiassa) solmut u ja v yhdistetty kaarella ja u on v:n yläpuolella vanhemman sijaan joskus termi isä (father) solmu c Riku solmu d Tero u on solmun v lapsi (child) u on solmun v välitön seuraaja (askelta alempana hierarkiassa) solmut u ja v yhdistetty kaarella ja u on v:n alapuolella Tietorakenteet, syksy Tietorakenteet, syksy

42 Tietoalkioiden hierarkia solmu a Tietoalkioiden hierarkia solmu a solmu b solmu e solmu b solmu e solmu c Riku solmu d Tero u on solmun v esivanhempi (ancestor) u = v tai u on solmun v vanhemman esivanhempi u on v tai jokin sitä edeltävä solmu kukin solmu v on itsensä esivanhempi! solmu c Riku solmu d Tero u on solmun v jälkeläinen (descendant) v on solmun u esivanhempi kukin solmu v on itsensä jälkeläinen! Tietorakenteet, syksy Tietorakenteet, syksy Puurakenteen määritelmä Puu T on sellainen solmujen joukko, jossa: on yksikäsitteinen juuri (root) r (tai puu tyhjä) ylimmän tason solmu kullakin solmulla on yksikäsitteinen vanhempi ainoa poikkeus: juuri ( kantaisä ) kukin solmu on juuren r jälkeläinen tai yhtäpitävästi: juuri r on kunkin solmun esivanhempi Jos puussa on n solmua, niin kaaria on? n Tietorakenteet, syksy Puurakenteen määritelmä Puu? Riku Tero ei: Terolla kaksi vanhempaa Puu? Riku Tero ei: sekä Rikulla että lla ei vanhempaa Tietorakenteet, syksy

f(n) = Ω(g(n)) jos ja vain jos g(n) = O(f(n))

f(n) = Ω(g(n)) jos ja vain jos g(n) = O(f(n)) Määritelmä: on O(g(n)), jos on olemassa vakioarvot n 0 > 0 ja c > 0 siten, että c g(n) kun n > n 0 O eli iso-o tai ordo ilmaisee asymptoottisen ylärajan resurssivaatimusten kasvun suuruusluokalle Samankaltaisia

Lisätiedot

A215 Tietorakenteet. Tietojenkäsittelytieteiden laitos Tampereen yliopisto. Periodit I-II, syksy 2007

A215 Tietorakenteet. Tietojenkäsittelytieteiden laitos Tampereen yliopisto. Periodit I-II, syksy 2007 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:

Lisätiedot

Kaksiloppuinen jono D on abstrakti tietotyyppi, jolla on ainakin seuraavat 4 perusmetodia... PushFront(x): lisää tietoalkion x jonon eteen

Kaksiloppuinen jono D on abstrakti tietotyyppi, jolla on ainakin seuraavat 4 perusmetodia... PushFront(x): lisää tietoalkion x jonon eteen Viimeksi käsiteltiin pino: lisäys ja poisto lopusta jono: lisäys loppuun, poisto alusta Pinon ja jonon yleistävä tietorakenne: kaksiloppuinen jono alkion lisäys/poisto voidaan kohdistaa jonon alkuun tai

Lisätiedot

Pino S on abstrakti tietotyyppi, jolla on ainakin perusmetodit:

Pino S on abstrakti tietotyyppi, jolla on ainakin perusmetodit: Pino (stack) Pino: viimeisenä sisään, ensimmäisenä ulos (LIFO, Last In, First Out) -tietorakenne kaksi perusoperaatiota: alkion lisäys pinon päälle (push), ja päällimmäisen alkion poisto (pop) Push(alkio)

Lisätiedot

Sekvenssi: kokoelma peräkkäisiä alkioita (lineaarinen

Sekvenssi: kokoelma peräkkäisiä alkioita (lineaarinen Sekvenssi Sekvenssi: kokoelma peräkkäisiä alkioita (lineaarinen järjestys) Timo Esim. pino, jono ja kaksiloppuinen jono ovat sekvenssin erikoistapauksia sekvenssejä, jotka kohdistavat operaationsa ensimmäiseen/viimeiseen

Lisätiedot

Algoritmit 1. Luento 2 Ke Timo Männikkö

Algoritmit 1. Luento 2 Ke Timo Männikkö Algoritmit 1 Luento 2 Ke 11.1.2017 Timo Männikkö Luento 2 Algoritmin esitys Algoritmien analysointi Suoritusaika Asymptoottinen kertaluokka Peruskertaluokkia NP-täydelliset ongelmat Algoritmit 1 Kevät

Lisätiedot

Pinot, jonot, yleisemmin sekvenssit: kokoelma peräkkäisiä alkioita (lineaarinen järjestys) Yleisempi tilanne: alkioiden hierarkia

Pinot, jonot, yleisemmin sekvenssit: kokoelma peräkkäisiä alkioita (lineaarinen järjestys) Yleisempi tilanne: alkioiden hierarkia Pinot, jonot, yleisemmin sekvenssit: kokoelma peräkkäisiä alkioita (lineaarinen järjestys) Yleisempi tilanne: alkioiden hierarkia Kukin alkio (viite) talletettuna solmuun (node) vastaa paikan käsitettä

Lisätiedot

A274101 TIETORAKENTEET JA ALGORITMIT

A274101 TIETORAKENTEET JA ALGORITMIT A274101 TIETORAKENTEET JA ALGORITMIT PERUSTIETORAKENTEET LISTA, PINO, JONO, PAKKA ABSTRAKTI TIETOTYYPPI Tietotyyppi on abstrakti, kun se on määritelty (esim. matemaattisesti) ottamatta kantaa varsinaiseen

Lisätiedot

useampi ns. avain (tai vertailuavain) esim. opiskelijaa kuvaavassa alkiossa vaikkapa opintopistemäärä tai opiskelijanumero

useampi ns. avain (tai vertailuavain) esim. opiskelijaa kuvaavassa alkiossa vaikkapa opintopistemäärä tai opiskelijanumero Alkioiden avaimet Usein tietoalkioille on mielekästä määrittää yksi tai useampi ns. avain (tai vertailuavain) esim. opiskelijaa kuvaavassa alkiossa vaikkapa opintopistemäärä tai opiskelijanumero 80 op

Lisätiedot

Algoritmit 2. Luento 1 Ti Timo Männikkö

Algoritmit 2. Luento 1 Ti Timo Männikkö Algoritmit 2 Luento 1 Ti 14.3.2017 Timo Männikkö Luento 1 Algoritmi Algoritmin valinta Algoritmin analysointi Algoritmin suoritusaika Peruskertaluokkia Kertaluokkamerkinnät Kertaluokkien ominaisuuksia

Lisätiedot

Algoritmit 1. Luento 3 Ti Timo Männikkö

Algoritmit 1. Luento 3 Ti Timo Männikkö Algoritmit 1 Luento 3 Ti 17.1.2017 Timo Männikkö Luento 3 Algoritmin analysointi Rekursio Lomituslajittelu Aikavaativuus Tietorakenteet Pino Algoritmit 1 Kevät 2017 Luento 3 Ti 17.1.2017 2/27 Algoritmien

Lisätiedot

Tietorakenteet, laskuharjoitus 3, ratkaisuja

Tietorakenteet, laskuharjoitus 3, ratkaisuja Tietorakenteet, laskuharjoitus 3, ratkaisuja 1. (a) Toistolauseen runko-osassa tehdään yksi laskuoperaatio, runko on siis vakioaikainen. Jos syöte on n, suoritetaan runko n kertaa, eli aikavaativuus kokonaisuudessaan

Lisätiedot

Sisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto

Sisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto Sisällys 18. bstraktit tietotyypit Johdanto abstrakteihin tietotyyppeihin. Pino ja jono. Linkitetty lista. Pino linkitetyllä listalla toteutettuna. 18.1 18.2 Johdanto Javan omat tietotyypit ovat jo tuttuja:

Lisätiedot

18. Abstraktit tietotyypit 18.1

18. Abstraktit tietotyypit 18.1 18. Abstraktit tietotyypit 18.1 Sisällys Johdanto abstrakteihin tietotyyppeihin. Pino ja jono. Linkitetty lista. Pino linkitetyllä listalla toteutettuna. 18.2 Johdanto Javan omat tietotyypit ovat jo tuttuja:

Lisätiedot

Algoritmit 2. Luento 2 To Timo Männikkö

Algoritmit 2. Luento 2 To Timo Männikkö Algoritmit 2 Luento 2 To 14.3.2019 Timo Männikkö Luento 2 Tietorakenteet Lineaarinen lista, binääripuu Prioriteettijono Kekorakenne Keko-operaatiot Keon toteutus taulukolla Algoritmit 2 Kevät 2019 Luento

Lisätiedot

Algoritmit 1. Luento 4 Ke Timo Männikkö

Algoritmit 1. Luento 4 Ke Timo Männikkö Algoritmit 1 Luento 4 Ke 18.1.2017 Timo Männikkö Luento 4 Tietorakenteet Pino Pinon toteutus Jono Jonon toteutus Lista Listaoperaatiot Algoritmit 1 Kevät 2017 Luento 4 Ke 18.1.2017 2/29 Pino Pino, stack,

Lisätiedot

Algoritmit 2. Luento 2 Ke Timo Männikkö

Algoritmit 2. Luento 2 Ke Timo Männikkö Algoritmit 2 Luento 2 Ke 15.3.2017 Timo Männikkö Luento 2 Tietorakenteet Lineaarinen lista, binääripuu Prioriteettijono Kekorakenne Keko-operaatiot Keon toteutus taulukolla Algoritmit 2 Kevät 2017 Luento

Lisätiedot

A274101 TIETORAKENTEET JA ALGORITMIT

A274101 TIETORAKENTEET JA ALGORITMIT A274101 TIETORAKENTEET JA ALGORITMIT ALGORITMIEN ANALYYSISTÄ 1.ratkaisu Laskentaaika hakkeri - optimoitu ALGORITMIANALYYSIÄ hyvä algoritmi hakkeri -optimoitu hyvä algoritmi Tehtävän koko Kuva mukailtu

Lisätiedot

3. Pinot, jonot ja linkitetyt listat

3. Pinot, jonot ja linkitetyt listat 3 Pinot, jonot ja linkitetyt listat Pinot ja jonot ovat yksinkertaisimpia tietorakenteita, mutta myös tärkeimpiä Niitä käytetään lukuisissa sovelluksissa ja monimutkaisten tietorakenteiden osina Yksinkertaisuutensa

Lisätiedot

lähtokohta: kahden O(h) korkuisen keon yhdistäminen uudella juurella vie O(h) operaatiota vrt. RemoveMinElem() keossa

lähtokohta: kahden O(h) korkuisen keon yhdistäminen uudella juurella vie O(h) operaatiota vrt. RemoveMinElem() keossa Kekolajittelu Prioriteettijonolla toteutettu keko InsertItem ja RemoveMinElem: O(log(n)) Lajittelu prioriteettijonolla: PriorityQueueSort(lajiteltava sekvenssi S) alusta prioriteettijono P while S.IsEmpty()

Lisätiedot

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari 1 1. JOHDANTO 1.1 Määritelmiä 1.2 Tietorakenteen ja algoritmin valinta 1.3 Algoritmit ja tiedon määrä 1.4 Tietorakenteet ja toiminnot 1.5 Esimerkki:

Lisätiedot

Tietorakenteet ja algoritmit - syksy 2015 1

Tietorakenteet ja algoritmit - syksy 2015 1 Tietorakenteet ja algoritmit - syksy 2015 1 Tietorakenteet ja algoritmit - syksy 2015 2 Tietorakenteet ja algoritmit Johdanto Ari Korhonen Tietorakenteet ja algoritmit - syksy 2015 1. JOHDANTO 1.1 Määritelmiä

Lisätiedot

811312A Tietorakenteet ja algoritmit II Perustietorakenteet

811312A Tietorakenteet ja algoritmit II Perustietorakenteet 811312A Tietorakenteet ja algoritmit 2017-2018 II Perustietorakenteet Sisältö 1. Johdanto 2. Pino 3. Jono 4. Lista 811312A TRA, Perustietorakenteet 2 II.1. Johdanto Tietorakenne on tapa, jolla algoritmi

Lisätiedot

Algoritmit 2. Luento 7 Ti Timo Männikkö

Algoritmit 2. Luento 7 Ti Timo Männikkö Algoritmit 2 Luento 7 Ti 4.4.2017 Timo Männikkö Luento 7 Joukot Joukko-operaatioita Joukkojen esitystapoja Alkiovieraat osajoukot Toteutus puurakenteena Algoritmit 2 Kevät 2017 Luento 7 Ti 4.4.2017 2/26

Lisätiedot

1.4 Funktioiden kertaluokat

1.4 Funktioiden kertaluokat 1.4 Funktioiden kertaluokat f on kertaluokkaa O(g), merk. f = O(g), jos joillain c > 0, m N pätee f(n) cg(n) aina kun n m f on samaa kertaluokkaa kuin g, merk. f = Θ(g), jos joillain a, b > 0, m N pätee

Lisätiedot

Algoritmit 1. Luento 1 Ti Timo Männikkö

Algoritmit 1. Luento 1 Ti Timo Männikkö Algoritmit 1 Luento 1 Ti 10.1.2017 Timo Männikkö Luento 1 Algoritmi Algoritmin toteutus Ongelman ratkaiseminen Algoritmin tehokkuus Algoritmin suoritusaika Algoritmin analysointi Algoritmit 1 Kevät 2017

Lisätiedot

1.1 Pino (stack) Koodiluonnos. Graafinen esitys ...

1.1 Pino (stack) Koodiluonnos. Graafinen esitys ... 1. Tietorakenteet Tietorakenteet organisoivat samankaltaisten olioiden muodostaman tietojoukon. Tämä järjestys voidaan saada aikaan monin tavoin, esim. Keräämällä oliot taulukkoon. Liittämällä olioihin

Lisätiedot

Algoritmit 1. Luento 5 Ti Timo Männikkö

Algoritmit 1. Luento 5 Ti Timo Männikkö Algoritmit 1 Luento 5 Ti 24.1.2017 Timo Männikkö Luento 5 Järjestetty lista Järjestetyn listan operaatiot Listan toteutus taulukolla Binäärihaku Binäärihaun vaativuus Algoritmit 1 Kevät 2017 Luento 5 Ti

Lisätiedot

58131 Tietorakenteet ja algoritmit (syksy 2015)

58131 Tietorakenteet ja algoritmit (syksy 2015) 58131 Tietorakenteet ja algoritmit (syksy 2015) Harjoitus 2 (14. 18.9.2015) Huom. Sinun on tehtävä vähintään kaksi tehtävää, jotta voit jatkaa kurssilla. 1. Erään algoritmin suoritus vie 1 ms, kun syötteen

Lisätiedot

4. Sekvenssit Astetta soveltavat sekvenssit

4. Sekvenssit Astetta soveltavat sekvenssit 4. Sekvenssit Sekvenssit edustavat lineaarisesti järjestettyä alkioiden kokoelmaa, jolle on määritelty metodit alkion saantia, lisäystä ja poistoa varten. Täten sen jokaisella alkiolla on edeltäjä, paitsi

Lisätiedot

Algoritmit 1. Demot Timo Männikkö

Algoritmit 1. Demot Timo Männikkö Algoritmit 1 Demot 1 25.-26.1.2017 Timo Männikkö Tehtävä 1 (a) Algoritmi, joka laskee kahden kokonaisluvun välisen jakojäännöksen käyttämättä lainkaan jakolaskuja Jaettava m, jakaja n Vähennetään luku

Lisätiedot

Algoritmit 2. Luento 14 Ke Timo Männikkö

Algoritmit 2. Luento 14 Ke Timo Männikkö Algoritmit 2 Luento 14 Ke 3.5.2017 Timo Männikkö Luento 14 Ositus ja rekursio Rekursion toteutus Kertaus ja tenttivinkit Algoritmit 2 Kevät 2017 Luento 14 Ke 3.5.2017 2/30 Ositus Tehtävän esiintymä ositetaan

Lisätiedot

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012 ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012 1.1. (a) Jaettava m, jakaja n. Vähennetään luku n luvusta m niin kauan kuin m pysyy ei-negatiivisena. Jos jäljelle jää nolla, jaettava oli tasan jaollinen. int m,

Lisätiedot

Diskreetin matematiikan perusteet Laskuharjoitus 2 / vko 9

Diskreetin matematiikan perusteet Laskuharjoitus 2 / vko 9 Diskreetin matematiikan perusteet Laskuharjoitus 2 / vko 9 Tuntitehtävät 9-10 lasketaan alkuviikon harjoituksissa ja tuntitehtävät 13-14 loppuviikon harjoituksissa. Kotitehtävät 11-12 tarkastetaan loppuviikon

Lisätiedot

4 Tehokkuus ja algoritmien suunnittelu

4 Tehokkuus ja algoritmien suunnittelu TIE-20100 Tietorakenteet ja algoritmit 52 4 Tehokkuus ja algoritmien suunnittelu Tässä luvussa pohditaan tehokkuuden käsitettä ja esitellään kurssilla käytetty kertaluokkanotaatio, jolla kuvataan algoritmin

Lisätiedot

Nopea kertolasku, Karatsuban algoritmi

Nopea kertolasku, Karatsuban algoritmi Nopea kertolasku, Karatsuban algoritmi Mikko Männikkö 16.8.2004 Lähde: ((Gathen and Gerhard 1999) luku II.8) Esityksen kulku Algoritmien analysointia (1), (2), (3), (4) Klassinen kertolasku Parempi tapa

Lisätiedot

Tutkimusmenetelmät-kurssi, s-2004

Tutkimusmenetelmät-kurssi, s-2004 Algoritmitutkimuksen menetelmistä Tutkimusmenetelmät-kurssi, s-2004 Pekka Kilpeläinen Kuopion yliopisto Tietojenkäsittelytieteen laitos Algoritmitutkimuksen menetelmistä p.1/20 Sisällys Tänään Tietojenkäsittelytiede

Lisätiedot

3. Pinot, jonot ja linkitetyt listat

3. Pinot, jonot ja linkitetyt listat 3. Pinot, jonot ja linkitetyt listat Pinot ja jonot ovat yksinkertaisimpia tietorakenteita, mutta myös tärkeimpiä. Niitä käytetään lukuisissa sovelluksissa ja monimutkaisten tietorakenteiden osina. Yksinkertaisuutensa

Lisätiedot

TIETORAKENTEET JA ALGORITMIT

TIETORAKENTEET JA ALGORITMIT TIETORAKENTEET JA ALGORITMIT Timo Harju 1999-2004 1 typedef link List; /* Vaihtoehtoisia nimiä */ typedef link Stack; /* nodepointterille */ typedef link Queue typedef struct node Node; /* itse nodelle

Lisätiedot

Algoritmit 1. Demot Timo Männikkö

Algoritmit 1. Demot Timo Männikkö Algoritmit 1 Demot 2 1.-2.2.2017 Timo Männikkö Tehtävä 1 (a) Ei-rekursiivinen algoritmi: laskesumma(t, n) sum = t[0]; for (i = 1; i < n; i++) sum = sum + t[i]; return sum; Silmukka suoritetaan n 1 kertaa

Lisätiedot

58131 Tietorakenteet ja algoritmit (kevät 2014) Uusinta- ja erilliskoe, , vastauksia

58131 Tietorakenteet ja algoritmit (kevät 2014) Uusinta- ja erilliskoe, , vastauksia 58131 Tietorakenteet ja algoritmit (kevät 2014) Uusinta- ja erilliskoe, 10..2014, vastauksia 1. [9 pistettä] (a) Todistetaan 2n 2 + n + 5 = O(n 2 ): Kun n 1 on 2n 2 + n + 5 2n 2 + n 2 +5n 2 = 8n 2. Eli

Lisätiedot

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta 811312A Tietorakenteet ja algoritmit 2017-2018 Kertausta kurssin alkuosasta II Perustietorakenteet Pino, jono ja listat tunnettava Osattava soveltaa rakenteita algoritmeissa Osattava päätellä operaatioiden

Lisätiedot

Algoritmit 1. Luento 14 Ke 25.2.2015. Timo Männikkö

Algoritmit 1. Luento 14 Ke 25.2.2015. Timo Männikkö Algoritmit 1 Luento 14 Ke 25.2.2015 Timo Männikkö Luento 14 Heuristiset menetelmät Heuristiikkoja kapsäkkiongelmalle Kauppamatkustajan ongelma Lähimmän naapurin menetelmä Kertaus ja tenttivinkit Algoritmit

Lisätiedot

Algoritmit 1. Luento 10 Ke Timo Männikkö

Algoritmit 1. Luento 10 Ke Timo Männikkö Algoritmit 1 Luento 10 Ke 14.2.2018 Timo Männikkö Luento 10 Algoritminen ongelmanratkaisu Suunnittelumenetelmät Raaka voima Järjestäminen eli lajittelu Kuplalajittelu Lisäyslajittelu Valintalajittelu Permutaatiot

Lisätiedot

Algoritmit 1. Luento 6 Ke Timo Männikkö

Algoritmit 1. Luento 6 Ke Timo Männikkö Algoritmit 1 Luento 6 Ke 25.1.2017 Timo Männikkö Luento 6 Järjestetty lista Listan toteutus dynaamisesti Linkitetyn listan operaatiot Vaihtoehtoisia listarakenteita Puurakenteet Binääripuu Järjestetty

Lisätiedot

Tarkennamme geneeristä painamiskorotusalgoritmia

Tarkennamme geneeristä painamiskorotusalgoritmia Korotus-eteen-algoritmi (relabel-to-front) Tarkennamme geneeristä painamiskorotusalgoritmia kiinnittämällä tarkasti, missä järjestyksessä Push- ja Raise-operaatioita suoritetaan. Algoritmin peruskomponentiksi

Lisätiedot

Algoritmit 1. Demot Timo Männikkö

Algoritmit 1. Demot Timo Männikkö Algoritmit 1 Demot 1 31.1.-1.2.2018 Timo Männikkö Tehtävä 1 (a) Algoritmi, joka tutkii onko kokonaisluku tasan jaollinen jollain toisella kokonaisluvulla siten, että ei käytetä lainkaan jakolaskuja Jaettava

Lisätiedot

58131 Tietorakenteet ja algoritmit (kevät 2016) Ensimmäinen välikoe, malliratkaisut

58131 Tietorakenteet ja algoritmit (kevät 2016) Ensimmäinen välikoe, malliratkaisut 58131 Tietorakenteet ja algoritmit (kevät 2016) Ensimmäinen välikoe, malliratkaisut 1. Palautetaan vielä mieleen O-notaation määritelmä. Olkoon f ja g funktioita luonnollisilta luvuilta positiivisille

Lisätiedot

3. Pinot, jonot ja linkitetyt listat

3. Pinot, jonot ja linkitetyt listat 3. Pinot, jonot ja linkitetyt listat Pinot ja jonot ovat yksinkertaisimpia tietorakenteita, mutta myös tärkeimpiä. Niitä käytetään lukuisissa sovelluksissa ja monimutkaisten tietorakenteiden osina. Yksinkertaisuutensa

Lisätiedot

5 Kertaluokkamerkinnät

5 Kertaluokkamerkinnät TIE-20100 Tietorakenteet ja algoritmit 75 5 Kertaluokkamerkinnät Tässä luvussa käsitellään asymptoottisessa analyysissa käytettyjä matemaattisia merkintätapoja Määritellään tarkemmin Θ, sekä kaksi muuta

Lisätiedot

A274101 TIETORAKENTEET JA ALGORITMIT

A274101 TIETORAKENTEET JA ALGORITMIT A274101 TIETORAKENTEET JA ALGORITMIT PUURAKENTEET, BINÄÄRIPUU, TASAPAINOTETUT PUUT MIKÄ ON PUUTIETORAKENNE? Esim. Viereinen kuva esittää erästä puuta. Tietojenkäsittelytieteessä puut kasvavat alaspäin.

Lisätiedot

v 1 v 2 v 3 v 4 d lapsisolmua d 1 avainta lapsen v i alipuun avaimet k i 1 ja k i k 0 =, k d = Sisäsolmuissa vähint. yksi avain vähint.

v 1 v 2 v 3 v 4 d lapsisolmua d 1 avainta lapsen v i alipuun avaimet k i 1 ja k i k 0 =, k d = Sisäsolmuissa vähint. yksi avain vähint. Yleiset hakupuut 4 Monitiehakupuu: Binäärihakupuu 0 1 3 5 6 7 8 v k 1 k k 3 v v 3 v 4 k 1 k 3 k 1 k k k 3 d lapsisolmua d 1 avainta Yleinen hakupuu? Tietorakenteet, syksy 007 1 Esimerkki monitiehakupuusta

Lisätiedot

Algoritmit 1. Demot Timo Männikkö

Algoritmit 1. Demot Timo Männikkö Algoritmit 1 Demot 2 7.-8.2.2018 Timo Männikkö Tehtävä 1 (a) Ei-rekursiivinen algoritmi: etsipienin(t, n) { pnn = t[0]; for (i = 1; i < n; i++) { pnn = min(pnn, t[i]); return pnn; Silmukka suoritetaan

Lisätiedot

Algoritmi on periaatteellisella tasolla seuraava:

Algoritmi on periaatteellisella tasolla seuraava: Algoritmi on periaatteellisella tasolla seuraava: Dijkstra(V, E, l, v 0 ): S := { v 0 } D[v 0 ] := 0 for v V S do D[v] := l(v 0, v) end for while S V do valitse v V S jolle D[v] on minimaalinen S := S

Lisätiedot

Tieto- ja tallennusrakenteet

Tieto- ja tallennusrakenteet Tieto- ja tallennusrakenteet Sisältö Tyyppi, abstrakti tietotyyppi, abstraktin tietotyypin toteutus Tallennusrakenteet Taulukko Linkitetty rakenne Abstraktit tietotyypit Lista (Puu) (Viimeisellä viikolla)

Lisätiedot

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit Tietorakenteet ja algoritmit Merkintöjen tulkintoja *++Pstack->top = item *Pstack->top++ = item (*Pstack->top)++ *(Pstack++)->top = item *(++Pstack)->top = item Lisää pinon toteutuksia Dynaaminen taulukko

Lisätiedot

1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa:

1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa: Tietorakenteet, laskuharjoitus 10, ratkaisuja 1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa: SamaLuku(T ) 2 for i = 1 to T.length 1 3 if T [i] == T [i + 1] 4 return True 5 return

Lisätiedot

Pikalajittelu: valitaan ns. pivot-alkio esim. pivot = oikeanpuoleisin

Pikalajittelu: valitaan ns. pivot-alkio esim. pivot = oikeanpuoleisin Pikalajittelu: valitaan ns. pivot-alkio esim. pivot = oikeanpuoleisin jaetaan muut alkiot kahteen ryhmään: L: alkiot, jotka eivät suurempia kuin pivot G : alkiot, jotka suurempia kuin pivot 6 1 4 3 7 2

Lisätiedot

3. Laskennan vaativuusteoriaa

3. Laskennan vaativuusteoriaa 3. Laskennan vaativuusteoriaa tähän asti puhuttu siitä, mitä on mahdollista laskea äärellisessä ajassa siirrytään tarkastelemaan laskemista kohtuullisessa ajassa vaihtoehtoisesti voidaan laskenta-ajan

Lisätiedot

Tehtävän V.1 ratkaisuehdotus Tietorakenteet, syksy 2003

Tehtävän V.1 ratkaisuehdotus Tietorakenteet, syksy 2003 Tehtävän V.1 ratkaisuehdotus Tietorakenteet, syksy 2003 Matti Nykänen 5. joulukuuta 2003 1 Satelliitit Muunnetaan luennoilla luonnosteltua toteutusta seuraavaksi: Korvataan puusolmun p kentät p. key ja

Lisätiedot

4. Joukkojen käsittely

4. Joukkojen käsittely 4 Joukkojen käsittely Tämän luvun jälkeen opiskelija osaa soveltaa lomittuvien kasojen operaatioita tuntee lomittuvien kasojen toteutuksen binomi- ja Fibonacci-kasoina sekä näiden totetutusten analyysiperiaatteet

Lisätiedot

Abstraktit tietotyypit. TIEA341 Funktio ohjelmointi 1 Syksy 2005

Abstraktit tietotyypit. TIEA341 Funktio ohjelmointi 1 Syksy 2005 Abstraktit tietotyypit TIEA341 Funktio ohjelmointi 1 Syksy 2005 Data abstraktio Abstraktio on ohjelmoinnin tärkein väline Data abstraktio abstrahoi dataa Abstrakti tietotyyppi Koostuu kolmesta asiasta:

Lisätiedot

811312A Tietorakenteet ja algoritmit , Harjoitus 2 ratkaisu

811312A Tietorakenteet ja algoritmit , Harjoitus 2 ratkaisu 811312A Tietorakenteet ja algoritmit 2017-2018, Harjoitus 2 ratkaisu Harjoituksen aiheena on algoritmien oikeellisuus. Tehtävä 2.1 Kahvipurkkiongelma. Kahvipurkissa P on valkoisia ja mustia kahvipapuja,

Lisätiedot

2. Perustietorakenteet

2. Perustietorakenteet 2. Perustietorakenteet Tässä osassa käsitellään erilaisia perustietorakenteita, joita algoritmit käyttävät toimintansa perustana. Aluksi käydään läpi tietorakenteen abstrakti määritelmä. Tämän jälkeen

Lisätiedot

AVL-puut. eräs tapa tasapainottaa binäärihakupuu siten, että korkeus on O(log n) kun puussa on n avainta

AVL-puut. eräs tapa tasapainottaa binäärihakupuu siten, että korkeus on O(log n) kun puussa on n avainta AVL-puut eräs tapa tasapainottaa binäärihakupuu siten, että korkeus on O(log n) kun puussa on n avainta pohjana jo esitetyt binäärihakupuiden operaatiot tasapainotus vie pahimmillaan lisäajan lisäys- ja

Lisätiedot

Sisältö. 22. Taulukot. Yleistä. Yleistä

Sisältö. 22. Taulukot. Yleistä. Yleistä Sisältö 22. Taulukot Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko metodin parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 22.1 22.2 Yleistä

Lisätiedot

Algoritmit 2. Luento 4 To Timo Männikkö

Algoritmit 2. Luento 4 To Timo Männikkö Algoritmit 2 Luento 4 To 21.3.2019 Timo Männikkö Luento 4 Hajautus Yhteentörmäysten käsittely Avoin osoitteenmuodostus Hajautusfunktiot Puurakenteet Solmujen läpikäynti Algoritmit 2 Kevät 2019 Luento 4

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 5: Sijoituslause, SICP-oliot, tietorakenteen muuttaminen (mm. SICP 33.1.3, 3.33.3.2) Riku Saikkonen 6. 11. 2012 Sisältö 1 Muuttujan arvon muuttaminen:

Lisätiedot

Algoritmit 2. Luento 4 Ke Timo Männikkö

Algoritmit 2. Luento 4 Ke Timo Männikkö Algoritmit 2 Luento 4 Ke 22.3.2017 Timo Männikkö Luento 4 Hajautus Yhteentörmäysten käsittely Avoin osoitteenmuodostus Hajautusfunktiot Puurakenteet Solmujen läpikäynti Algoritmit 2 Kevät 2017 Luento 4

Lisätiedot

Algoritmit 1. Luento 8 Ke Timo Männikkö

Algoritmit 1. Luento 8 Ke Timo Männikkö Algoritmit 1 Luento 8 Ke 1.2.2017 Timo Männikkö Luento 8 Järjestetty binääripuu Solmujen läpikäynti Binääripuun korkeus Binääripuun tasapainottaminen Graafit ja verkot Verkon lyhimmät polut Fordin ja Fulkersonin

Lisätiedot

Algoritmianalyysin perusteet

Algoritmianalyysin perusteet Tietorakenteet ja algoritmit Algoritmianalyysin perusteet Ari Korhonen 1 5. ALGORITMIANALYYSI 5.1 Johdanto 5.2 Tavoitteet 5.3 Algoritmien luokittelu 5.4 Kertaluokkamerkinnät (Big Oh Notation) 5.5 Kertaluokkamerkinnöillä

Lisätiedot

811312A Tietorakenteet ja algoritmit, , Harjoitus 3, Ratkaisu

811312A Tietorakenteet ja algoritmit, , Harjoitus 3, Ratkaisu 811312A Tietorakenteet ja algoritmit, 2018-2019, Harjoitus 3, Ratkaisu Harjoituksessa käsitellään algoritmien aikakompleksisuutta. Tehtävä 3.1 Kuvitteelliset algoritmit A ja B lajittelevat syötteenään

Lisätiedot

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta 811312A Tietorakenteet ja algoritmit 2016-2017 Kertausta kurssin alkuosasta II Algoritmien analyysi: oikeellisuus Algoritmin täydellinen oikeellisuus = Algoritmi päättyy ja tuottaa määritellyn tuloksen

Lisätiedot

Tietorakenteet, laskuharjoitus 2,

Tietorakenteet, laskuharjoitus 2, Tietorakenteet, laskuharjoitus, 6.-9.1 Muista TRAKLA-tehtävien deadline 31.1. 1. Tarkastellaan ensin tehtävää yleisellä tasolla. Jos funktion T vaativuusluokka on O(f), niin funktio T on muotoa T (n) =

Lisätiedot

Algoritmit 2. Demot Timo Männikkö

Algoritmit 2. Demot Timo Männikkö Algoritmit 2 Demot 1 27.-28.3.2019 Timo Männikkö Tehtävä 1 (a) 4n 2 + n + 4 = O(n 2 ) c, n 0 > 0 : 0 4n 2 + n + 4 cn 2 n n 0 Vasen aina tosi Oikea tosi, jos (c 4)n 2 n 4 0, joten oltava c > 4 Kokeillaan

Lisätiedot

4. Algoritmien tehokkuus

4. Algoritmien tehokkuus 4. Algoritmien tehokkuus (Harel luku 6) vastaa jo minulle! [Psalmi 69:18] Kuinka paljon suoritusaikaa tai -tilaa algoritmin suoritus vaatii? Keskitymme lähinnä aikavaativuuden tarkasteluun. Myös algoritmien

Lisätiedot

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen) TKT0001 Tietorakenteet ja algoritmit Erilliskoe 5.1.01, malliratkaisut (Jyrki Kivinen) 1. [1 pistettä] (a) Esitä algoritmi, joka poistaa kahteen suuntaan linkitetystä järjestämättömästä tunnussolmullisesta

Lisätiedot

Imperatiivisen ohjelmoinnin peruskäsitteet. Meidän käyttämän pseudokielen lauseiden syntaksi

Imperatiivisen ohjelmoinnin peruskäsitteet. Meidän käyttämän pseudokielen lauseiden syntaksi Imperatiivisen ohjelmoinnin peruskäsitteet muuttuja muuttujissa oleva data voi olla yksinkertaista eli primitiivistä (esim. luvut ja merkit) tai rakenteista jolloin puhutaan tietorakenteista. puhuttaessa

Lisätiedot

Listarakenne (ArrayList-luokka)

Listarakenne (ArrayList-luokka) Listarakenne (ArrayList-luokka) Mikä on lista? Listan määrittely ArrayList-luokan metodeita Listan läpikäynti Listan läpikäynti indeksin avulla Listan läpikäynti iteraattorin avulla Listaan lisääminen

Lisätiedot

Ohjelmointi 2 / 2010 Välikoe / 26.3

Ohjelmointi 2 / 2010 Välikoe / 26.3 Ohjelmointi 2 / 2010 Välikoe / 26.3 Välikoe / 26.3 Vastaa neljään (4) tehtävään ja halutessa bonustehtäviin B1 ja/tai B2, (tuovat lisäpisteitä). Bonustehtävät saa tehdä vaikkei olisi tehnyt siihen tehtävään

Lisätiedot

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo 15.2.2006

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo 15.2.2006 TURUN YLIOPISTO DEMO III Informaatioteknologian laitos tehtävät Olio-ohjelmoinnin perusteet / Salo 15.2.2006 1. Tässä tehtävässä tarkastellaan erääntyviä laskuja. Lasku muodostaa oman luokkansa. Laskussa

Lisätiedot

Johdatus diskreettiin matematiikkaan Harjoitus 5, Ratkaise rekursioyhtälö

Johdatus diskreettiin matematiikkaan Harjoitus 5, Ratkaise rekursioyhtälö Johdatus diskreettiin matematiikkaan Harjoitus 5, 14.10.2015 1. Ratkaise rekursioyhtälö x n+4 2x n+2 + x n 16( 1) n, n N, alkuarvoilla x 1 2, x 2 14, x 3 18 ja x 4 42. Ratkaisu. Vastaavan homogeenisen

Lisätiedot

Rakenteiset tietotyypit Moniulotteiset taulukot

Rakenteiset tietotyypit Moniulotteiset taulukot C! Rakenteiset tietotyypit Moniulotteiset taulukot 22.2.2018 Agenda Rakenteiset tietotyypit Vilkaisu 6. kierroksen tehtäviin Moniulotteiset taulukot Esimerkki Seuraava luento to 8.3. Ilmoittautuminen ohjelmointikokeeseen

Lisätiedot

1 Erilaisia tapoja järjestää

1 Erilaisia tapoja järjestää TIE-20100 Tietorakenteet ja algoritmit 1 1 Erilaisia tapoja järjestää Käsitellään seuraavaksi järjestämisalgoritmeja, jotka perustuvat muihin kuin vertailuun alkioiden oikean järjestyksen saamiseksi. Lisäksi

Lisätiedot

private TreeMap<String, Opiskelija> nimella; private TreeMap<String, Opiskelija> numerolla;

private TreeMap<String, Opiskelija> nimella; private TreeMap<String, Opiskelija> numerolla; Tietorakenteet, laskuharjoitus 7, ratkaisuja 1. Opiskelijarekisteri-luokka saadaan toteutetuksi käyttämällä kahta tasapainotettua binäärihakupuuta. Toisen binäärihakupuun avaimina pidetään opiskelijoiden

Lisätiedot

Luku 8. Aluekyselyt. 8.1 Summataulukko

Luku 8. Aluekyselyt. 8.1 Summataulukko Luku 8 Aluekyselyt Aluekysely on tiettyä taulukon väliä koskeva kysely. Tyypillisiä aluekyselyitä ovat, mikä on taulukon välin lukujen summa tai pienin luku välillä. Esimerkiksi seuraavassa taulukossa

Lisätiedot

Johnson, A Theoretician's Guide to the Experimental Analysis of Algorithms.

Johnson, A Theoretician's Guide to the Experimental Analysis of Algorithms. Kokeellinen algoritmiikka (3 ov) syventäviä opintoja edeltävät opinnot: ainakin Tietorakenteet hyödyllisiä opintoja: ASA, Algoritmiohjelmointi suoritus harjoitustyöllä (ei tenttiä) Kirjallisuutta: Johnson,

Lisätiedot

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö Algoritmit 2 Luento 3 Ti 20.3.2018 Timo Männikkö Luento 3 Järjestäminen eli lajittelu Kekorakenne Kekolajittelu Hajautus Yhteentörmäysten käsittely Ketjutus Algoritmit 2 Kevät 2018 Luento 3 Ti 20.3.2018

Lisätiedot

2. Algoritmien analysointimenetelmistä

2. Algoritmien analysointimenetelmistä Kokeelliset tutkimukset 2. Algoritmien analysointimenetelmistä Tietokoneohjelmien suoritusaika on usein tärkeä kysymys, erityisesti käsiteltäessä paljon tietoa tai prosessin ollessa monimutkainen, so.

Lisätiedot

2. Seuraavassa kuvassa on verkon solmujen topologinen järjestys: x t v q z u s y w r. Kuva 1: Tehtävän 2 solmut järjestettynä topologisesti.

2. Seuraavassa kuvassa on verkon solmujen topologinen järjestys: x t v q z u s y w r. Kuva 1: Tehtävän 2 solmut järjestettynä topologisesti. Tietorakenteet, laskuharjoitus 11, ratkaisuja 1. Leveyssuuntaisen läpikäynnin voi toteuttaa rekursiivisesti käsittelemällä jokaisella rekursiivisella kutsulla kaikki tietyllä tasolla olevat solmut. Rekursiivinen

Lisätiedot

58131 Tietorakenteet (kevät 2009) Harjoitus 9, ratkaisuja (Antti Laaksonen)

58131 Tietorakenteet (kevät 2009) Harjoitus 9, ratkaisuja (Antti Laaksonen) 58131 Tietorakenteet (kevät 2009) Harjoitus 9, ratkaisuja (Antti Laaksonen) 1. Lisäysjärjestämisessä järjestetään ensin taulukon kaksi ensimmäistä lukua, sitten kolme ensimmäistä lukua, sitten neljä ensimmäistä

Lisätiedot

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö Algoritmit 2 Luento 3 Ti 21.3.2017 Timo Männikkö Luento 3 Järjestäminen eli lajittelu Kekorakenne Kekolajittelu Hajautus Yhteentörmäysten käsittely Ketjutus Algoritmit 2 Kevät 2017 Luento 3 Ti 21.3.2017

Lisätiedot

Algoritmien suunnittelu ja analyysi (kevät 2004) 1. välikoe, ratkaisuja

Algoritmien suunnittelu ja analyysi (kevät 2004) 1. välikoe, ratkaisuja 58053-7 Algoritmien suunnittelu ja analyysi (kevät 2004) 1. välikoe, ratkaisuja Malliratkaisut ja pisteytysohje: Jyrki Kivinen Tentin arvostelu: Jouni Siren (tehtävät 1 ja 2) ja Jyrki Kivinen (tehtävät

Lisätiedot

Algoritmit 1. Luento 9 Ti Timo Männikkö

Algoritmit 1. Luento 9 Ti Timo Männikkö Algoritmit 1 Luento 9 Ti 7.2.2017 Timo Männikkö Luento 9 Graafit ja verkot Kaaritaulukko, bittimatriisi, pituusmatriisi Verkon lyhimmät polut Floydin menetelmä Lähtevien ja tulevien kaarien listat Forward

Lisätiedot

Algoritmit 2. Luento 6 To Timo Männikkö

Algoritmit 2. Luento 6 To Timo Männikkö Algoritmit 2 Luento 6 To 28.3.2019 Timo Männikkö Luento 6 B-puun operaatiot Nelipuu Trie-rakenteet Standarditrie Pakattu trie Algoritmit 2 Kevät 2019 Luento 6 To 28.3.2019 2/30 B-puu 40 60 80 130 90 100

Lisätiedot

Tietorakenteet (syksy 2013)

Tietorakenteet (syksy 2013) Tietorakenteet (syksy 2013) Harjoitus 1 (6.9.2013) Huom. Sinun on osallistuttava perjantain laskuharjoitustilaisuuteen ja tehtävä vähintään kaksi tehtävää, jotta voit jatkaa kurssilla. Näiden laskuharjoitusten

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 7. huhtikuuta 2017 Vastaa kaikkiin tehtäviin. Tee jokainen tehtävä erilliselle konseptiarkille. Kirjoittamasi luokat, funktiot ja aliohjelmat

Lisätiedot

Algoritmit 2. Luento 8 To Timo Männikkö

Algoritmit 2. Luento 8 To Timo Männikkö Algoritmit 2 Luento 8 To 4.4.2019 Timo Männikkö Luento 8 Algoritmien analysointi Algoritmien suunnittelu Rekursio Osittaminen Rekursioyhtälöt Rekursioyhtälön ratkaiseminen Master-lause Algoritmit 2 Kevät

Lisätiedot

Algoritmit 2. Luento 5 Ti Timo Männikkö

Algoritmit 2. Luento 5 Ti Timo Männikkö Algoritmit 2 Luento 5 Ti 26.3.2019 Timo Männikkö Luento 5 Puurakenteet B-puu B-puun korkeus B-puun operaatiot B-puun muunnelmia Algoritmit 2 Kevät 2019 Luento 5 Ti 26.3.2019 2/34 B-puu B-puut ovat tasapainoisia

Lisätiedot