58131 Tietorakenteet (kevät 2009) Harjoitus 9, ratkaisuja (Antti Laaksonen)
|
|
- Ilmari Virtanen
- 7 vuotta sitten
- Katselukertoja:
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 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ätiedotAlgoritmit 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ätiedotlä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ätiedotPikalajittelu: 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ätiedot1. (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ätiedotAlgoritmit 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ätiedotTietorakenteet, 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ätiedotTKT20001 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ätiedotAlgoritmit 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ätiedotAlgoritmit 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ätiedot58131 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ätiedotAlgoritmit 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ätiedotLuku 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ätiedotAlgoritmit 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ätiedotAlgoritmit 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ätiedotAlgoritmit 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ätiedot58131 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ätiedotTehtä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ätiedot811312A 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ätiedotAlgoritmit 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ätiedotTietorakenteet, 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ätiedotAlgoritmit 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ätiedotAlgoritmit 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ätiedot58131 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ätiedotAlgoritmit 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ätiedotAlgoritmit 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ätiedotAlgoritmit 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ätiedot4 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ätiedotOn 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ätiedotAlgoritmit 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ätiedotALGORITMIT 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ätiedotAlgoritmit 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ätiedotHakupuut. 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ätiedotf(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ätiedotAlgoritmien 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ätiedotTarkennamme 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ätiedotv 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ätiedot811312A 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ätiedot58131 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ätiedotTietorakenteet 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ätiedot811312A 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ätiedot58131 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ätiedotKohdissa 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ätiedotAlgoritmit 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ätiedotAlgoritmit 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ätiedotAlgoritmit 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ätiedotTietorakenteet 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ätiedotPinot, 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ätiedot811312A 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ätiedotMiten 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ätiedotTietorakenteet, 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ätiedot9 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ätiedot58131 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ätiedotOhjelmoinnin 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ätiedotAlgoritmit 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ätiedotAlgoritmit 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ätiedot4. 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ätiedotAlgoritmit 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ätiedot58131 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ätiedot811312A 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ätiedotAlgoritmit 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ätiedotja λ 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ätiedotAlgoritmit 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ätiedotTietorakenteet, 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:
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ätiedotMatematiikan 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ätiedotDiskreetin 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ätiedot5. 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ätiedotAlgoritmit 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ätiedot2. 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ätiedotTIE 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ätiedotAlgoritmit 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ätiedotAlgoritmi 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ätiedotNopea 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ätiedot2.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ätiedotA 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ätiedot1.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ätiedotJohdatus 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ätiedotKonsensusongelma 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ätiedotLuku 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ätiedotOhjelmoinnin 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ätiedot1 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ätiedotAVL-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ätiedotDatatä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ätiedotBinää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ätiedotAlgoritmit 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ätiedotKaikki 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ätiedot811312A 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ätiedot5 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ätiedot4.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ätiedotAlgoritmit 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ätiedot1 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ätiedota 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ätiedotOlkoon 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ätiedot811312A 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ätiedot815338A 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ätiedotJohdatus 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ätiedotuseampi 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ätiedotAlgoritmit 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ätiedotAlgoritmit 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