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

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

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

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

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

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

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

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

Algoritmit 1. Luento 12 Ti Timo Männikkö

Algoritmit 1. Luento 12 Ti Timo Männikkö Algoritmit 1 Luento 12 Ti 19.2.2019 Timo Männikkö Luento 12 Osittamisen tasapainoisuus Pikalajittelun vaativuus Lajittelumenetelmien vaativuus Laskentalajittelu Lokerolajittelu Kantalukulajittelu Algoritmit

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

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

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

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

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

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

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

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

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

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

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

58131 Tietorakenteet ja algoritmit (syksy 2015) Toinen välikoe, malliratkaisut

58131 Tietorakenteet ja algoritmit (syksy 2015) Toinen välikoe, malliratkaisut Tietorakenteet ja algoritmit (syksy 0) Toinen välikoe, malliratkaisut. (a) Alussa puu näyttää tältä: Lisätään 4: 4 Tasapaino rikkoutuu solmussa. Tehdään kaksoiskierto ensin oikealle solmusta ja sitten

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

Algoritmit 2. Luento 9 Ti Timo Männikkö Algoritmit 2 Luento 9 Ti 17.4.2018 Timo Männikkö Luento 9 Merkkitiedon tiivistäminen Huffmanin koodi LZW-menetelmä Taulukointi Editointietäisyys Algoritmit 2 Kevät 2018 Luento 9 Ti 17.4.2018 2/29 Merkkitiedon

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

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

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

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

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

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

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

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

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

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

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

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

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

Algoritmit 2. Luento 13 Ti Timo Männikkö

Algoritmit 2. Luento 13 Ti Timo Männikkö Algoritmit 2 Luento 13 Ti 30.4.2019 Timo Männikkö Luento 13 Simuloitu jäähdytys Merkkijonon sovitus Horspoolin algoritmi Ositus ja rekursio Rekursion toteutus Algoritmit 2 Kevät 2019 Luento 13 Ti 30.4.2019

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

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

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

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

9 Erilaisia tapoja järjestää

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

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

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

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

58131 Tietorakenteet Erilliskoe , ratkaisuja (Jyrki Kivinen)

58131 Tietorakenteet Erilliskoe , ratkaisuja (Jyrki Kivinen) 58131 Tietorakenteet Erilliskoe 11.11.2008, ratkaisuja (Jyrki Kivinen) 1. (a) Koska halutaan DELETEMAX mahdollisimman nopeaksi, käytetään järjestettyä linkitettyä listaa, jossa suurin alkio on listan kärjessä.

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

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

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

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

(a) L on listan tunnussolmu, joten se ei voi olla null. Algoritmi lisäämiselle loppuun:

(a) L on listan tunnussolmu, joten se ei voi olla null. Algoritmi lisäämiselle loppuun: Tietorakenteet ja algoritmit, kevät 201 Kurssikoe 1, ratkaisuja 1. Tehtävästä sai yhden pisteen per kohta. (a) Invariantteja voidaan käyttää algoritmin oikeellisuustodistuksissa Jokin väittämä osoitetaan

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

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

Algoritmit 2. Luento 10 To Timo Männikkö

Algoritmit 2. Luento 10 To Timo Männikkö Algoritmit 2 Luento 10 To 19.4.2018 Timo Männikkö Luento 10 Peruutusmenetelmä Osajoukon summa Verkon 3-väritys Pelipuut Pelipuun läpikäynti Algoritmit 2 Kevät 2018 Luento 10 To 19.4.2018 2/34 Algoritmien

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

TIE Tietorakenteet ja algoritmit 25

TIE Tietorakenteet ja algoritmit 25 TIE-20100 Tietorakenteet ja algoritmit 25 Tällä kurssilla keskitytään algoritmien ideoihin ja algoritmit esitetään useimmiten pseudokoodina ilman laillisuustarkistuksia, virheiden käsittelyä yms. Otetaan

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

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

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

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

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

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

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

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

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

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

Datatähti 2019 loppu

Datatähti 2019 loppu Datatähti 2019 loppu task type time limit memory limit A Summa standard 1.00 s 512 MB B Bittijono standard 1.00 s 512 MB C Auringonlasku standard 1.00 s 512 MB D Binääripuu standard 1.00 s 512 MB E Funktio

Lisätiedot

Binäärihaun vertailujärjestys

Binäärihaun vertailujärjestys Järjestetyn sanakirjan tehokas toteutus: binäärihaku Binäärihaku (esimerkkikuassa aain = nimi) op Eea 5 op 5 op op 8 op 5 6 7 8 op Eea 5 op 5 op op 8 op 5 6 7 8 op Eea 5 op 5 op op 8 op 5 6 7 8 op Eea

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

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

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

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

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

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

a k+1 = 2a k + 1 = 2(2 k 1) + 1 = 2 k+1 1. xxxxxx xxxxxx xxxxxx xxxxxx

a k+1 = 2a k + 1 = 2(2 k 1) + 1 = 2 k+1 1. xxxxxx xxxxxx xxxxxx xxxxxx x x x x x x x x Matematiikan johdantokurssi, syksy 08 Harjoitus, ratkaisuista Hanoin tornit -ongelma: Tarkastellaan kolmea pylvästä A, B ja C, joihin voidaan pinota erikokoisia renkaita Lähtötilanteessa

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

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

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

Johdatus verkkoteoriaan 4. luento

Johdatus verkkoteoriaan 4. luento Johdatus verkkoteoriaan 4. luento 28.11.17 Viikolla 46 läpikäydyt käsitteet Viikolla 47 läpikäydyt käsitteet Verkko eli graafi, tasoverkko, solmut, välit, alueet, suunnatut verkot, isomorfiset verkot,

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

Algoritmit 2. Luento 12 To Timo Männikkö

Algoritmit 2. Luento 12 To Timo Männikkö Algoritmit 2 Luento 12 To 3.5.2018 Timo Männikkö Luento 12 Geneettiset algoritmit Simuloitu jäähdytys Merkkijonon sovitus Horspoolin algoritmi Algoritmit 2 Kevät 2018 Luento 12 To 3.5.2018 2/35 Algoritmien

Lisätiedot