Lyhimmän polun etsintä verkossa muistihierarkiatehokkaasti
|
|
- Marjatta Pakarinen
- 7 vuotta sitten
- Katselukertoja:
Transkriptio
1 Lyhimmän polun etsintä verkossa muistihierarkiatehokkaasti Teppo Niinimäki Helsinki Seminaari: Muistihierarkia-algoritmit HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos
2 HELSINGIN YLIOPISTO HELSINGFORS UNIVERSITET UNIVERSITY OF HELSINKI Tiedekunta Fakultet Faculty Laitos Institution Department Matemaattis-luonnontieteellinen tiedekunta Tekijä Författare Author Teppo Niinimäki Työn nimi Arbetets titel Title Tietojenkäsittelytieteen laitos Lyhimmän polun etsintä verkossa muistihierarkiatehokkaasti Oppiaine Läroämne Subject Tietojenkäsittelytiede Työn laji Arbetets art Level Aika Datum Month and year Sivumäärä Sidoantal Number of pages Seminaariraportti sivua Tiivistelmä Referat Abstract Tässä raportissa tutustutaan verkon yksittäisestä solmusta lähtevän lyhimmän polun (SSSP) etsintään muistihierarkiassa. Tähän liittyen esitellään kaksi prioriteettijonon toteutusta: turnauspuut ja ämpärikeko. Näitä käytetään lyhimmän polun etsintään. Lopuksi luodaan katsaus algoritmeilla saavutettaviin käytännön tuloksiin. ACM Computing Classification System (CCS): F.2.2 [Analysis of Algorithms and Problem Complexity]: Nonnumerical Algorithms and Problems Sorting and searching G.2.2 [Discrete Mathematics]: Graph Theory Path and circuit problems Avainsanat Nyckelord Keywords muistihierarkia-algoritmit, lyhimmän polun etsintä Säilytyspaikka Förvaringsställe Where deposited Muita tietoja övriga uppgifter Additional information
3 Sisältö ii 1 Johdanto 1 2 Lyhin polku yksitasoisessa muistissa 2 3 Lyhin polku muistihierarkiassa 2 4 Turnauspuut Puun rakenne Puun operaatiot Lyhimmän reitin etsintä turnauspuun avulla Ämpärikeko Ämpärikeon rakenne Ämpärikeon operaatiot Lyhimmän reitin etsintä ämpärikeon avulla Käytännön koetuloksia 10 7 Yhteenveto 11 Lähteet 11
4 1 Johdanto 1 Lyhimmän polun etsintä on eräs keskeisimpiä verkkoihin liittyviä ongelmia. Ilmeisiä käyttökohteita ovat reittien etsiminen fyysisten sijaintien välillä esimerkiksi erilaisissa internetin reitinhakupalveluissa tai GPS-navigointilaitteissa. Muita sovelluskohteita löytyy muun muassa tietoliikenteestä ja robotiikasta. Lyhimmän polun etsintään voidaan käyttää myös osana monien muiden kombinatoristen ongelmien ratkasua. Olkoon G = (V, E) verkko, jossa on V solmua ja E kaarta, ja olkoon c(u, v) kunkin kaaren (u, v) E paino. Jos kaari ei kuulu verkkoon, sen paino on ääretön. Tässä ja jatkossa käytetään merkintöjä V ja E tarkoittamaan sekä solmujen ja kaarten joukkoja, että näiden joukkojen kokoja. Kahden solmun välisen polun pituus on polulle kuuluvien kaarten painojen summa. Yksittäisen alkusolmun lyhimmän polun ongelmassa (SSSP) päämääränä on löytää lyhimmät polut ennalta valitusta lähtösolmusta s verkon kaikkiin saavutettavissa oleviin solmuihin. Solmun v etäisyys solmusta s on lyhimmän näiden välisen polun pituus. Käytetään tästä etäisyydestä merkintää d(v). Usein oletetaan lisäksi, että kaarten painot ovat ei-negatiivisia. Näin tehdään myös tässä raportissa käsiteltävissä algoritmeissa. Lyhimmän polun ongelma on hyvin tunnettu perinteisessä yksitasoisen muistin mallissa (RAM-malli). Nykyaikainen tietokone sisältää kuitenkin useita eri kokoisia ja nopeuksisia muistitasoja. Koska muistitasojen väliset tiedonsiirrot vievät usein suuren osan algoritmin kuluttamasta ajasta, toimivat perinteiset algoritmit usein tehottomasti muistihierarkiassa. Ongelman ratkaisemiseksi on kehitetty useita monitasoisessa muistissa tehokkaasti toimivia algoritmeja [KS96, CR04, BFMZ04]. Tässä raportissa esitellään kaksi tällaista algoritmia ja tutustutaan saatuihin käytännön koetuloksiin. Luvussa 2 käydään kertauksenomaisesti läpi lyhimmän polun etsintä yksitasoisessa muistissa. Kolmannessa luvussa tutustutaan kaksitasoiseen muistiin ja sen mukanaan tuomiin ongelmiin. Luvuissa 4 ja 5 esitellään kaksi muistihierarkiassa tehokkaasti toimivaa algoritmia lyhimmän polun ongelman ratkaisemiseen. Lopuksi kuudennessa luvussa luodaan katsaus testeissä saavutettuihin käytännön tuloksiin.
5 2 2 Lyhin polku yksitasoisessa muistissa Perinteisessä yksitasoisessa muistimallissa lyhimmän polun etsintä määrätystä lähtösolmusta s V suunnatun verkon muihin solmuihin onnistuu tunnetusti ajassa O(E + V log V ) Dijkstran algoritmilla [CLRS01]. Tässä luvussa kerrataan lyhyesti Dijkstran algoritmin toimintaperiaate. Dijkstran algoritmissa selvitetään lyhin polku verkon kaikkiin solmuihin V solmu kerrallaan. Käsittelemättömistä solmuista pidetään kirjaa minimiprioriteettijonossa Q. Solmun u prioriteetti on lyhimmän löydetyn siihen johtavan polun pituus δ u. Algoritmin edetessä etäisyyttä δ u päivitetään aina kun solmuu u löytyy lyhyempi reitti. Kullekin solmu-etäisyys-parille (u, δ u ) Q pätee siis δ u d(u), missä d(u) on solmun u etäisyys solmusta s. Aluksi kaikki verkon solmut lisätään prioriteettijonoon Q ja niiden etäisyydet asetetaan äärettömiksi. Tämän jälkeen lähtösolmun etäisyydeksi δ s asetetaan 0. Kullakin kierroksella algoritmi poistaa joukosta Q alkion (u, δ u ), jolle δ u on pienin. Voidaan osoittaa, että tälle pätee d(u) = δ u. Lyhimmän polun pituus solmuun u on siis saatu selville. Tämän jälkeen algoritmi päivittää lyhintä löydettyä etäisyyttä solmun u kuhunkin naapuriin v Q: Jos d(u) + c(u, v) < δ u (eli jos reitti solmun u kautta solmuun v on lyhyempi kuin aiemmin lyhin löydetty) päivitetään etäisyys δ u := d(u) + c(u, v). Kun algoritmia on suoritettu V kierrosta, on kaikki solmut poistettu prioriteettijonosta Q ja lyhimmät etäisyydet kaikkiin solmuihin on siis saatu selville. Aikaa Dijkstran algoritmissa kuluu erityisesti prioriteettijonon käsittelyyn. Prioriteettijono täytyy tukea operaatioita Insert (alkion lisääminen), Delete-Min (pienimmän alkion poiminta) ja Decrease-Key (arvoon liittyvän prioriteetin/avaimen päivittäminen). Monet kekorakenteet sopivat tähän. Jos prioriteetijono toteutetaan binäärikekona, on algoritmin aikavaativuus O((E +V ) log V ). Fibonacci-keolla päästään aiemmin mainittuun aikavaativuuteen O(E + V log V ) [CLRS01]. 3 Lyhin polku muistihierarkiassa Muistihiearakioiden mallintamiseen ja niissä suoritettavien algoritmien analysoimiseen käytetyistä malleista ehkä yleisin on Aggarwalin ja Vitterin [AV88] esittelemä kaksikerroksisen muistin malli (I/O-malli, EM-malli). Mallissa muistihierarkia koostuu kahdesta kerroksesta: nopeasta ja pienestä muistista sekä hitaasta ja suuresta
6 3 muistista. Nopean muistin koko on M. Hidas muisti voidaan ajatella tarpeeksi suureksi algoritmin tarpeisiin samaan tapaan kuin perinteisessä yksitasoisessa mallissa. Jotta muistin sisältämää tietoa voitaisiin käsitellä, täytyy sen olla nopeassa muistissa. Muistitasojen välillä tietoa siirretään lohkoina, joiden koko on B. Alkuperäisessä Aggarwalin ja Vitterin mallissa algoritmi huolehtii itse muistisiirroista. Toisaalta voidaan myös Frigon ja kumppaneiden [FLPR99] tavoin olettaa, että laitteisto suorittaa siirrot automaattisesti ja optimaalisesti. Jälkimmäisessä tapauksessa on mahdollista kehittää muistitasoriippumattomia (cache-oblivious) algoritmeja, jotka toimivat hyvin ilman tietoa parametreista M ja B. Lyhimmän polun etsintään liittyy muistihierarkiassa muutama ongelma [KM03]: Kun solmun naapurit halutaan käydä läpi, joudutaan vieruslistan hakemiseksi yleensä suorittamaan vähintään yksi lohkosiirto. Jos verkko on harva ja solmujen vieruslistat ovat tarpeeksi lyhyitä tulee tässä usein tehtyä paljon turhaa työtä. Toinen pääasiallinen ongelma on Decrease-Key-operaation puute useimmista muistihierarkiassa tehokkaasti toimivista prioriteettijonototeutuksista. Ensimmäiseen ongelmaan ei ilmeisesti ole löydetty yleispätevää ratkaisua [KM03]. Yhden vieruslistan läpikäyminen vaatii Θ(1 + k/b) lohkonsiirtoa, missä k on vieruslistan koko. Näin ollen kaikkien vieruslistojen läpikäynti kertaalleen kuluttaa Θ(V + E/B) siirtoa. Esitettävät algoritmit keskittyvätkin toisen ongelman ratkaisemiseen, eli sopivan prioriteettijonon toteuttamiseen. 4 Turnauspuut Turnauspuu (tournament tree) on täydellinen binääripuu, jonka oikeanpuolimmaisista lehdistä osa saattaa puuttua. Turnauspuun, jonka korkeus on k voidaan ajatella esittävän N 2 k pelaajan välisten pudotuspelien tuloksia: Kukin lehti vastaa yhtä pelaajaa ja loput solmut otteluiden voittajia. Turnauspuun koko N on kiinteä ja se täytyy olla tiedossa kun turnauspuu luodaan. Sopivilla operaatioilla varustettua turnauspuuta voidaan käyttää prioriteettijonona. Tässä osiossa esitellään Kumarin ja Schwaben [KS96] kehittämä turnauspuun muunnelma (I/O-efficient tournament tree), joka toimii tehokkaasti kaksitasoisessa muistihierarkiassa. Käytetään siitä tästä lähin merkintää MHTP (muistihierarkiatehokas turnauspuu). Tämän jälkeen näytetään, miten MHTP:ta voidaan käyttää tehokkaaseen lyhimmän polun etsintään suuntaamattomassa verkossa, jossa kaarten painot
7 4 arvo avain Nopea muisti viesti Hidas muisti 1 M' M'+1 2M' N Kuva 1: Muistihierarkiatehokkaan turnauspuun MHTP rakenne. Arvojen ja avaimien suuruuksia on merkitty eri väreillä; mitä vaaleampi väri, sitä pienempi arvo/avain. (Perustuu Katrielin ja Meyerin [KM03] kuvaan 4.3.) ovat ei-negatiivisia. Esittely perustuu pääosin Katrielin ja Meyerin [KM03] näkemykseen puusta ja algoritmista. 4.1 Puun rakenne MHTP:ssä kuhunkin solmuun säilötään normaalista turnauspuusta poiketen useita alkioita. Kukin alkio on pari (x, k), joka koostuu yksilöivästä arvosta x {1,..., N} ja avaimesta k. Tässä N on siis puuhun tallennettavien alkioiden määrä. Avain esittää alkion prioriteettiä: mitä pienempi avain, sitä korkeammalle alkio nousee puussa. Jos avain k on ääretön, ei vastaava arvo x kuulu turnauspuun esittämään arvojoukkoon. Itse tietorakenne siis sitältää aina täsmälleen N alkiota, yhden kutankin arvoa x {1,..., N} kohti. Rakenteen esittämä looginen prioriteettijono sen sijaan sisältää vain ne arvot, joita vastaava avain on äärellinen. Kukin alkio sijaitsee vain yhdessä puun solmussa.
8 5 Olkoon M = r M jollain ennalta määrätyllä positiivisella vakiolla r < 1 ja N säilöttävien alkioiden määrä. Tällöin MHTP sisältää N/M lehtisolmua ja puun korkeus on siis O(log 2 (N/M)). Alkiot jaetaan tasaisesti lehtien kesken: alkiot väliltä (i 1) M i M liittyvät i. lehteen. Sanotaan, että lehti kattaa siihen liittyvät alkiot. Vastaavasti kukin sisäsolmu kattaa kaikki sen lapsien kattamat alkiot. Jokainen sisäsolmu sisältää vähintään M /2 ja korkeintaan M alkiota. Solmun sisältämät x alkiota ovat sen virittämän alipuun sisältämistä alkioista x pienintä. Lisäksi jokainen sisäsolmu sisältää M -alkioisen viestipuskurin. Vakio r ja siitä riippuva M on valittu siten, että juurisolmu saadaan pidettyä nopeassa muistissa. Kuvassa 1 on havainnollistettu MHTP:n rakennetta. 4.2 Puun operaatiot MHTP tukee seuraavia operaatioita: Delete-Min palauttaa pienimmän alkion ja poistaa sen puusta. Delete(x) poistaa alkion (x, k) puusta. Update(x, k ) korvaa alkion (x, k) alkiolla (x, k ), jos k < k. Jos puussa ei ole arvoa x, lisätään alkio (x, k ). Operaatioiden kutsuminen lähettää viestejä, jotka kulkevat puussa alapäin. Viestit voivat solmuun saapuessaan lisätä, poistaa tai muokata jotain solmun sisältämää alkiota. Jos viesti halutaan lähettää edelleen eteenpäin, se varastoidaan solmun viestipuskuriin. Vasta kun viestipuskuri täyttyy, sen sisältämät viestit lähtetetään alaspäin puussa. Operaatio Delete-Min poistaa pienimmän avaimen sisältävän alkion (x, k) juurisolmusta. Jos juurisolmussa ei ole tarpeeksi alkioita, täytetään se rekursiivisesti sen lapsista. Tämän jälkeen lähetetään alkion (x, ) lisäysviesti kohti arvoon x liittyvää lehtisolmua. Alkio lisätään ensimmäiseen viestin kohtaamaan solmuun, jossa on tilaa ja jonka jälkeläiset ovat joko tyhjiä tai sisältävät äärettömän avaimen omaavia alkioita. Operaatiossa Delete(x) lähetetään poistoviesti kohti arvoon x liittyvää solmua. Kun alkion (x, k) sisältävä solmu kohdataan, poistetaan alkio, muunnetaan viesti alkion (x, ) lisäysviestiksi ja toimitaan kuten edellä.
9 6 Operaatio Update(x, k ) lähettää päivitysviestin, joka etenee kunnes se kohtaa alkion (x, k) tai solmun, joka sisältää alkioita suuremmalla avaimella kuin k. Ensimmäisessä tapauksessa löydetty alkio (x, k) korvataan solmun sisällä alkiolla (x, k ), jos k < k. Jälkimmäisessä tapauksessa lisätään kohdattuun solmuun alkio (x, k) ja viesti muunnetaan alkion (x, k ) poistoviestiksi, joka lähetetään eteenpäin. Lisäksi jos alkiota lisättäessä solmun kapasiteetti ylittyy, siirretään osa solmun alkioista rekursiivisesti puussa alaspäin. Useiden alkioden ja viestien puskurointi samaan solmuun aiheuttaa sen, että päivitykset etenevät puussa laiskasti. Tämä edistää algoritmin paikallisuutta ja siten saa sen toimimaan hyvin kaksitasoisessa muistissa. Voidaan osoittaa, että mikä tahansa edellä edellä mainituista operaatioista koostuva z operaation jono voidaan suorittaa O(z/B log 2 (N/B)) lohkonsiirrolla. Operaatioiden tasoitettu vaativuus on siis O(1/B log 2 (N/B)). 4.3 Lyhimmän reitin etsintä turnauspuun avulla Muistihierarkiassa tehokkaasti toimivan algoritmin muodostamiseksi Dijkstran algoritmin prioriteettijonon Q tietorakenne korvataan esitellyllä MHTP:llä. Aluksi puu alustetaan sisältämään alkiot (1, ), (2, ),..., (V, ) siten, että kukin sisäsolmu sisältää vähintään M /2 alkiota. Tämä jälkeen lähtösolmua s vastaavan alkion avain päivitetetään nollaksi Update(s, 0)-operaatiolla. Algoritmissa suoritetaan V kierrosta. Kullakin kierroksella poimitaan jäljellä olevista solmuista aloitussolmua lähinnä oleva solmu u operaatiolla Delete-Min. Toisin kuin Dijkstran algoritmissa, jokaisen sen naapurin v etäisyys päivitetään operaatiolla Update(v, d(u) + c(u, v)) operaation Decrease-Key sijaan. Algoritmissa on kuitenkin ongelma: Jos d(u) < d(v), niin solmu u poistetaan ennen v:tä ja sen avaimeksi asetetaan tällöin. Jos solmujen u ja v välillä on kaari, päivitetään kuitenkin solmun v poiston yhteydessä solmun u avaimeksi d(v)+c(v, u), jolloin se palautuu joukkoon Q. Tämä ongelma kieretään pitämällä yllä toista prioriteettijonoa Q, joka tukee alkioiden lisäämistä ja pienimmän alkion poimimista tasoitetusti O(1/B log 2 (N/B)) lohkonsiirrolla. Tähän tai sen alle päästään useilla toteutuksilla, esimerkiksi Kumarin ja Schwaben esittelemällä kekototeutuksella [KS96]. Algoritmin alussa Q alustetaan tyhjäksi. Algoritmin edetessä jokaisen Update(v, d(u)+ c(u, v))-operaation yhteydessä lisätään alkio (u, d(u) + c(u, v)) myös joukkoon Q.
10 7 Jokaisen iteraation alussa verrataan joukon Q pienimmän alkion (u, k ) avainta k joukon Q pienimmän alkion (u, k) avaimeen k. Jos k k, poistetaan (u, k) joukosta Q ja toimitaan aiemmin kuvatulla tavalla. Jos taas k > k, poistetaan (u, k ) joukosta Q. Tällöin täytyy olla d(u ) < d(v) d(u) + c(u, v) = k, joten solmu u on jo käsitelty aiemmin. Voidaan siis suorittaa Delete(u ), jolloin arvon u mahdollinen uudelleenlisäys (u, d(v) + c(v, u)) joukkoon Q saadaan kumottua. Koska d(u) + c(u, v) < d(v) + c(v, u), ehditään kumoaminen aina suorittaa, ennen kuin u poimittaisiin joukosta Q uudelleen. Kuten aiemmin todettiin, vaatii kaikkien verkon solmujen vieruslistojen läpikäynti Θ(V + E/B) lohkosiirtoa. Edellä mainittujen rakenteiden Q ja Q käsittelyyn kuluu O(E/B log 2 (E/B)) lokonsiirtoa, joten algoritmin kokonaisvaativuus on luokkaa O(V + E/B log 2 (E/B)). Jotta tähän päästäisiin, täytyy parametri M osata valita oikein. Tätä varten nopean muistin määrä M pitää olla tiedossa. 5 Ämpärikeko Edellä esitelty algoritmi vaatii, että nopean muistin koko on tiedossa. Tämä on ongelmallista, sillä muistihierarkian parametreja B ja M ei välttämättä tiedetä. Rajoitus johtuu turnauspuusta. Tässä osiossa tutustutaan Brodalin ja kumppaneiden [BFMZ04] kehittämään ämpärikekoon (bucket heap), joka on MHTP:tä vastaava muistitasoriippumaton prioriteettijonototeutus. Myös Chowdhury ja Ramachandran [CR04] ovat kehittäneen vastaavan rakenteen, puskurikeon (buffer heap), joka perustuu samaan ideaan. Ämpärikekoa (tai vastaavasti puskurikekoa) käyttämällä edellä esitetty lyhimmän polun etsintäalgoritmi on mahdollista muuttaa muistitasoriippumattomaksi. 5.1 Ämpärikeon rakenne Kuten turnauspuuhun, myös ämpärikekoon varastoidaan arvo-avain-pareja. Tallennettavien arvojen suuruutta ei ole kuitenkaan rajoitettu samalla tavalla; riittää että ne ovat yksilöiviä. Olkoon N kullakin hetkellä tallennettujen alkioiden määrä. Ämpärikeko koostuu ämpäreistä B 1, B 2,..., B q ja viestipuskureista S 1, S 2,..., S q+1. Parametri q vaihtelee, mutta on aina korkeintaan log 4 N. Kuhunkin ämpäriin B i mahtuu 2 2i alkiota ja vastaavasti kuhunkin viestipuskuriin S i mahtuu 2 2i 1 viestiä. Koko siis aina nelinkertaistuu kun i kasvaa yhdellä. Prioriteettijonon kullakin hetkel-
11 8 (2) arvo avain (4) viesti (8) (16) Kuva 2: Ämpärikeon rakenne. Arvojen ja avaimien suuruuksia on merkitty eri väreillä; mitä vaaleampi väri, sitä pienempi avain. lä sisältämät alkiot säilötään ämpäreihin siten, että jos B i ja B j ovat kaksi ämpäriä ja i < j niin mille tahansa alkioille (x, k x ) B i ja (y, k y ) B j pätee k x k y. Toisin kuin turnauspuun tapauksessa, ämpärikeko sisältää kullakin hetkellä fyysisesti samat alkiot kuin sen esittämä looginen prioriteettijono. Ämpäreiden määrä vaihtelee dynaamisesti tallennettujen alkioiden määrän mukaan. Keon maksimikokoa ei siis tarvitse päättää ennalta kuten turnauspuulla. Tällä ei tosin ole merkitystä lyhimmän polun etsimisessä. Kuvassa 2 on havainnollistettu ämpärikeon rakennetta. Kullekin ämpärille ja viestipuskurille varataan sen kapasiteettiin nähden kaksinkertainen määrä muistia väliaikaisten ylivuotojen sallimiseksi. Ämpärit ja puskurit tallennetaan muistiin peräkkäin järjestyksessä S 1, B 1, S 2, B 2,..., S q, B q, S q Ämpärikeon operaatiot Ämpärikeko tukee samoja operaatioita kuin aiemmin esitelty turnauspuukin: Delete-Min poistaa ja palauttaa pienimmän alkion, Delete(x) poistaa alkion x ja Update(x, k) pienentää alkion x avainta tarvittaessa tai lisää x:n kekoon jos se ei ole siellä ennestään. Kuten turnauspuussa, operaatiot toteutetaan rakenteessa alapäin etenevien viestien avulla. Lisäksi käytetään kahta apuoperaatiota:
12 9 Empty(S i ) tyhjentää viestipuskurin S i toteuttamalla viestien vaatimat toimenpiteet vastaavan ämpärin B i alkioihin ja lähettämällä jäljelle jäävät viestit eteenpäin puskuriin S i+1. Fill(B i ) varmistaa että ämpäri B i on täynnä ja täyttää sen tarvittaessa. Näiden avulla muut operaatiot on helppo toteuttaa. Operaatio Delete-Min varmistaa, että ensimmäinen ämpäri on täynnä kutsumalla Fill(B 1 ). Tämän jälkeen se poistaa ämpärin pienimmän alkion ja palauttaa sen. Operaatiot Delete(x) ja Update(x, k) lisäävät vastaavan poisto- tai päivitysviestin viestipuskuriin S 1 ja kutsuvat tämän jälkeen operaatiota Empty(S 1 ). Päivitysviesti ja poistoviesti toimivat pääosin kuten turnauspuussakin: Päivitysviesti alkiolle (x, k) etenee, kunnes se kohtaa päivitettävän alkion (x, k ) tai päätyy puskuriin, jota vastaava ämpäri sisältää suurempia alkoita. Ensimmäisessä tapauksessa alkion avain päivitetään tarvittaessa, ja toisessa tapauksessa alkio (x, k) lisätään ämpäriin ja viesti muutetaan alkion x poistoviestiksi. Poistoviesti etenee, kunnes se kohtaa poistettavan alkion. Tämän jälkeen kohdattu alkio poistetaan ämpäristä. Lisäksi käytetään vielä kolmatta viestityyppiä. Alkion (x, k) työntöviestiä käytetään puskemaan alkioita yhtä pykälää alemmalle tasolle. Alemmalla tasolla alkio lisätään tason ämpäriin ja työntöviesti merkitään käsitellyksi. Pääasiallisen työn tekevät kaksi apuoperaatiota. Operaatio Empty(S i ) käy viestipuskurin S i viestit läpi ja suorittaa niiden vaatimat toimenpiteet. Kaikki jäljelle jääneet viestit siirretään seuraavalle tasolle puskuriin S i+1, jolloin S i tyhjenee. Jos ämpärin B i alkioiden määrä ylitti sen kapasiteetin, lähetetään ylijäämän verran suurimpia alkioita alemmalle tasolle lisäämällä vastaavat työntöviestit seuraavan tason viestipuskuriin S i+1. Jos lisäksi S i+1 täyttyi yli kapasiteettinsa, kutsutaan sille rekursiivisesti Empty(S i+1 ). Tarvittaessa tasojen määrää q kasvatetaan yhdellä. Operaatio Fill(B i ) tyhjentää aluksi vastaavan viestipuskurin kutsumalla Empty(S i ). Jos tämän jälkeen pätee B i+1 < 2 2i eli jos B i+1 sisältää alkioita alle neljäsosan kapasiteetistaan, kutsutaan rekursiivisesti operaatiota Fill(B i+1 ). Lopuksi täytetään tyhjä tila ämpärissä B i seuraavan tason B i+1 pienimmillä alkioilla. Lisäksi tasojen määrää q pienennetään, mikäli ylimmät tasot tyhjenivät kokonaan. Kuten turnauspuun tapauksessa, operaatiot suoritetaan ämpärikeossa laiskasti, jolloin se toimii hyvin muistihierarkiassa. Kaikkien operaatioiden Delete-Min, Delete ja Update tasoitettu lohkonsiirtojen määrä on O(1/B log 2 (N/B)). Tämä on sama kuin esitellyllä turnauspuulla. Ämpärikekoa varten ei kuitenkaan tarvitse tietää
13 muistihierarkian parametreja M tai B, jolloin sama toteutus toimii optimaalisesti parametreista riippumatta Lyhimmän reitin etsintä ämpärikeon avulla Lyhimmän polun etsintä on helppo toteuttaa samaan tapaan kuin turnauspuun avulla. Pääasiallisena prioriteettijonona Q käytetään turnauspuun sijaan ämpärikekoa. Lisäksi apuprioriteettijonona Q täytyy käyttää jotain muistitasoriippumatonta kekototeutusta. Tähän kelpaa esimerkiksi ämpärikeko itsessään tai vaikkapa Agren ja kumppaneiden [ABD + 07] kehittämä toteutus. Tuloksena saadaan aiemmin esitellyn algoritmin kanssa samalla lohkonsiirtojen määrällä O(V + E/B log 2 (E/B)) toimiva algoritmi. Erona aikaisempaan uusi algoritmi toimii optimaalisesti vaikka muistihierarkian parametreja ei olisikaan tiedossa. 6 Käytännön koetuloksia Lyhimmän reitin etsinnästä muistihierarkiassa on olemassa joitakin koetuloksia. Sach ja Clifford [SC08] ovat verranneet perinteisen binäärikekoa käyttävän Dijkstran algoritmin, ämpärikekoa käyttävän algoritmin sekä suppilokekoa käyttävän algoritmin tehokkuutta käytännössä. Brodalin ja Fagerbergin [BF02] esittelemä suppilokeko ei tue Decrease-Key tai Update-operaatioita, joten avaimen päivityksen sijaan täytyy kekoon aina lisätä uusi alkio Insert-operaatiolla. Keosta jo poistetuista arvoista pidettiin testissä kirjaa bittivektorissa, jotta niiden käsittely moneen kertaan osattaisiin välttää: Kun arvo poimitaan ensimmäisen kerran keosta, se merkitään käytetyksi vaihtamalla bittivektorissa vastaavan bitin arvoa. Testejä suoritettiin sekä keinotekoisilla että todellisilla verkoilla. Nopean muistin koko oli rajoitettu 32:een megatavuun. Pienillä verkoilla binäärikekoa käyttävä algoritmi oli nopein testatuista. Kun verkon kokoa kasvatettiin miljooniin solmuihin, ohittivat ämpärikekoa ja suppilokekoa käyttävät algoritmit selvästi perinteisen Dikstran algoritmin. Näistä kahdesta suppilokekoa käyttävä algoritmi toimi erityisesti harvoissa verkoissa hieman tehokkaammin kuin ämpärikekoa käyttävä. Myös Chen ja kumppanit [CAR + 07] ovat vertailleet erilaisia lyhimmän polun hakualgoritmeja muistihierarkiassa. Heidänkin testeissään muistihierarkiassa tehokkaasti toimimaan suunnitellut algoritmit suoriutuivat yleisesti paremmin kuin perinteiset algoritmit.
14 7 Yhteenveto 11 Lyhimmän polun etsintä on yleinen verkkoihin liittyvä ongelma. Tässä raportissa esiteltiin kaksi erilaista muistihierarkiassa tehokkaasti toimivaa Dijkstran algoritmin muunnelmaa. Ensimmäinen perustuu muistihierarkiatehokkaaseen turnauspuuhun ja vaatii, että nopean muistin koko on tiedossa. Toinen käyttää ämpärikekoa ja on muistitasoriippumaton, eikä siis tarvitse parametreja toimiakseen optimaalisesti. Kummatkin esitellyt algoritmit suorittavat O(V + E/B log 2 (E/B)) lohkonsiirtoa. Testeissä on lisäksi osoitettu, että teoreettisesti parempien aikavaatimusten lisäksi muistihierarkiaan optioiduilla algoritmeilla voidaan saavuttaa merkittävää nopeusetua myös käytännössä. Käsitellyt algoritmit toimivat kaikissa suuntaamattomissa verkoissa, joissa kaarten painot eivät ole negatiivisia. Erilaisiin erikoistapauksiin on myös olemassa useita menetelmiä. Esimerkiksi tapauksiin, joissa kaarien painot ovat rajoitettuja, on kehitetty algoritmeja [MZ03, ALZ07]. Myös tasoverkkoihin erikoistuneita algoritmeja ja tietorakenteita on esitelty [JZ05, AT05]. Lähteet ABD + 07 ALZ07 AT05 AV88 Arge, L., Bender, M. A., Demaine, E. D., Holland-Minkley, B. ja Ian Munro, J., An optimal cache-oblivious priority queue and its application to graph algorithms. SIAM Journal of Computing, 36,6(2007), sivut Allulli, L., Lichodzijewski, P. ja Zeh, N., A faster cache-oblivious shortest-path algorithm for undirected graphs with bounded edge lengths. SODA 07: Proceedings of the eighteenth annual ACM-SIAM symposium on Discrete algorithms. Society for Industrial and Applied Mathematics, 2007, sivut Arge, L. ja Toma, L., External data structures for shortest path queries on planar digraphs. Algorithms and Computation: 16th International Symposium. Springer, 2005, sivut Aggarwal, A. ja Vitter, J. S., The input/output complexity of sorting and related problems. Communications of the ACM, 31,9(1988), sivut
15 12 BF02 BFMZ04 CAR + 07 CLRS01 CR04 FLPR99 Brodal, G. S. ja Fagerberg, R., Funnel heap - a cache oblivious priority queue. ISAAC 02: Proceedings of the 13th International Symposium on Algorithms and Computation. Springer-Verlag, 2002, sivut Brodal, G. S., Fagerberg, R., Meyer, U. ja Zeh, N., Cache-oblivious data structures and algorithms for undirected breadth-first search and shortest paths. Proceedings of the 9th Scandinavian Workshop on Algorithm Theory. Springer, 2004, sivut Chen, M., Alam, R., Ramach, C. V., Lan, D. ja Tong, R. L., Priority queues and dijkstra s algorithm. Tekninen raportti, The University of Texas at Austin, Cormen, T. H., Leiserson, C. E., Rivest, R. L. ja Stein, C. Introduction to Algorithms, luku 24.3: Dijkstra s algorithmy, sivut MIT Press and McGraw-Hill, toinen painos, Chowdhury, R. A. ja Ramachandran, V., Cache-oblivious shortest paths in graphs using buffer heap. SPAA 04: Proceedings of the sixteenth annual ACM symposium on Parallelism in algorithms and architectures. ACM, 2004, sivut Frigo, M., Leiserson, C. E., Prokop, H. ja Ramachandran, S., Cacheoblivious algorithms. FOCS 99: Proceedings of the 40th Annual Symposium on Foundations of Computer Science. IEEE Computer Society, 1999, sivut JZ05 Jampala, H. ja Zeh, N., Cache-oblivious planar shortest paths. Automata, Languages and Programming: 32nd International Colloquium. Springer, 2005, sivut KM03 KS96 Katriel, I. ja Meyer, U. Algorithms for Memory Hierarchies, luku 4. Elementary Graph Algorithms in External Memory, sivut Springer, Kumar, V. ja Schwabe, E. J., Improved algorithms and data structures for solving graph problems in external memory. Proceedings of the 8th IEEE Symposium on Parallel and Distributed Processing. IEEE Computer Society, 1996, sivut
16 13 MZ03 Pag03 SC08 Meyer, U. ja Zeh, N., I/o-efficient undirected shortest paths. Algorithms - ESA Springer, 2003, sivut Pagh, R. Algorithms for Memory Hierarchies, luku 2. Basic External Memory Data Structures, sivut Springer, Sach, B. ja Clifford, R., An empirical study of cache-oblivious priority queues and their application to the shortest path problem, arxiv.org/pdf/ , 2008.
13 Lyhimmät painotetut polut
TIE-20100 Tietorakenteet ja algoritmit 297 13 Lyhimmät painotetut polut BFS löytää lyhimmän polun lähtösolmusta graafin saavutettaviin solmuihin. Se ei kuitenkaan enää suoriudu tehtävästä, jos kaarien
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 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ä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ätiedotAlgoritmit 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ätiedotarvostelija OSDA ja UDDI palveluhakemistoina.
Hyväksymispäivä Arvosana arvostelija OSDA ja UDDI palveluhakemistoina. HELSINGIN YLIOPISTO HELSINGFORS UNIVERSITET UNIVERSITY OF HELSINKI Tiedekunta/Osasto Fakultet/Sektion Faculty/Section Laitos Institution
Lisätiedot10. Painotetut graafit
10. Painotetut graafit Esiintyy monesti sovelluksia, joita on kätevä esittää graafeina. Tällaisia ovat esim. tietoverkko tai maantieverkko. Näihin liittyy erinäisiä tekijöitä. Tietoverkkoja käytettäessä
Lisätiedot10. Painotetut graafit
10. Painotetut graafit Esiintyy monesti sovelluksia, joita on kätevä esittää graafeina. Tällaisia ovat esim. tietoverkko tai maantieverkko. Näihin liittyy erinäisiä tekijöitä. Tietoverkkoja käytettäessä
LisätiedotLuku 7. Verkkoalgoritmit. 7.1 Määritelmiä
Luku 7 Verkkoalgoritmit Verkot soveltuvat monenlaisten ohjelmointiongelmien mallintamiseen. Tyypillinen esimerkki verkosta on tieverkosto, jonka rakenne muistuttaa luonnostaan verkkoa. Joskus taas verkko
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 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ä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 1. Luento 9 Ti Timo Männikkö
Algoritmit 1 Luento 9 Ti 7.2.2017 Timo Männikkö Luento 9 Graafit ja verkot Kaaritaulukko, bittimatriisi, pituusmatriisi Verkon lyhimmät polut Floydin menetelmä Lähtevien ja tulevien kaarien listat Forward
LisätiedotSelainpelien pelimoottorit
Selainpelien pelimoottorit Teemu Salminen Helsinki 28.10.2017 Seminaaritutkielma Helsingin yliopisto Tietojenkäsittelytiede ! 1 HELSINGIN YLIOPISTO HELSINGFORS UNIVERSITET UNIVERSITY OF HELSINKI Tiedekunta
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 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ä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ätiedot58131 Tietorakenteet (kevät 2009) Harjoitus 11, ratkaisuja (Topi Musto)
811 Tietorakenteet (kevät 9) Harjoitus 11, ratkaisuja (Topi Musto) 1. Bellmanin-Fordin algoritmin alustusvaiheen jälkeen aloitussolmussa on arvo ja muissa solmuissa on arvo ääretön. Kunkin solmun arvo
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ä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ä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ä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ä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ä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ä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ä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 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ä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ä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ä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ätiedotV. V. Vazirani: Approximation Algorithms, luvut 3-4 Matti Kääriäinen
V. V. Vazirani: Approximation Algorithms, luvut 3-4 Matti Kääriäinen Luento omatoimisen luennan tueksi algoritmiikan tutkimusseminaarissa 23.9.2002. 1 Sisältö Esitellään ongelmat Steiner-puu Kauppamatkustajan
Lisätiedot58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe ratkaisuja (Jyrki Kivinen)
58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe 12.9.2018 ratkaisuja (Jyrki Kivinen) 1. [10 pistettä] Iso-O-merkintä. (a) Pitääkö paikkansa, että n 3 + 5 = O(n 3 )? Ratkaisu: Pitää paikkansa.
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ätiedotOikeasta tosi-epätosi -väittämästä saa pisteen, ja hyvästä perustelusta toisen.
Tietorakenteet, kevät 2012 Kurssikoe 2, mallivastaukset 2. (a) Järjestämistä ei voi missään tilanteessa suorittaa nopeammin kuin ajassa Θ(n log n), missä n on järjestettävän taulukon pituus. Epätosi: Yleisessä
Lisätiedot811312A Tietorakenteet ja algoritmit 2015-2016. V Verkkojen algoritmeja Osa 2 : Kruskalin ja Dijkstran algoritmit
811312A Tietorakenteet ja algoritmit 2015-2016 V Verkkojen algoritmeja Osa 2 : Kruskalin ja Dijkstran algoritmit Sisältö 1. Johdanto 2. Leveyshaku 3. Syvyyshaku 4. Kruskalin algoritmi 5. Dijkstran algoritmi
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ä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ätiedotTIE Tietorakenteet ja algoritmit 261
TIE-20100 Tietorakenteet ja algoritmit 261 12 Graafit Seuraavaksi tutustutaan tietorakenteeseen, jonka muodostavat pisteet ja niiden välille muodostetut yhteydet graafiin. Keskitymme myös tyypillisimpiin
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ä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 1. Luento 13 Ma Timo Männikkö
Algoritmit 1 Luento 13 Ma 26.2.2018 Timo Männikkö Luento 13 Suunnittelumenetelmät Taulukointi Kapsäkkiongelma Ahne menetelmä Verkon lyhimmät polut Dijkstran menetelmä Verkon lyhin virittävä puu Kruskalin
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ätiedotDominointianalyysi. Teppo Niinimäki. Helsinki Approksimointialgoritmit HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos
Dominointianalyysi Teppo Niinimäki Helsinki 10.5.2010 Approksimointialgoritmit HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos HELSINGIN YLIOPISTO HELSINGFORS UNIVERSITET UNIVERSITY OF HELSINKI Tiedekunta
LisätiedotJoonas Haapala Ohjaaja: DI Heikki Puustinen Valvoja: Prof. Kai Virtanen
Hävittäjälentokoneen reitin suunnittelussa käytettävän dynaamisen ja monitavoitteisen verkko-optimointitehtävän ratkaiseminen A*-algoritmilla (valmiin työn esittely) Joonas Haapala 8.6.2015 Ohjaaja: DI
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ätiedotAlgoritmit 1. Luento 13 Ti 23.2.2016. Timo Männikkö
Algoritmit 1 Luento 13 Ti 23.2.2016 Timo Männikkö Luento 13 Suunnittelumenetelmät Taulukointi Kapsäkkiongelma Ahne menetelmä Verkon lyhimmät polut Dijkstran menetelmä Verkon lyhin virittävä puu Kruskalin
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ä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ätiedotAlgoritmit 2. Luento 11 Ti Timo Männikkö
Algoritmit 2 Luento 11 Ti 24.4.2018 Timo Männikkö Luento 11 Rajoitehaku Kapsäkkiongelma Kauppamatkustajan ongelma Paikallinen etsintä Lyhin virittävä puu Vaihtoalgoritmit Algoritmit 2 Kevät 2018 Luento
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ätiedotGraafit ja verkot. Joukko solmuja ja joukko järjestämättömiä solmupareja. eli haaroja. Joukko solmuja ja joukko järjestettyjä solmupareja eli kaaria
Graafit ja verkot Suuntamaton graafi: eli haaroja Joukko solmuja ja joukko järjestämättömiä solmupareja Suunnattu graafi: Joukko solmuja ja joukko järjestettyjä solmupareja eli kaaria Haaran päätesolmut:
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ätiedotHakupuut muistihierarkiassa
hyväksymispäivä arvosana arvostelija Hakupuut muistihierarkiassa Paavo Koskinen Helsinki 11.6.2011 Pro gradu -tutkielma HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos HELSINGIN YLIOPISTO HELSINGFORS
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ätiedotPN-puu. Helsinki Seminaari: Tietokannat nyt HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos
PN-puu Erno Härkönen Helsinki 24.10.2006 Seminaari: Tietokannat nyt HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos HELSINGIN YLIOPISTO HELSINGFORS UNIVERSITET UNIVERSITY OF HELSINKI Tiedekunta/Osasto
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ä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ätiedotPro gradu -tutkielma Meteorologia SUOMESSA ESIINTYVIEN LÄMPÖTILAN ÄÄRIARVOJEN MALLINTAMINEN YKSIDIMENSIOISILLA ILMAKEHÄMALLEILLA. Karoliina Ljungberg
Pro gradu -tutkielma Meteorologia SUOMESSA ESIINTYVIEN LÄMPÖTILAN ÄÄRIARVOJEN MALLINTAMINEN YKSIDIMENSIOISILLA ILMAKEHÄMALLEILLA Karoliina Ljungberg 16.04.2009 Ohjaajat: Ari Venäläinen, Jouni Räisänen
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ätiedotHENRI MYLLYOJA BINÄÄRI- JA FIBONACCI-KEOT PRIORITEETTIJONON TO- TEUTUKSEEN. Kandidaatintyö
HENRI MYLLYOJA BINÄÄRI- JA FIBONACCI-KEOT PRIORITEETTIJONON TO- TEUTUKSEEN Kandidaatintyö Tarkastaja: Sami Hyrynsalmi Jätetty tarkastettavaksi 24.10.2017 I TIIVISTELMÄ HENRI MYLLYOJA: Binääri- ja Fibonacci-keot
Lisätiedot58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe malliratkaisut ja arvosteluperusteet
58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe 15.6.2018 malliratkaisut ja arvosteluperusteet 1. [10 pistettä] Hakemistorakenteet. Vertaa linkitettyjen listojen, tasapainoisten hakupuiden ja
LisätiedotA274101 TIETORAKENTEET JA ALGORITMIT
A274101 TIETORAKENTEET JA ALGORITMIT PUURAKENTEET, BINÄÄRIPUU, TASAPAINOTETUT PUUT MIKÄ ON PUUTIETORAKENNE? Esim. Viereinen kuva esittää erästä puuta. Tietojenkäsittelytieteessä puut kasvavat alaspäin.
Lisä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ä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ätiedot811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta
811312A Tietorakenteet ja algoritmit 2016-2017 Kertausta jälkiosasta IV Perustietorakenteet Pino, jono ja listat tunnettava Osattava soveltaa rakenteita algoritmeissa Osattava päätellä operaatioiden aikakompleksisuus
Lisätiedot7.4 Sormenjälkitekniikka
7.4 Sormenjälkitekniikka Tarkastellaan ensimmäisenä esimerkkinä pitkien merkkijonojen vertailua. Ongelma: Ajatellaan, että kaksi n-bittistä (n 1) tiedostoa x ja y sijaitsee eri tietokoneilla. Halutaan
LisätiedotVerkon värittäminen ja riippumattomat joukot: johdantoa ja sovelluksia
hyväksymispäivä arvosana arvostelija Verkon värittäminen ja riippumattomat joukot: johdantoa ja sovelluksia Janne Korhonen Helsinki 8.12.2009 Seminaariraportti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen
LisätiedotDepartment of Mathematics, Hypermedia Laboratory Tampere University of Technology. Roolit Verkostoissa: HITS. Idea.
Roolit Tommi Perälä Department of Mathematics, Hypermedia Laboratory Tampere University of Technology 25.3.2011 J. Kleinberg kehitti -algoritmin (Hypertext Induced Topic Search) hakukoneen osaksi. n taustalla
Lisätiedot3. Hakupuut. B-puu on hakupuun laji, joka sopii mm. tietokantasovelluksiin, joissa rakenne on talletettu kiintolevylle eikä keskusmuistiin.
3. Hakupuut Hakupuu on listaa tehokkaampi dynaamisen joukon toteutus. Erityisesti suurilla tietomäärillä hakupuu kannattaa tasapainottaa, jolloin päivitysoperaatioista tulee hankalampia toteuttaa mutta
Lisä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ätiedotGraafin 3-värittyvyyden tutkinta T Graafiteoria, projektityö (eksakti algoritmi), kevät 2005
Graafin 3-värittyvyyden tutkinta T-79.165 Graafiteoria, projektityö (eksakti algoritmi), kevät 2005 Mikko Malinen, 36474R 29. maaliskuuta, 2005 Tiivistelmä Artikkelissa käydään läpi teoriaa, jonka avulla
LisätiedotTyön laji Arbetets art Level Aika Datum Month and year Sivumäärä Sidoantal Number of pages
Tiedekunta/Osasto Fakultet/Sektion Faculty Laitos Institution Department Tekijä Författare Author Työn nimi Arbetets titel Title Oppiaine Läroämne Subject Työn laji Arbetets art Level Aika Datum Month
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ä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 1 Ti Timo Männikkö
Algoritmit 1 Luento 1 Ti 10.1.2017 Timo Männikkö Luento 1 Algoritmi Algoritmin toteutus Ongelman ratkaiseminen Algoritmin tehokkuus Algoritmin suoritusaika Algoritmin analysointi Algoritmit 1 Kevät 2017
LisätiedotVerkon värittämistä hajautetuilla algoritmeilla
Verkon värittämistä hajautetuilla algoritmeilla 5 12 30 19 72 34 Jukka Suomela 15 77 18 4 9. tammikuuta 2012 19 2 68 Verkko 2 Verkko solmu 3 Verkko solmu kaari 4 Hajautettu järjestelmä solmu (tietokone)
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 Kertausta jälkiosasta
811312A Tietorakenteet ja algoritmit 2018-2019 Kertausta jälkiosasta V Hashtaulukot ja binääriset etsintäpuut Hashtaulukot Perusajatus tunnettava Tiedettävä mikä on tiivistefunktio Törmäysongelman hallinta:
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ätiedot58131 Tietorakenteet (kevät 2009) Harjoitus 9, ratkaisuja (Antti Laaksonen)
58131 Tietorakenteet (kevät 2009) Harjoitus 9, ratkaisuja (Antti Laaksonen) 1. Lisäysjärjestämisessä järjestetään ensin taulukon kaksi ensimmäistä lukua, sitten kolme ensimmäistä lukua, sitten neljä ensimmäistä
Lisätiedotv 8 v 9 v 5 C v 3 v 4
Verkot Verkko on (äärellinen) matemaattinen malli, joka koostuu pisteistä ja pisteitä toisiinsa yhdistävistä viivoista. Jokainen viiva yhdistää kaksi pistettä, jotka ovat viivan päätepisteitä. Esimerkiksi
LisätiedotYleinen paikallinen vakautuva synkronointialgoritmi
Yleinen paikallinen vakautuva synkronointialgoritmi Panu Luosto 23. marraskuuta 2007 3 4 putki 1 2 α α+1 α+2 α+3 0 K 1 kehä K 2 K 3 K 4 Lähdeartikkeli Boulinier, C., Petit, F. ja Villain, V., When graph
Lisätiedot= 5! 2 2!3! = = 10. Edelleen tästä joukosta voidaan valita kolme särmää yhteensä = 10! 3 3!7! = = 120
Tehtävä 1 : 1 Merkitään jatkossa kirjaimella H kaikkien solmujoukon V sellaisten verkkojen kokoelmaa, joissa on tasan kolme särmää. a) Jokainen verkko G H toteuttaa väitteen E(G) [V]. Toisaalta jokainen
LisätiedotKoht dialogia? Organisaation toimintaympäristön teemojen hallinta dynaamisessa julkisuudessa tarkastelussa toiminta sosiaalisessa mediassa
Kohtdialogia? Organisaationtoimintaympäristönteemojenhallinta dynaamisessajulkisuudessatarkastelussatoiminta sosiaalisessamediassa SatuMariaPusa Helsinginyliopisto Valtiotieteellinentiedekunta Sosiaalitieteidenlaitos
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ätiedotJohnson, A Theoretician's Guide to the Experimental Analysis of Algorithms.
Kokeellinen algoritmiikka (3 ov) syventäviä opintoja edeltävät opinnot: ainakin Tietorakenteet hyödyllisiä opintoja: ASA, Algoritmiohjelmointi suoritus harjoitustyöllä (ei tenttiä) Kirjallisuutta: Johnson,
LisätiedotArkkitehtuurinen reflektio
Arkkitehtuurinen reflektio Toni Ruokolainen Toni.Ruokolainen@cs.helsinki.fi Helsinki 6.10.2003 Tiivistelmä HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos HELSINGIN YLIOPISTO HELSINGFORS UNIVERSITET
LisätiedotTietorakenteet ja algoritmit
Tietorakenteet ja algoritmit Merkintöjen tulkintoja *++Pstack->top = item *Pstack->top++ = item (*Pstack->top)++ *(Pstack++)->top = item *(++Pstack)->top = item Lisää pinon toteutuksia Dynaaminen taulukko
LisätiedotRatkaisu. Tulkitaan de Bruijnin jonon etsimiseksi aakkostossa S := {0, 1} sanapituudelle n = 4. Neljän pituisia sanoja on N = 2 n = 16 kpl.
iskreetti matematiikka, syksy 00 arjoitus, ratkaisuista. seta 8 nollaa ja 8 ykköstä renkaaksi niin, että jokainen yhdistelmä 0000, 000,..., esiintyy täsmälleen kerran. Vihje: Tulkitse de ruijnin jonon
LisätiedotAlgoritmit 1. Luento 6 Ke Timo Männikkö
Algoritmit 1 Luento 6 Ke 25.1.2017 Timo Männikkö Luento 6 Järjestetty lista Listan toteutus dynaamisesti Linkitetyn listan operaatiot Vaihtoehtoisia listarakenteita Puurakenteet Binääripuu Järjestetty
LisätiedotJohdatus graafiteoriaan
Johdatus graafiteoriaan Syksy 2017 Lauri Hella Tampereen yliopisto Luonnontieteiden tiedekunta 62 Luku 2 Yhtenäisyys 2.1 Polku 2.2 Lyhin painotettu polku 2.3 Yhtenäinen graafi 2.4 Komponentti 2.5 Aste
LisätiedotTiraka, yhteenveto tenttiinlukua varten
Tiraka, yhteenveto tenttiinlukua varten TERMEJÄ Tietorakenne Tietorakenne on tapa tallettaa tietoa niin, että tietoa voidaan lisätä, poistaa, muokata ja hakea. Tietorakenteet siis säilövät tiedon niin,
LisätiedotVerkkoalgoritmeja. Henry Niveri. hniveri(at)cc.hut.fi
Verkkoalgoritmeja Henry Niveri hniveri(at)cc.hut.fi Seminaariesitelmä 16.4.008 T-106.5800 Satunnaisalgoritmit Tietotekniikan laitos Teknillinen korkeakoulu Tiivistelmä Tässä esityksessä käsitellään satunnaisalgoritmien
LisätiedotPienin virittävä puu (minimum spanning tree)
Pienin virittävä puu (minimum spanning tree) Jatkossa puu tarkoittaa vapaata puuta (ks. s. 11) eli suuntaamatonta verkkoa, joka on yhtenäinen: minkä tahansa kahden solmun välillä on polku syklitön: minkä
LisätiedotAlgoritmit 1. Luento 14 Ke 25.2.2015. Timo Männikkö
Algoritmit 1 Luento 14 Ke 25.2.2015 Timo Männikkö Luento 14 Heuristiset menetelmät Heuristiikkoja kapsäkkiongelmalle Kauppamatkustajan ongelma Lähimmän naapurin menetelmä Kertaus ja tenttivinkit Algoritmit
Lisätiedot14. Luennon sisältö. Kuljetustehtävä. Verkkoteoria ja optimointi. esimerkki. verkkoteorian optimointitehtäviä verkon virittävä puu lyhimmät polut
JYVÄSKYLÄN YLIOPISTO 14. Luennon sisältö Kuljetustehtävä esimerkki Verkkoteoria ja optimointi verkkoteorian optimointitehtäviä verkon virittävä puu lyhimmät polut kevät 2012 TIEA382 Lineaarinen ja diskreetti
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ätiedotEräs keskeinen algoritmien suunnittelutekniikka on. Palauta ongelma johonkin tunnettuun verkko-ongelmaan.
5. Verkkoalgoritmeja Eräs keskeinen algoritmien suunnittelutekniikka on Palauta ongelma johonkin tunnettuun verkko-ongelmaan. Palauttaminen edellyttää usein ongelman ja algoritmin pientä modifioimista,
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ätiedot