Algoritmit 2. Luento 5 Ti Timo Männikkö

Samankaltaiset tiedostot
Algoritmit 2. Luento 5 Ti Timo Männikkö

Algoritmit 2. Luento 6 To Timo Männikkö

Algoritmit 2. Luento 6 Ke Timo Männikkö

Algoritmit 2. Luento 2 To Timo Männikkö

Algoritmit 1. Luento 7 Ti Timo Männikkö

Algoritmit 1. Luento 8 Ke Timo Männikkö

Algoritmit 2. Luento 2 Ke Timo Männikkö

Algoritmit 2. Luento 4 To Timo Männikkö

Algoritmit 2. Luento 4 Ke Timo Männikkö

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

Algoritmit 1. Luento 6 Ke Timo Männikkö

Algoritmit 2. Luento 7 Ti Timo Männikkö

Algoritmit 1. Luento 5 Ti Timo Männikkö

Algoritmit 2. Demot Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 1. Luento 12 Ti Timo Männikkö

Tietorakenteet, laskuharjoitus 7, ratkaisuja

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

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

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

Algoritmit 2. Luento 14 Ke Timo Männikkö

Algoritmit 1. Luento 12 Ke Timo Männikkö

Algoritmit 2. Luento 9 Ti Timo Männikkö

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

B + -puut. Kerttu Pollari-Malmi

Algoritmit 1. Luento 4 Ke Timo Männikkö

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

A TIETORAKENTEET JA ALGORITMIT

58131 Tietorakenteet (kevät 2008) 1. kurssikoe, ratkaisuja

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

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

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

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

Algoritmit 1. Luento 10 Ke Timo Männikkö

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

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

Binäärihaun vertailujärjestys

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

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

1.1 Tavallinen binäärihakupuu

Algoritmit 2. Demot Timo Männikkö

Algoritmit 1. Luento 9 Ti Timo Männikkö

7. Tasapainoitetut hakupuut

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

811312A Tietorakenteet ja algoritmit II Perustietorakenteet

Algoritmit 1. Luento 14 Ke Timo Männikkö

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

4. Joukkojen käsittely

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

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

Kierros 4: Binäärihakupuut

Algoritmit 2. Luento 10 To Timo Männikkö

Algoritmit 1. Luento 10 Ke Timo Männikkö

811312A Tietorakenteet ja algoritmit V Hash-taulukot ja binääriset etsintäpuut

CS-A1140 Tietorakenteet ja algoritmit

Algoritmit 2. Luento 11 Ti Timo Männikkö

Algoritmit 2. Luento 13 Ti Timo Männikkö

Algoritmit 1. Luento 3 Ti Timo Männikkö

58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe ratkaisuja (Jyrki Kivinen)

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

Paikkatiedon käsittely 5. Paikkatiedon indeksointi

Koe ma 1.3 klo salissa A111, koeaika kuten tavallista 2h 30min

Algoritmit 2. Luento 9 Ti Timo Männikkö

Algoritmit 1. Luento 11 Ti Timo Männikkö

Algoritmit 1. Luento 1 Ti Timo Männikkö

Algoritmit 2. Luento 12 To Timo Männikkö

Tietorakenteet, laskuharjoitus 6,

Algoritmit 2. Luento 11 Ti Timo Männikkö

Union-find-delete-algoritmien vertailua. Sari Itäluoma

Algoritmit 2. Luento 12 Ke Timo Männikkö

D B. B+ -puun tasapainotus poistossa. B+ -puun tasapainotus poistossa. Poistot. B+ -puun tasapainotus poistossa. B+ -puun tasapainotus poistossa

Hakemistorakenteet. R & G Chapter Tietokannan hallinta, kevät 2006, Jan 1

Hakemistotyypeistä. Hakemistorakenteet. Hakemiston toteutuksesta. Hakemiston toteutuksesta

Algoritmit 2. Luento 13 Ti Timo Männikkö

D B. Harvat hakemistot. Harvat hakemistot

Algoritmit 1. Luento 2 Ke Timo Männikkö

Tarkennamme geneeristä painamiskorotusalgoritmia

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

Kuva 1: J+-puun rakenne [HXS09].

811312A Tietorakenteet ja algoritmit, , Harjoitus 7, ratkaisu

Algoritmit 2. Luento 8 To Timo Männikkö

Lisätään avainarvo 6, joka mahtuu lehtitasolle:

B-puu. 3.3 Dynaamiset hakemistorakenteet

Tiraka, yhteenveto tenttiinlukua varten

Algoritmit 1. Luento 13 Ti Timo Männikkö

14 Tasapainotetut puurakenteet

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

Käsitellyt hakemistot (hajautus, ISAM): hakemisto-osa on staattinen eli ei muutu muuten kuin uudelleenorganisoinnissa.

811312A Tietorakenteet ja algoritmit III Lajittelualgoritmeista

58131 Tietorakenteet Erilliskoe , ratkaisuja (Jyrki Kivinen)

Algoritmit 1. Demot Timo Männikkö

Algoritmit 2. Luento 14 To Timo Männikkö

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

TKHJ:ssä on yleensä komento create index, jolla taululle voidaan luoda hakemisto

Fibonacci-kasoilla voidaan toteuttaa samat operaatiot kuin binomikasoilla.

Algoritmit 2. Luento 10 To Timo Männikkö

Algoritmit 1. Luento 13 Ma Timo Männikkö

Algoritmit 2. Luento 13 Ti Timo Männikkö

Algoritmi on periaatteellisella tasolla seuraava:

Transkriptio:

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 hakupuurakenteita Algoritmit 2 Kevät 2019 Luento 5 Ti 26.3.2019 3/34

B-puu Motivaatio: Hyvin suuria tietomääriä ei välttämättä voida käsitellä keskusmuistissa yhtenä kokonaisuutena Tietoa joudutaan siirtämään keskusmuistin ja hitaampien ulkoisten muistien (levymuistit) välillä Tarkoituksena minimoida ulkoisiin muisteihin kohdistuvien I/O-operaatioiden lukumäärä Käytetään mm. suurten tietokantojen indekseinä suorasaannin toteuttamiseksi Algoritmit 2 Kevät 2019 Luento 5 Ti 26.3.2019 4/34

B-puu B-puu yleisesti: Solmut lehtisolmuja tai haarautumissolmuja Kaikki lehtisolmut ovat samalla syvyydellä h (= puun korkeus) Jokaisessa solmussa x on Solmuun tallennettujen alkioiden lukumäärä x.num Alkiot avaimen mukaan kasvavassa järjestyksessä Merkitään i:nnen alkion avainta x.key[i] ja arvoa x.value[i], missä i = 1, 2,..., x.num Algoritmit 2 Kevät 2019 Luento 5 Ti 26.3.2019 5/34

B-puu B-puu yleisesti (jatkuu): Jokaisessa haarautumissolmussa on lisäksi x.num + 1 kpl osoittimia x.child[i] Osoitin x.child[1] osoittaa alipuuhun, jonka alkioiden avaimet < x.key[1] Osoitin x.child[i], missä i = 2, 3,..., x.num, osoittaa alipuuhun, jonka alkioiden avaimet k välillä x.key[i 1] < k < x.key[i] Osoitin x.child[x.num + 1] osoittaa alipuuhun, jonka alkioiden avaimet > x.key[x.num] Algoritmit 2 Kevät 2019 Luento 5 Ti 26.3.2019 6/34

B-puu Astetta m oleva B-puu: Arvo m Solmujen minimi- ja maksimikoko Alkioiden lukumäärä: Juurisolmussa vähintään 1, muissa solmuissa vähintään m 1 Jokaisessa solmussa enintään 2m 1 Osoittimien lukumäärä aina yhtä suurempi: Vähintään m (juurisolmussa 2), enintään 2m Solmu täysi: Maksimimäärä alkioita Solmu puoliksi täysi: Minimimäärä alkioita Algoritmit 2 Kevät 2019 Luento 5 Ti 26.3.2019 7/34

B-puu Esimerkiksi m = 2: Alkioita solmuissa 1, 2 tai 3 Osoittimia haarautumissolmuissa 2, 3 tai 4 2-3-4-puu Esimerkiksi m = 3: Alkioita solmuissa 2 5 Osoittimia haarautumissolmuissa 3 6 Algoritmit 2 Kevät 2019 Luento 5 Ti 26.3.2019 8/34

Esimerkki 40 60 80 130 90 100 200 250 340 400 150 180 210 220 240 270 300 360 370 420 440 460 Algoritmit 2 Kevät 2019 Luento 5 Ti 26.3.2019 9/34

B-puun korkeus Lause: Astetta m oleva B-puu, jossa on n alkiota Puun korkeus h log m ((n + 1)/2) Todistus: Juurisolmussa vähintään yksi alkio, muissa solmuissa vähintään m 1 alkiota Juurisolmulla vähintään 2 lasta, muilla solmuilla vähintään m lasta Tasolla 1 vähintään 2 solmua, tasolla 2 vähintään 2m solmua, tasolla 3 vähintään 2m 2 solmua jne. Algoritmit 2 Kevät 2019 Luento 5 Ti 26.3.2019 10/34

B-puun korkeus Todistus jatkuu: Yleisesti tasolla i vähintään 2m i 1 solmua, joissa vähintään m 1 alkiota n 1 + (m 1) = 1 + 2(m 1) h i=1 2m i 1 ( m h 1 m 1 ) = 2m h 1 m h (n + 1)/2 h log m ((n + 1)/2) Algoritmit 2 Kevät 2019 Luento 5 Ti 26.3.2019 11/34

B-puun operaatioiden vaativuus Kuten järjestettyjen binääripuiden perusoperaatiot (haku, lisäys, poisto) Pahimmassa tapauksessa käydään läpi jokin polku juurisolmusta lehtisolmuun Puun korkeus määrää operaatioiden aikavaativuuden Edellinen lause Aikavaativuus Θ(log n) Algoritmit 2 Kevät 2019 Luento 5 Ti 26.3.2019 12/34

B-puun operaatiot: Haku Alkion haku: Aloitetaan juurisolmusta Etsitään alkiota solmusta Jos alkio ei ole solmussa, siirrytään alkion avainta vastaavaan alipuuhun Jatketaan samalla tavalla Tarvittaessa johonkin lehtisolmuun saakka Lopetetaan kun alkio löytyy, tai kun todetaan että alkiota ei ole puussa Algoritmit 2 Kevät 2019 Luento 5 Ti 26.3.2019 13/34

B-puun operaatiot: Haku hae(x, k) Jos x on haarautumissolmu Jos k = x.key[i] jollain i, palautetaan haluttu tieto Muuten, jos k < x.key[1], kutsutaan hae(x.child[1], k) Muuten, jos x.key[i 1] < k < x.key[i] jollain i, kutsutaan hae(x.child[i], k) Muuten on k > x.key[x.num], joten kutsutaan hae(x.child[x.num + 1], k) (Jatkuu) Algoritmit 2 Kevät 2019 Luento 5 Ti 26.3.2019 14/34

B-puun operaatiot: Haku (Jatkuu) Muuten x on lehtisolmu Jos k = x.key[i] jollain i, palautetaan haluttu tieto Muuten palautetaan tieto: ei löydy Haluttu tieto: Alkio, sen arvokenttä, tai osoitin alkioon Algoritmit 2 Kevät 2019 Luento 5 Ti 26.3.2019 15/34

B-puun operaatiot: Lisäys Alkion lisäys: Kuljetaan juurisolmusta kohti avainta vastaavaa lehtisolmua Jos hakupolulla täysi solmu, halkaistaan se kahdeksi solmuksi ennen kuin jatketaan Jos juurisolmu täysi, muodostetaan uusi taso juurisolmun alapuolelle Lisätään alkio lehtisolmuun Algoritmit 2 Kevät 2019 Luento 5 Ti 26.3.2019 16/34

B-puun operaatiot: Lisäys Hakupolulla on päästy solmuun x Hakupolku jatkuisi solmusta y, mutta y on täysi Solmun halkaisu: y x a x y a z Algoritmit 2 Kevät 2019 Luento 5 Ti 26.3.2019 17/34

B-puun operaatiot: Lisäys Solmun y halkaisu: Olkoon a keskimmäinen alkio solmussa y Siirretään a:n oikealla puolella olevat alkiot uuteen solmuun z Jos y on haarautumissolmu, siirretään myös vastaavat lapsiosoittimet Alkion a vasemmalla puolella olevat alkiot ja vastaavat lapsiosoittimet jäävät solmuun y Siirretään a ylöspäin solmuun x paikkaan, johon se avaimensa mukaan kuuluu Lisätään x:ään uusi lapsiosoitin z:aan Algoritmit 2 Kevät 2019 Luento 5 Ti 26.3.2019 18/34

B-puun operaatiot: Lisäys lisää_ei_täysi(x, k, v) Jos x on lehtisolmu Lisätään solmuun x.key[i] = k ja x.value[i] = v siten että alkioiden kasvava järjestys säilyy Muuten x on haarautumissolmu Etsitään y = x.child[i], jonne alkio kuuluu Jos y on täysi Halkaistaan y (ks. edellä) Jos k < a:n avain, lisää_ei_täysi(y, k, v) Muuten lisää_ei_täysi(z, k, v) Muuten y ei ole täysi, joten kutsutaan lisää_ei_täysi(y, k, v) Algoritmit 2 Kevät 2019 Luento 5 Ti 26.3.2019 19/34

B-puun operaatiot: Lisäys Juurisolmua ei voi halkaista samalla tavalla Sen sijaan lisätään juurisolmun alapuolelle uusi taso Uuden tason lisääminen: x a y x a z Algoritmit 2 Kevät 2019 Luento 5 Ti 26.3.2019 20/34

B-puun operaatiot: Lisäys Uuden tason lisääminen solmun x alapuolelle: Olkoon a keskimmäinen alkio solmussa x Siirretään a:n vasemmalla puolella olevat alkiot uuteen solmuun y Siirretään a:n oikealla puolella olevat alkiot uuteen solmuun z Jos x on haarautumissolmu, siirretään myös vastaavat lapsiosoittimet Alkio a jää solmuun x Lisätään x:ään uudet lapsiosoittimet y:hyn ja z:aan Algoritmit 2 Kevät 2019 Luento 5 Ti 26.3.2019 21/34

B-puun operaatiot: Lisäys lisää(x, k, v) Jos juurisolmu x on täysi Lisätään uusi taso (ks. edellä) Kutsutaan lisää_ei_täysi(x, k, v) Uuden tason lisääminen kasvattaa puun korkeutta Algoritmit 2 Kevät 2019 Luento 5 Ti 26.3.2019 22/34

B-puun operaatiot: Poisto Alkion poisto: Aloitetaan poistettavan alkion etsintä juurisolmusta Pidetään huoli, että mikään solmu ei tule liian vajaaksi Tarvittaessa alkioita siirretään haarautumissolmusta sen lapsisolmuun ja päinvastoin Tarvittaessa täsmälleen puoliksi täysiä sisarussolmuja yhdistetään yhdeksi solmuksi Lopetetaan kun alkio on poistettu, tai kun todetaan että alkiota ei ole puussa Algoritmit 2 Kevät 2019 Luento 5 Ti 26.3.2019 23/34

B-puun operaatiot: Poisto Jos hakupolulla puoliksi täysi solmu, alkioita siirretään tai solmuja yhdistetään ennen kuin jatketaan Poistettava alkio lehtisolmussa: Poistetaan alkio (solmu ei tule vajaaksi) Poistettava alkio haarautumissolmussa: Etsitään poistettavan alkion edeltäjä tai seuraaja Poistetaan edeltäjä/seuraaja puusta rekursiivisesti Korvataan poistettava alkio edeltäjällä/seuraajalla Tai: Yhdistetään lapsisolmuja ennen kuin jatketaan Algoritmit 2 Kevät 2019 Luento 5 Ti 26.3.2019 24/34

B-puun operaatiot: Poisto Hakupolulla on päästy solmuun x Mutta seuraava solmu y on puoliksi täysi Alkioiden siirto: x a y b z x b y a z (Vastaavasti, jos z on y:n vasemmalla puolella) Algoritmit 2 Kevät 2019 Luento 5 Ti 26.3.2019 25/34

B-puun operaatiot: Poisto Alkioiden siirto: Jos y on puoliksi täysi, mutta sen oikealla (vasemmalla) välittömällä sisarussolmulla z on ainakin yksi alkio yli minimin: Siirretään alkio a solmusta x solmun y viimeiseksi (ensimmäiseksi) alkioksi Siirretään a:n tilalle solmun z ensimmäinen (viimeinen) alkio b Jos y ja z haarautumissolmuja, siirretään myös solmun z ensimmäinen (viimeinen) lapsiosoitin y viimeiseksi (ensimmäiseksi) lapsiosoittimeksi Algoritmit 2 Kevät 2019 Luento 5 Ti 26.3.2019 26/34

B-puun operaatiot: Poisto Hakupolulla on päästy solmuun x Mutta seuraava solmu y ja sen välittömät sisarussolmut puoliksi täysiä Solmujen yhdistäminen: y x a z y x a (Vastaavasti, jos z on y:n vasemmalla puolella) Algoritmit 2 Kevät 2019 Luento 5 Ti 26.3.2019 27/34

B-puun operaatiot: Poisto Solmujen yhdistäminen: Jos y ja sen välittömät sisarussolmut puoliksi täysiä: Siirretään z:n alkiot solmuun y alkioiden järjestys säilyttäen Jos z haarautumissolmu, siirretään myös vastaavat lapsiosoittimet Siirretään alkio a solmusta x yhdistetyn solmun keskimmäiseksi alkioksi Poistetaan ylimääräinen lapsiosoitin solmusta x Algoritmit 2 Kevät 2019 Luento 5 Ti 26.3.2019 28/34

B-puun operaatiot: Poisto Avainta k vastaavan alkion edeltäjä: Alkio, jonka avain k on k:ta lähinnä pienempi Suurin puussa oleva avain k siten, että k < k Siirrytään vasemmassa alipuussa jatkuvasti oikealle ja alaspäin niin pitkälle kuin päästään Avainta k vastaavan alkion seuraaja: Alkio, jonka avain k on k:ta lähinnä suurempi Pienin puussa oleva avain k siten, että k < k Siirrytään oikeassa alipuussa jatkuvasti vasemmalle ja alaspäin niin pitkälle kuin päästään Huom: Edeltäjä/seuraaja täytyy poistaa rekursiivisesti Algoritmit 2 Kevät 2019 Luento 5 Ti 26.3.2019 29/34

B-puun operaatiot: Poisto poista(x, k) Jos x on lehtisolmu Jos k = x.key[i] jollain i, poistetaan alkio Muuten palautetaan tieto: ei löydy Muuten x on haarautumissolmu, tehdään seuraavaa: Jos x ei sisällä avainta k vastaavaa alkiota Etsitään y = x.child[i], jossa alkion pitäisi olla Jos y puoliksi täysi Siirretään alkioita tai yhdistetään solmuja (ks. edellä) Kutsutaan poista(y, k) (Jatkuu) Algoritmit 2 Kevät 2019 Luento 5 Ti 26.3.2019 30/34

B-puun operaatiot: Poisto (Jatkuu, x on haarautumissolmu) Jos x sisältää avainta k vastaavan alkion a Olkoon y alkiota a edeltävä lapsisolmu, ja z alkiota seuraava lapsisolmu Jos y:ssä ainakin yksi alkio yli minimin Etsitään a:n edeltäjä alipuusta y Poistetaan edeltäjä rekursiivisesti, eli kutsutaan poista(y, k ) Sijoitetaan edeltäjä a:n tilalle solmuun x (Jatkuu) Algoritmit 2 Kevät 2019 Luento 5 Ti 26.3.2019 31/34

B-puun operaatiot: Poisto (Jatkuu, x on haarautumissolmu) Jos y puoliksi täysi, mutta z:ssä ainakin yksi alkio yli minimin Etsitään a:n seuraaja alipuusta z Poistetaan seuraaja rekursiivisesti, eli kutsutaan poista(z, k ) Sijoitetaan seuraaja a:n tilalle solmuun x Jos sekä y että z puoliksi täysiä Yhdistetään y ja z (ks. edellä) Kutsutaan poista(y, k) Algoritmit 2 Kevät 2019 Luento 5 Ti 26.3.2019 32/34

B-puun muunnelmia B+-puu: Kaikki varsinainen tieto lehtisolmuissa Haarautumissolmuissa vain avaimia ja osoittimia lapsisolmuihin Lehtisolmuissa osoittimet tietosisältöön Lehtisolmut linkitetty toisiinsa kahteen suuntaan linkitetyksi listaksi Mahdollistaa lehtisolmujen peräkkäiskäsittelyn Algoritmit 2 Kevät 2019 Luento 5 Ti 26.3.2019 33/34

B-puun muunnelmia B*-puu: Solmut vähintään 2/3 täysiä Täysiä solmuja ei halkaista välittömästi, vaan ensin siirretään alkioita jompaankumpaan sisarussolmuun Jos sisarussolmutkin täysiä, lisätään uusi solmu ja jaetaan kahden täyden solmun alkiot suunnilleen tasan kolmen solmun kesken Keskimääräinen täyttösuhde parempi kuin tavallisella B-puulla Algoritmit 2 Kevät 2019 Luento 5 Ti 26.3.2019 34/34