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

Koko: px
Aloita esitys sivulta:

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

Transkriptio

1 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ä lukua jne., kunnes lopuksi koko taulukko on järjestyksessä. Taulukon luvut käydään läpi alusta loppuun, ja joka vaiheessa käsiteltävää lukua siirretään askel kerrallaan vasemmalle, kunnes se on oikeassa paikassa ja taulukon alkuosa on järjestetty. Seuraavassa esimerkissä taulukon järjestetty osuus on erotettu pystyviivalla ja tummennettu luku tarkoittaa oikeaan paikkaan siirrettyä käsiteltävää lukua (a) Kun taulukon luvut ovat nousevassa suuruusjärjestyksessä, jokainen luku on valmiiksi oikeassa paikassa eikä sitä tarvitse siirtää yhtään askelta vasemmalle. Tämän ansiosta aikaa kuluu vain Θ(n), koska riittää käydä taulukon luvut läpi ja siirtyä joka vaiheessa suoraan seuraavaan lukuun. (b) Kun taulukon luvut ovat laskevassa suuruusjärjestyksessä, toista lukua täytyy siirtää yksi askel vasemmalle, kolmatta kaksi askelta vasemmalle, neljättä kolme askelta vasemmalle jne., kunnes viimeistä lukua täytyy siirtää n 1 askelta vasemmalle. Siirtojen kokonaismäärä saadaan laskemalla summa (n 1), joka on tunnetusti (n 1) n 2. Asiaa voi myös ajatella niin, että lukua siirretään keskimäärin noin n/2 askelta ja lukuja on n, joten siirtoja on yhteensä noin n/2 n. Molemmat tavat johtavat samaan tulokseen: järjestäminen vie aikaa Θ(n 2 ). (c) Kun kaikki taulukon luvut ovat samat, taulukko on jälleen valmiiksi järjestyksessä eikä mitään lukua tarvitse siirtää vasemmalle. Aikavaativuus on (a)-kohdan tavoin Θ(n). 2. Kekojärjestämisessä on kaksi vaihetta: ensin taulukko muutetaan keoksi, sitten luvut poistetaan siitä järjestyksessä. Taulukko on mahdollista muuttaa keoksi ajassa Θ(n), joten aikavaativuuden ratkaisee, kuinka nopeasti luvut saadaan ulos keosta. Tämä taas riippuu siitä, kuinka suuri työ joudutaan tekemään keskimäärin kekoehdon korjaamiseksi luvun poiston jälkeen. Kun keon huipulta poistetaan luku, sen tilalle siirretään luku keon pohjalta, joka kenties rikkoo kekoehdon keon huipulla. Kekojärjestämisen pahimman tapauksen aikavaativuus on O(n log n), mutta joissain erikoistilanteissa aikavaativuus saattaa olla pienempi. Seuraavaksi kuitenkin osoitetaan (hieman mutkia oikoen), että jos taulukossa ei ole samoja lukuja, aikavaativuus on aina Θ(n log n). Tämä tarkoittaa, että kekoehdon korjaaminen vie keskimäärin logaritmisen ajan, olivatpa luvut keossa missä tahansa järjestyksessä. Seurataan luennoilla esitettyä kekojärjestämisen toteutusta, jossa luvut on tallennettu maksimikekoon. Keossa olevalla luvulla on kaksi tapaa päästä keon huipulle, josta se voidaan poistaa:

2 Luku siirtyy askel kerrallaan ylöspäin keossa muiden lukujen poiston aiheuttamien kekoehdon korjausten vuoksi. Tähän kuluu keskimäärin logaritminen aika. Keon pohjalla oleva pian poistettava luku nostetaan suoraan keon huipulle toisen luvun poiston yhteydessä. Tällöin luvun ei tarvitse kulkea koko kekoa ylös askel kerrallaan. Tarkoituksena on todistaa, että merkittävä osa luvuista joutuu nousemaan keon huipulle askel kerrallaan eikä jälkimmäinen ilmiö ole liian yleinen. Kun kekoon sijoitetaan n lukua, noin n/2 lukua on keon sisäsolmuissa ja noin n/2 lukua on keon lehtisolmuissa. Tarkastellaan nyt lukuja, jotka samaan aikaan ovat keon sisäsolmuissa ja kuuluvat taulukon n/2 suurimman luvun joukkoon. Näiden lukujen ainoa tapa päästä keon huipulle on kiivetä sinne yksi askel kerrallaan, koska luvut pitää poistaa keosta n/2 ensimmäisen luvun joukossa, mutta n/2 ensimmäisen poiston aikana vain alkuaan lehtisolmuissa olevia lukuja nostetaan oikotietä ylös. Jos melkein kaikki taulukon n/2 suurimmasta luvusta voisivat olla keon lehtisolmuissa, ne saattaisivat päästä liian nopeasti keon huipulle. Kuitenkin ainakin noin kolmannes taulukon n/2 suurimmasta luvusta on väistämättä keon sisäsolmuissa. Tämä johtuu siitä, että yhtä sisäsolmussa olevaa suurta lukua kohden voi olla korkeintaan kaksi lehtisolmussa olevaa suurta lukua, koska kekoehdon vuoksi lehtisolmussa olevien lukujen täytyy olla vanhempaansa pienempiä. Seuraavassa esimerkissä taulukossa on luvut 1, 2, 3,..., 12, joten keosta täytyy poistaa ensin taulukon suurimmat luvut järjestyksessä 12, 11, 10, 9, 8 ja 7. Näistä luvuista viisi eli yli kaksi kolmannesta on yritetty sijoittaa keon lehtisolmuihin, mutta nyt kelvolliset vanhemmat loppuvat kesken. (Tällainen keko on muutenkin mahdoton, koska suurimman luvun 12 pitäisi olla keon huipulla.) Siis taulukon luvuista ainakin noin n/6 on samaan aikaan keon sisäsolmuissa ja kuuluu taulukon n/2 suurimman luvun joukkoon. Kaikkien näiden lukujen täytyy nousta keon huipulle yksi askel kerrallaan, jotta ne voitaisiin poistaa keosta ajallaan. Lukujen määrä on n/6 eli luokkaa Θ(n) ja niiden keskimääräinen matka keon huipulle on ainakin noin log 2 (n/6) eli luokkaa Θ(log n). Pelkästään näiden lukujen poistaminen keosta vie siis aikaa Θ(n log n), joten vaikka muut luvut onnistuttaisiin poistamaan kuinka nopeasti tahansa, aikavaativuus ei voisi muuttua enää paremmaksi. Tässä päättelyssä tärkeä oletus oli, että keossa ei ole samoja lukuja. Oletuksen merkitys oli siinä, että on tietyt n/2 lukua, joiden on pakko nousta keon huipulle ensimmäisinä. (a) Kun taulukon luvut ovat nousevassa suuruusjärjestyksessä, aikaa kuluu Θ(n log n). Äsken nimittäin osoitettiin, että jos taulukossa ei ole samoja lukuja, aikaa kuluu joka tapauksessa Θ(n log n). Erityisesti tämä pätee, kun luvut sattuvat olemaan lisäksi nousevassa suuruusjärjestyksessä. (b) Kun taulukon luvut ovat laskevassa suuruusjärjestyksessä, aikaa kuluu Θ(n log n). Äsken nimittäin osoitettiin, että jos taulukossa ei ole samoja lukuja, aikaa kuluu joka tapauksessa Θ(n log n). Erityisesti tämä pätee, kun luvut sattuvat olemaan lisäksi laskevassa suuruusjärjestyksessä. (c) Kun taulukon kaikki luvut ovat samat, aikaa kuluu vain Θ(n). Tämä johtuu siitä, että kekoehtoa ei tarvitse korjata missään vaiheessa, vaan riittää, että luvut nostetaan yksi kerrallaan keon pohjalta huipulle ja siirretään suoraan ulos keosta. 2

3 3. Lomitusjärjestämisessä taulukon alkuosa ja loppuosa järjestetään ensin erikseen kutsumalla algoritmia rekursiivisesti. Jakokohta valitaan niin, että molemmissa osissa on suunnilleen yhtä monta lukua. Tämän jälkeen järjestetyistä osataulukoista muodostetaan lopullinen järjestetty taulukko, mikä on mahdollista tehokkaasti, koska osataulukot ovat valmiiksi järjestyksessä. Järjestysfunktion kutsut jakaantuvat tasoihin: ensimmäisellä tasolla n lukua sisältävä taulukko jaetaan kahteen osaan, toisella tasolla kaksi noin n/2 lukua sisältävää taulukkoa jaetaan kahteen osaan, kolmannella tasolla neljä noin n/4 lukua sisältävää taulukkoa jaetaan kahteen osaan jne. Haarautuminen päättyy, kun kussakin osataulukossa on enää yksi alkio, mikä tapahtuu noin tasolla log 2 n. Tämän jälkeen järjestetyt osataulukot täytyy vielä yhdistää taso kerrallaan, mikä vie aikaa kullakin tasolla Θ(n). Tasoja on Θ(log n) ja yhdellä tasolla kuluu aikaa Θ(n), joten kokonaisaikavaativuus on Θ(n log n). Tähän tulokseen ei vaikuta, mitä lukuja ja missä järjestyksessä taulukossa on, joten: (a) Kun taulukon luvut ovat nousevassa suuruusjärjestyksessä, aikaa kuluu Θ(n log n). (b) Kun taulukon luvut ovat laskevassa suuruusjärjestyksessä, aikaa kuluu Θ(n log n). (c) Kun kaikki taulukon luvut ovat samat, aikaa kuluu Θ(n log n). 4. Pikajärjestämisessä yksi taulukon luvuista valitaan jakoalkioksi ja taulukon lukuja siirretään niin, että taulukon alkuosassa kaikki luvut ovat korkeintaan jakoalkion suuruisia ja taulukon loppuosassa kaikki luvut ovat ainakin jakoalkion suuruisia. Tämän jälkeen taulukon alkuosa ja loppuosa järjestetään rekursiivisesti samalla menetelmällä. Jakoalkion valintaan on useita eri tapoja: luentojen mallin mukaisesti valitaan jakoalkioksi taulukon ensimmäinen luku. (a) Kun taulukon luvut ovat nousevassa suuruusjärjestyksessä, taulukko jaetaan joka vaiheessa kahteen osaan, joista toisessa on yksi luku ja toisessa kaikki muut. Tarkastellaan tilannetta, jossa taulukossa ovat luvut 1, 2, 3,..., 10. Ensimmäisessä jaossa jakoalkio on luku 1, jolloin vasemmassa osassa on luku 1 ja oikeassa osassa ovat luvut 2, 3,..., 10. Vasemman osan järjestäminen on helppoa, sillä siinä on vain yksi luku. Sen sijaan oikean osan järjestämiseksi luvut täytyy jälleen jakaa kahteen osaan. Nyt jakoalkio on luku 2, joka jää taas yksin vasempaan osaan. Pikajärjestäminen etenee vastaavasti luku kerrallaan kohti taulukon loppua. Lopuksi sekä vasemmassa että oikeassa osassa on vain yksi luku, jolloin molemmat osat voidaan järjestää suoraan eikä pikajärjestämisen tarvitse enää haarautua. Yleisemmin kun taulukossa on n lukua, järjestysfunktiota kutsutaan n kertaa niin, että osataulukossa on yksi luku, ja lisäksi kerran kaikilla muilla lukujen määrillä n, n 1, n 2,..., 2. Yksi järjestysfunktion kutsu vie lineaarisen ajan suhteessa lukujen määrään. Tämän vuoksi yhden luvun sisältävien osataulukoiden järjestäminen vie ajan Θ(n) ja muiden osataulukoiden järjestäminen vie ajan Θ(n 2 ), joten kokonaisaikavaativuus on Θ(n 2 ). (b) Kun taulukon luvut ovat laskevassa suuruusjärjestyksessä, pikajärjestäminen etenee samoin kuin edellisessä kohdassa, mutta nyt jakokohta on vuorotellen taulukon lopussa ja taulukon alussa. Tarkastellaan tilannetta, jossa taulukossa ovat luvut 10, 9, 8,..., 1. Ensimmäisessä jaossa jakoalkio on luku 10, joka siirtyy taulukon loppuun ja muodostaa yksin oikean osan

4 Seuraava jakoalkio on luku 1, joka on osataulukon pienin luku. Tämän jälkeen tilanne vastaa taulukon järjestämisen aloitusta, sillä oikeaan osaan jäävät luvut 8, 7, 6,..., 2. Pikajärjestäminen siirtää siis toistuvasti samanaikaisesti taulukon pienimmän ja suurimman luvun oikeille paikoilleen. Viimeinen jakoalkio on tässä tapauksessa luku Yleisessä tapauksessa järjestysfunktiota kutsutaan samankokoisilla osataulukoilla kuin lukujen ollessa nousevassa suuruusjärjestyksessä, joten kokonaisaikavaativuus on jälleen Θ(n 2 ). (c) Kun kaikki taulukon luvut ovat samat, pikajärjestäminen toimii ihanteellisesti: osataulukko jakautuu joka vaiheessa kahteen suunnilleen yhtä suureen osaan. Tarkastellaan tilannetta, jossa taulukossa on kymmenen kertaa luku 5. Taulukon luvut käydään läpi pareittain vasemmalta oikealle ja oikealta vasemmalle ja joka vaiheessa kaksi lukua vaihdetaan keskenään. Läpikäynti päättyy taulukon keskikohdassa, ja vasen ja oikea osa ovat yhtä suuret. Pikajärjestäminen jatkuu vastaavasti, kunnes osataulukoissa on vain yksi luku. Yleisessä tapauksessa järjestysfunktion kutsut jakaantuvat tasoihin: ensimmäisellä tasolla funktiota kutsutaan kerran ja taulukossa on n alkiota, toisella tasolla funktiota kutsutaan kahdesti ja kussakin osataulukossa on noin n/2 alkiota, kolmannella tasolla funktiota kutsutaan neljästi ja kussakin osataulukossa on noin n/4 alkiota jne. Kun osataulukot ovat puolittuneet noin log 2 n kertaa, niissä on enää yksi luku ja haarautuminen päättyy. Joka tasolla aikaa kuluu Θ(n) ja tasoja on yhteensä Θ(log n), joten kokonaisaikavaativuus on Θ(n log n). 5. Jos funktio PARTITION palauttaisi arvon r, funktio QUICKSORT kutsuisi itseään uudestaan antaen samat parametrit, joilla funktiota on kutsuttu. Jos funktio PARTITION ei sisältäisi satunnaisuutta eli palauttaisi samoilla parametreilla saman arvon, pikajärjestäminen ei päättyisi koskaan, koska funktio QUICKSORT kutsuisi itseään koko ajan samoilla parametreilla. Jos funktio PARTITION sisältäisi satunnaisuutta ja palauttaisi arvon r vain silloin tällöin, pikajärjestäminen hidastuisi, koska osa funktion QUICKSORT kutsuista ei edistäisi järjestämistä yhtään. Funktion PARTITION palautusarvo on muuttujan j sisältö funktion päättymishetkellä. Ennen silmukan aloitusta j:n arvo on r+1. Jokaisella silmukan kierroksella j:n arvo vähenee ainakin yhdellä. Uhkatilanne syntyy siitä, että silmukka suoritettaisiin vain kerran ja j:n arvo vähenisi silloin vain yhdellä. Tällöin heti silmukan ensimmäisen kierroksen jälkeen pitäisi päteä i j, jotta silmukka päättyisi. Koska j:n pitäisi pysähtyä taulukon loppuun, jotta sen arvoksi jäisi r, vastaavasti i:n pitäisi nousta taulukon loppuun, jotta ehto i j olisi voimassa. Tällöin ensinnäkin pitäisi olla A[p] < a, jotta i pääsisi edes taulukon kohtaan p + 1. Kuitenkin on valittu a = A[p], joten i ei voi edetä silmukan ensimmäisellä kierroksella kohtaa p pidemmälle. Koska p < r, on mahdotonta, että samaan aikaan pätisivät i j ja j = r. 4

5 6. Tutkitaan aluksi esimerkkiä, jossa n on 8 ja taulukot ovat seuraavat: Yhdistämällä taulukot saadaan seuraava taulukko: A B Taulukon keskimmäiset luvut ovat 8 ja 9, joten taulukon mediaani on 8,5. Aletaan sitten kehittää algoritmia mediaanin laskemiseen, kun syötteenä annetaan mitkä tahansa kaksi taulukkoa, joissa molemmissa on n lukua suuruusjärjestyksessä. Jos n on 1, molemmissa taulukoissa on yksi luku ja yhdistetyn taulukon mediaani on lukujen keskiarvo. Jos n on 2, molemmissa taulukoissa on kaksi lukua ja yhdistetyn taulukon mediaani on kahden keskimmäisen luvun keskiarvo. Kaikilla n:n arvoilla lukuja on yhteensä parillinen määrä, joten mediaani on tässä aina kahden luvun keskiarvo. Algoritmin aikavaativuuden täytyy olla O(log n), mikä viittaa siihen, että algoritmin täytyy hylätä jokaisessa askeleessa merkittävä osa jäljellä olevista mahdollisista mediaanin osista. Tuttu esimerkki tällaisesta algoritmista on binäärihaku, joka vähentää toistuvasti käsiteltävien lukujen määrän puoleen. Osoittautuu, että binäärihaun idea soveltuu myös tähän tehtävään. Tutkitaan yleistä tapausta, jossa n on parillinen. Merkitään a = A[n/2] ja b = B[n/2], eli a ja b ovat A:n ja B:n keskimmäiset luvut. Oletetaan, että a on pienempi kuin b; jos a on suurempi kuin b, päättelysuunta vain vaihtuu. Nyt mikään luku, joka on taulukossa A ennen lukua a, ei voi olla yhdistetyn taulukon mediaanin osa. Lisäksi mikään luku, joka on taulukossa B luvun b oikealla puolella olevan luvun jälkeen, ei voi olla yhdistetyn taulukon mediaanin osa. Esimerkiksi jos n on 8, seuraavassa X:llä merkityt luvut eivät voi olla mediaanin osia. A X X X a???? B??? b? X X X Jos jokin taulukossa A ennen lukua a oleva luku olisi mediaanin osa, taulukoissa täytyisi olla ainakin n 1 sitä pienempää lukua. Kuitenkin ainoat mahdolliset pienemmät luvut ovat muut luvut, jotka ovat taulukossa A ennen lukua a, ja luvut, jotka ovat taulukossa B ennen lukua b. Näitä lukuja on taulukossa A korkeintaan n/2 2 ja taulukossa B korkeintaan n/2 1, siis yhteensä vain n 3. Tämän vuoksi mikään taulukossa A ennen lukua a oleva luku ei voi olla mediaanin osa. Jos jokin taulukossa B luvun b oikealla puolella olevan luvun jälkeen oleva luku olisi mediaanin osa, taulukoissa täytyisi olla ainakin n 1 sitä suurempaa lukua. Kuitenkin ainoat mahdolliset suuremmat luvut ovat muut luvut, jotka ovat taulukossa B luvun b oikealla puolella olevan luvun jälkeen, ja luvut, jotka ovat taulukossa A luvun a jälkeen. Näitä lukuja on taulukossa B korkeintaan n/2 2 ja taulukossa A korkeintaan n/2, siis yhteensä vain n 2. Tämän vuoksi mikään taulukossa B luvun b oikealla puolella olevan luvun jälkeen oleva luku ei voi olla mediaanin osa. Tutkitaan sitten yleistä tapausta, jossa n on pariton. Merkitään a = A[(n+1)/2] ja b = B[(n+1)/2], eli a ja b ovat A:n ja B:n keskimmäiset luvut. Oletetaan samoin kuin edellä, että a on pienempi kuin b. Nyt mikään luku, joka on taulukossa A ennen lukua a, ei voi olla yhdistetyn taulukon mediaanin osa. Lisäksi mikään luku, joka on taulukossa B luvun b jälkeen, ei voi olla yhdistetyn taulukon mediaanin osa. Esimerkiksi jos n on 7, seuraavassa X:llä merkityt luvut eivät voi olla mediaanin osia. A X X X a??? B??? b X X X 5

6 Päätellään kuten edellä: Jos jokin taulukossa A ennen lukua a oleva luku olisi mediaanin osa, taulukoissa täytyisi olla ainakin n 1 sitä pienempää lukua, mutta taulukoissa voi olla vain n 2 sitä pienempää lukua. Jos jokin taulukossa B luvun b jälkeen oleva luku olisi mediaanin osa, taulukoissa täytyisi olla ainakin n 1 sitä suurempaa lukua, mutta taulukoissa voi olla vain n 2 sitä suurempaa lukua. Mistä tahansa taulukoista, joissa on molemmissa n lukua, voidaan siis poistaa noin n/2 lukua toisen alusta ja noin n/2 lukua toisen lopusta kadottamatta yhdistetyn taulukon mediaanin osia. Jäljelle jääneissä taulukoissa on edelleen yhtä monta lukua, joten niistä voi etsiä mediaania samalla menetelmällä. Kun taulukoissa on enää muutama alkio, mediaanin saa selville suoraan. Yhdistetään kaikki aiemmat havainnot seuraavaan algoritmiin: MEDIAN(A, l A, r A, B, l B, r B ) 1 if r A l A 1 2 then return (MAX(A[l A ], B[l B ]) + MIN(A[r A ], B[r B ]))/2 3 c (r A l A )/2 4 if A[l A + c] < B[l B + c] 5 then return MEDIAN(A, l A + c, r A, B, l B, r B c) 6 else return MEDIAN(A, l A, r A c, B, l B + c, r B ) Funktion parametreissa l A tarkoittaa, mistä indeksistä taulukon A käsiteltävä osa alkaa, ja r A tarkoittaa, mihin indeksiin taulukon A käsiteltävä osa päättyy. Vastaavasti l B tarkoittaa, mistä indeksistä taulukon B käsiteltävä osa alkaa, ja r B tarkoittaa, mihin indeksiin taulukon B käsiteltävä osa päättyy. Joka tilanteessa r A l A = r B l B, koska taulukot ovat yhtä suuria. Riveillä 1 2 käsitellään tapaukset, joissa taulukoissa on 1 tai 2 lukua. Laskutavan toimivuudesta voi vakuuttua käymällä kaikki mahdolliset järjestykset läpi. Riveillä 3 6 käsitellään tapaukset, joissa lukujen määrä on suurempi: jos A:n keskimmäinen alkio on pienempi kuin B:n keskimmäinen alkio, hylätään A:n alkuosa ja B:n loppuosa, ja muussa tapauksessa hylätään A:n loppuosa ja B:n alkuosa. Katsotaan vielä lopuksi, kuinka algoritmi laskee ensimmäisen esimerkin taulukkojen mediaanin. Molemmissa taulukoissa on 8 alkiota, joten funktiota kutsutaan MEDIAN(A, 1, 8, B, 1, 8). A B A B A B A 8 11 B 6 9 Vihdoin (MAX(8, 6) + MIN(11, 9))/2 = (8 + 9)/2 = 8, 5. 6

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

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

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

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

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

Tietorakenteet, laskuharjoitus 10, ratkaisuja. 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: 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

Lisätiedot

Algoritmit 1. Luento 12 Ke Timo Männikkö

Algoritmit 1. Luento 12 Ke Timo Männikkö Algoritmit 1 Luento 12 Ke 15.2.2017 Timo Männikkö Luento 12 Pikalajittelu Pikalajittelun vaativuus Osittamisen tasapainoisuus Lajittelumenetelmien vaativuus Laskentalajittelu Lokerolajittelu Kantalukulajittelu

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

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

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

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

58131 Tietorakenteet (kevät 2009) Harjoitus 6, ratkaisuja (Antti Laaksonen) 58131 Tietorakenteet (kevät 2009) Harjoitus 6, ratkaisuja (Antti Laaksonen) 1. Avaimet 1, 2, 3 ja 4 mahtuvat samaan lehtisolmuun. Tässä tapauksessa puussa on vain yksi solmu, joka on samaan aikaan juurisolmu

Lisätiedot

Tietorakenteet, laskuharjoitus 7, ratkaisuja

Tietorakenteet, laskuharjoitus 7, ratkaisuja Tietorakenteet, laskuharjoitus, ratkaisuja. Seuraava kuvasarja näyttää B + -puun muutokset lisäysten jälkeen. Avaimet ja 5 mahtuvat lehtisolmuihin, joten niiden lisäys ei muuta puun rakennetta. Avain 9

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 2. Luento 5 Ti Timo Männikkö

Algoritmit 2. Luento 5 Ti Timo Männikkö Algoritmit 2 Luento 5 Ti 28.3.2017 Timo Männikkö Luento 5 Puurakenteet B-puu B-puun korkeus B-puun operaatiot Algoritmit 2 Kevät 2017 Luento 5 Ti 28.3.2017 2/29 B-puu Algoritmit 2 Kevät 2017 Luento 5 Ti

Lisätiedot

Algoritmit 1. Luento 11 Ti Timo Männikkö

Algoritmit 1. Luento 11 Ti Timo Männikkö Algoritmit 1 Luento 11 Ti 14.2.2017 Timo Männikkö Luento 11 Algoritminen ongelmanratkaisu Osittaminen Lomituslajittelu Lomituslajittelun vaativuus Rekursioyhtälöt Pikalajittelu Algoritmit 1 Kevät 2017

Lisätiedot

On annettu jono lukuja tai muita alkioita, joiden välille on määritelty suuruusjärjestys. Tehtävänä on saattaa alkiot suuruusjärjestykseen.

On annettu jono lukuja tai muita alkioita, joiden välille on määritelty suuruusjärjestys. Tehtävänä on saattaa alkiot suuruusjärjestykseen. 6. Järjestäminen On annettu jono lukuja tai muita alkioita, joiden välille on määritelty suuruusjärjestys. Tehtävänä on saattaa alkiot suuruusjärjestykseen. Tämä on eräs klassisimpia tietojenkäsittelyongelmia,

Lisätiedot

Algoritmit 2. Luento 6 Ke Timo Männikkö

Algoritmit 2. Luento 6 Ke Timo Männikkö Algoritmit 2 Luento 6 Ke 29.3.2017 Timo Männikkö Luento 6 B-puun operaatiot B-puun muunnelmia Nelipuu Trie-rakenteet Standarditrie Pakattu trie Algoritmit 2 Kevät 2017 Luento 6 Ke 29.3.2017 2/31 B-puu

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 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

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina Hakupuut tässä luvussa tarkastelemme puita tiedon tallennusrakenteina hakupuun avulla voidaan toteuttaa kaikki joukko-tietotyypin operaatiot (myös succ ja pred) pahimman tapauksen aikavaativuus on tavallisella

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

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

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

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

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

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. Luento 7 Ti Timo Männikkö

Algoritmit 1. Luento 7 Ti Timo Männikkö Algoritmit 1 Luento 7 Ti 31.1.2017 Timo Männikkö Luento 7 Järjestetty binääripuu Binääripuiden termejä Binääripuiden operaatiot Solmun haku, lisäys, poisto Algoritmit 1 Kevät 2017 Luento 7 Ti 31.1.2017

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

Kohdissa 2 ja 3 jos lukujen valintaan on useita vaihtoehtoja, valitaan sellaiset luvut, jotka ovat mahdollisimman lähellä listan alkua.

Kohdissa 2 ja 3 jos lukujen valintaan on useita vaihtoehtoja, valitaan sellaiset luvut, jotka ovat mahdollisimman lähellä listan alkua. A Lista Aikaraja: 1 s Uolevi sai käsiinsä listan kokonaislukuja. Hän päätti laskea listan luvuista yhden luvun käyttäen seuraavaa algoritmia: 1. Jos listalla on vain yksi luku, pysäytä algoritmi. 2. Jos

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

811312A Tietorakenteet ja algoritmit III Lajittelualgoritmeista

811312A Tietorakenteet ja algoritmit III Lajittelualgoritmeista 811312A Tietorakenteet ja algoritmit 2016-2017 III Lajittelualgoritmeista Sisältö 1. Johdanto 2. Pikalajittelu 3. Kekolajittelu 4. Lajittelualgoritmien suorituskyvyn rajoista 811312A TRA, Lajittelualgoritmeista

Lisätiedot

Tietorakenteet, laskuharjoitus 1,

Tietorakenteet, laskuharjoitus 1, Tietorakenteet, laskuharjoitus 1, 19.-22.1 Huom: laskarit alkavat jo ensimmäisellä luentoviikolla 1. Taustaa http://wiki.helsinki.fi/display/mathstatkurssit/matukurssisivu Halutaan todistaa, että oletuksesta

Lisätiedot

Miten käydä läpi puun alkiot (traversal)?

Miten käydä läpi puun alkiot (traversal)? inääripuut ieman lisää aidon binääripuun ominaisuuksia lehtisolmuja on yksi enemmän kuin sisäsolmuja inääripuut tasolla d on korkeintaan 2 d solmua pätee myös epäaidolle binääripuulle taso 0: 2 0 = 1 solmu

Lisätiedot

58131 Tietorakenteet ja algoritmit (kevät 2013) Kurssikoe 2, , vastauksia

58131 Tietorakenteet ja algoritmit (kevät 2013) Kurssikoe 2, , vastauksia 58131 Tietorakenteet ja algoritmit (kevät 2013) Kurssikoe 2, 652013, vastauksia 1 [6 pistettä] Vastaa jokaisesta alla olevasta väittämästä onko se tosi vai epätosi ja anna lyhyt perustelu Jokaisesta kohdasta

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 11.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 11.2.2009 1 / 33 Kertausta: listat Tyhjä uusi lista luodaan kirjoittamalla esimerkiksi lampotilat = [] (jolloin

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

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

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

811312A Tietorakenteet ja algoritmit, 2014-2015, Harjoitus 7, ratkaisu

811312A Tietorakenteet ja algoritmit, 2014-2015, Harjoitus 7, ratkaisu 832A Tietorakenteet ja algoritmit, 204-205, Harjoitus 7, ratkaisu Hajota ja hallitse-menetelmä: Tehtävä 7.. Muodosta hajota ja hallitse-menetelmää käyttäen algoritmi TULOSTA_PUU_LASKEVA, joka tulostaa

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

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

5. Keko. Tietorakenne keko eli kasa (heap) on tehokas toteutus abstraktille tietotyypille prioriteettijono, jonka operaatiot ovat seuraavat:

5. Keko. Tietorakenne keko eli kasa (heap) on tehokas toteutus abstraktille tietotyypille prioriteettijono, jonka operaatiot ovat seuraavat: 5. Keko Tietorakenne keko eli kasa (heap) on tehokas toteutus abstraktille tietotyypille prioriteettijono, jonka operaatiot ovat seuraavat: Insert(S, x): lisää avaimen x prioriteettijonoon S Maximum(S):

Lisätiedot

Matematiikan tukikurssi, kurssikerta 2

Matematiikan tukikurssi, kurssikerta 2 Matematiikan tukikurssi kurssikerta 1 Relaatioista Oletetaan kaksi alkiota a ja b. Näistä kumpikin kuuluu johonkin tiettyyn joukkoon mahdollisesti ne kuuluvat eri joukkoihin; merkitään a A ja b B. Voidaan

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

ja λ 2 = 2x 1r 0 x 2 + 2x 1r 0 x 2

ja λ 2 = 2x 1r 0 x 2 + 2x 1r 0 x 2 Johdatus diskreettiin matematiikkaan Harjoitus 4, 7.10.2015 1. Olkoot c 0, c 1 R siten, että polynomilla r 2 c 1 r c 0 on kaksinkertainen juuri. Määritä rekursioyhtälön x n+2 = c 1 x n+1 + c 0 x n, n N,

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

2.1. Tehtävänä on osoittaa induktiolla, että kaikille n N pätee n = 1 n(n + 1). (1)

2.1. Tehtävänä on osoittaa induktiolla, että kaikille n N pätee n = 1 n(n + 1). (1) Approbatur 3, demo, ratkaisut Sovitaan, että 0 ei ole luonnollinen luku. Tällöin oletusta n 0 ei tarvitse toistaa alla olevissa ratkaisuissa. Se, pidetäänkö nollaa luonnollisena lukuna vai ei, vaihtelee

Lisätiedot

A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä.

A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä. Esimerkki otteluvoiton todennäköisyys A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä. Yksittäisessä pelissä A voittaa todennäköisyydellä p ja B todennäköisyydellä q =

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

Johdatus lukuteoriaan Harjoitus 2 syksy 2008 Eemeli Blåsten. Ratkaisuehdotelma

Johdatus lukuteoriaan Harjoitus 2 syksy 2008 Eemeli Blåsten. Ratkaisuehdotelma Johdatus lukuteoriaan Harjoitus 2 syksy 2008 Eemeli Blåsten Ratkaisuehdotelma Tehtävä 1 1. Etsi lukujen 4655 ja 12075 suurin yhteinen tekijä ja lausu se kyseisten lukujen lineaarikombinaationa ilman laskimen

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CSE-A1111 30.9.2015 CSE-A1111 Ohjelmoinnin peruskurssi Y1 30.9.2015 1 / 27 Mahdollisuus antaa luentopalautetta Goblinissa vasemmassa reunassa olevassa valikossa on valinta Luentopalaute.

Lisätiedot

Konsensusongelma hajautetuissa järjestelmissä. Niko Välimäki Hajautetut algoritmit -seminaari

Konsensusongelma hajautetuissa järjestelmissä. Niko Välimäki Hajautetut algoritmit -seminaari Konsensusongelma hajautetuissa järjestelmissä Niko Välimäki 30.11.2007 Hajautetut algoritmit -seminaari Konsensusongelma Päätöksen muodostaminen hajautetussa järjestelmässä Prosessien välinen viestintä

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

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

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

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

Luku 6. Dynaaminen ohjelmointi. 6.1 Funktion muisti

Luku 6. Dynaaminen ohjelmointi. 6.1 Funktion muisti Luku 6 Dynaaminen ohjelmointi Dynaamisessa ohjelmoinnissa on ideana jakaa ongelman ratkaisu pienempiin osaongelmiin, jotka voidaan ratkaista toisistaan riippumattomasti. Jokaisen osaongelman ratkaisu tallennetaan

Lisätiedot

Algoritmit 2. Luento 13 Ti Timo Männikkö

Algoritmit 2. Luento 13 Ti Timo Männikkö Algoritmit 2 Luento 13 Ti 2.5.2017 Timo Männikkö Luento 13 Merkkijonon sovitus Horspoolin algoritmi Laskennallinen vaativuus Päätösongelmat Epädeterministinen algoritmi Vaativuusluokat NP-täydellisyys

Lisätiedot

Algoritmit 1. Luento 10 Ke 11.2.2015. Timo Männikkö

Algoritmit 1. Luento 10 Ke 11.2.2015. Timo Männikkö Algoritmit 1 Luento 10 Ke 11.2.2015 Timo Männikkö Luento 10 Algoritminen ongelman ratkaisu Suunnittelumenetelmät Raaka voima Järjestäminen eli lajittelu Kuplalajittelu Väliinsijoituslajittelu Valintalajittelu

Lisätiedot

1 Puu, Keko ja Prioriteettijono

1 Puu, Keko ja Prioriteettijono TIE-20100 Tietorakenteet ja algoritmit 1 1 Puu, Keko ja Prioriteettijono Tässä luvussa käsitellään algoritmien suunnitteluperiaatetta muunna ja hallitse (transform and conquer) Lisäksi esitellään binääripuun

Lisätiedot

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu 1312A Tietorakenteet ja algoritmit, 2016-2017, Harjoitus 5, Ratkaisu Harjoituksen aihe ovat hash-taulukot ja binääriset etsintäpuut Tehtävä 5.1 Tallenna avaimet 10,22,31,4,15,28,17 ja 59 hash-taulukkoon,

Lisätiedot

Tekijäryhmiä varten määritellään aluksi sivuluokat ja normaalit aliryhmät.

Tekijäryhmiä varten määritellään aluksi sivuluokat ja normaalit aliryhmät. 3 Tekijäryhmät Tekijäryhmän käsitteen avulla voidaan monimutkainen ryhmä jakaa osiin. Ideana on, että voidaan erikseen tarkastella, miten laskutoimitus vaikuttaa näihin osiin kokonaisuuksina, ja jättää

Lisätiedot

4.3. Matemaattinen induktio

4.3. Matemaattinen induktio 4.3. Matemaattinen induktio Matemaattinen induktio: Deduktion laji Soveltuu, kun ominaisuus on osoitettava olevan voimassa luonnollisilla luvuilla. Suppea muoto P(n) : Ominaisuus, joka joka riippuu luvusta

Lisätiedot

Algoritmit 2. Luento 11 Ti Timo Männikkö

Algoritmit 2. Luento 11 Ti Timo Männikkö Algoritmit 2 Luento 11 Ti 25.4.2017 Timo Männikkö Luento 11 Peruutusmenetelmä Osajoukon summa Pelipuut Pelipuun läpikäynti Rajoitehaku Kapsäkkiongelma Algoritmit 2 Kevät 2017 Luento 11 Ti 25.4.2017 2/29

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 6 Vastaukset Harjoituksen aiheena on funktionaalinen ohjelmointi Scheme- ja Haskell-kielillä. Voit suorittaa ohjelmat osoitteessa https://ideone.com/

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

Kaikki kurssin laskuharjoitukset pidetään Exactumin salissa C123. Malliratkaisut tulevat nettiin kurssisivulle.

Kaikki kurssin laskuharjoitukset pidetään Exactumin salissa C123. Malliratkaisut tulevat nettiin kurssisivulle. Kombinatoriikka, kesä 2010 Harjoitus 1 Ratkaisuehdotuksia (RT (5 sivua Kaikki kurssin laskuharjoitukset pidetään Exactumin salissa C123. Malliratkaisut tulevat nettiin kurssisivulle. 1. Osoita, että vuoden

Lisätiedot

Olkoon S(n) kutsun merge-sort(a, p, q) tilavaativuus kun p q + 1 = n. Oletetaan merge toteutetuksi vakiotyötilassa (ei-triviaalia mutta mahdollista).

Olkoon S(n) kutsun merge-sort(a, p, q) tilavaativuus kun p q + 1 = n. Oletetaan merge toteutetuksi vakiotyötilassa (ei-triviaalia mutta mahdollista). Esimerkki Lomitusjärjestäminen merge-sort(a, p, q): var k % paikallinen muuttuja, vakiotila 1. if p < q then 2. r := (p + q)/2 3. merge-sort(a, p, r) 4. merge-sort(a, r + 1, q) 5. merge(a, p, r, q) Olkoon

Lisätiedot

TAMPEREEN TEKNILLINEN YLIOPISTO

TAMPEREEN TEKNILLINEN YLIOPISTO TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja Tietokonetekniikan laitos TKT-3200 Tietokonetekniikka ASSEMBLER: QSORT 11.08.2010 Ryhmä 00 nimi1 email1 opnro1 nimi2 email2 opnro2 nimi3 email3 opnro3 1. TEHTÄVÄ

Lisätiedot

Valitaan alkio x 1 A B ja merkitään A 1 = A { x 1 }. Perinnöllisyyden nojalla A 1 I.

Valitaan alkio x 1 A B ja merkitään A 1 = A { x 1 }. Perinnöllisyyden nojalla A 1 I. Vaihto-ominaisuudella on seuraava intuition kannalta keskeinen seuraus: Olkoot A I ja B I samankokoisia riippumattomia joukkoja: A = B = m jollain m > 0. Olkoon vielä n = m A B, jolloin A B = B A = n.

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

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

Sekalaiset tehtävät, 11. syyskuuta 2005, sivu 1 / 13. Tehtäviä

Sekalaiset tehtävät, 11. syyskuuta 2005, sivu 1 / 13. Tehtäviä Sekalaiset tehtävät, 11. syyskuuta 005, sivu 1 / 13 Tehtäviä Tehtävä 1. Johda toiseen asteen yhtälön ax + bx + c = 0, a 0 ratkaisukaava. Tehtävä. Määrittele joukon A R pienin yläraja sup A ja suurin alaraja

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

private TreeMap nimella; private TreeMap 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

1 Kannat ja kannanvaihto

1 Kannat ja kannanvaihto 1 Kannat ja kannanvaihto 1.1 Koordinaattivektori Oletetaan, että V on K-vektoriavaruus, jolla on kanta S = (v 1, v 2,..., v n ). Avaruuden V vektori v voidaan kirjoittaa kannan vektorien lineaarikombinaationa:

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 9.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 9.2.2009 1 / 35 Listat Esimerkki: halutaan kirjoittaa ohjelma, joka lukee käyttäjältä 30 lämpötilaa. Kun lämpötilat

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 10.2.2010 T-106.1208 Ohjelmoinnin perusteet Y 10.2.2010 1 / 43 Kertausta: listat Tyhjä uusi lista luodaan kirjoittamalla esimerkiksi lampotilat = [] (jolloin

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

Olkoon seuraavaksi G 2 sellainen tasan n solmua sisältävä suunnattu verkko,

Olkoon seuraavaksi G 2 sellainen tasan n solmua sisältävä suunnattu verkko, Tehtävä 1 : 1 a) Olkoon G heikosti yhtenäinen suunnattu verkko, jossa on yhteensä n solmua. Määritelmän nojalla verkko G S on yhtenäinen, jolloin verkoksi T voidaan valita jokin verkon G S virittävä alipuu.

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

Matematiikan tukikurssi

Matematiikan tukikurssi Matematiikan tukikurssi Kurssikerta 1 Määrittelyjoukoista Tarkastellaan funktiota, jonka määrittelevä yhtälö on f(x) = x. Jos funktion lähtöjoukoksi määrittelee vaikkapa suljetun välin [0, 1], on funktio

Lisätiedot

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit Tietorakenteet ja algoritmit Rekursio Rekursion käyttötapauksia Rekursio määritelmissä Rekursio ongelmanratkaisussa ja ohjelmointitekniikkana Esimerkkejä taulukolla Esimerkkejä linkatulla listalla Hanoin

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

Tietotekniikan valintakoe

Tietotekniikan valintakoe Jyväskylän yliopisto Tietotekniikan laitos Tietotekniikan valintakoe 2..22 Vastaa kahteen seuraavista kolmesta tehtävästä. Kukin tehtävä arvostellaan kokonaislukuasteikolla - 25. Jos vastaat useampaan

Lisätiedot

Esimerkkejä polynomisista ja ei-polynomisista ongelmista

Esimerkkejä polynomisista ja ei-polynomisista ongelmista Esimerkkejä polynomisista ja ei-polynomisista ongelmista Ennen yleisempiä teoriatarkasteluja katsotaan joitain tyypillisiä esimerkkejä ongelmista ja niiden vaativuudesta kaikki nämä ongelmat ratkeavia

Lisätiedot

Laskennan mallit (syksy 2010) Harjoitus 8, ratkaisuja

Laskennan mallit (syksy 2010) Harjoitus 8, ratkaisuja 582206 Laskennan mallit (syksy 2010) Harjoitus 8, ratkaisuja 1. Tarkastellaan yhteydetöntä kielioppia S SAB ε A aa a B bb ε Esitä merkkijonolle aa kaksi erilaista jäsennyspuuta ja kummallekin siitä vastaava

Lisätiedot

Tietorakenteet ja algoritmit syksy Laskuharjoitus 1

Tietorakenteet ja algoritmit syksy Laskuharjoitus 1 Tietorakenteet ja algoritmit syksy 2012 Laskuharjoitus 1 1. Tietojenkäsittelijä voi ajatella logaritmia usein seuraavasti: a-kantainen logaritmi log a n kertoo, kuinka monta kertaa luku n pitää jakaa a:lla,

Lisätiedot

Mediaanisuodattimet. Tähän asti käsitellyt suodattimet ovat olleet lineaarisia. Niille on tyypillistä, että. niiden ominaisuudet tunnetaan hyvin

Mediaanisuodattimet. Tähän asti käsitellyt suodattimet ovat olleet lineaarisia. Niille on tyypillistä, että. niiden ominaisuudet tunnetaan hyvin Mediaanisuodattimet Tähän asti käsitellyt suodattimet ovat olleet lineaarisia. Niille on tyypillistä, että niiden ominaisuudet tunnetaan hyvin niiden analysointiin on olemassa vakiintuneita menetelmiä

Lisätiedot

MS-A0402 Diskreetin matematiikan perusteet Esimerkkejä ym., osa I

MS-A0402 Diskreetin matematiikan perusteet Esimerkkejä ym., osa I MS-A040 Diskreetin matematiikan perusteet Esimerkkejä ym., osa I G. Gripenberg Aalto-yliopisto. maaliskuuta 05 G. Gripenberg (Aalto-yliopisto) MS-A040 Diskreetin matematiikan perusteet Esimerkkejä. ym.,

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

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

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

Turingin koneen laajennuksia

Turingin koneen laajennuksia Turingin koneen laajennuksia Turingin koneen määritelmään voidaan tehdä erilaisia muutoksia siten että edelleen voidaan tunnistaa tasan sama luokka kieliä. Moniuraiset Turingin koneet: nauha jakautuu k

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 25.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 25.2.2009 1 / 34 Syötteessä useita lukuja samalla rivillä Seuraavassa esimerkissä käyttäjä antaa useita lukuja samalla

Lisätiedot

3. Hakupuut. B-puu on hakupuun laji, joka sopii mm. tietokantasovelluksiin, joissa rakenne on talletettu kiintolevylle eikä keskusmuistiin.

3. Hakupuut. B-puu on hakupuun laji, joka sopii mm. tietokantasovelluksiin, joissa rakenne on talletettu kiintolevylle eikä keskusmuistiin. 3. Hakupuut Hakupuu on listaa tehokkaampi dynaamisen joukon toteutus. Erityisesti suurilla tietomäärillä hakupuu kannattaa tasapainottaa, jolloin päivitysoperaatioista tulee hankalampia toteuttaa mutta

Lisätiedot

3 Lajittelualgoritmeista

3 Lajittelualgoritmeista 3 Lajittelualgoritmeista Tässä osassa käsitellään edistyneempiä lajittelualgoritmeja, erityisesti keko- ja pikalajitteluja. Lisäksi perehdytään hieman lajittelualgoritmien suorituskyvyn rajoihin. Materiaali

Lisätiedot