Algoritmit 2. Luento 5 Ti Timo Männikkö

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

Algoritmit 2. Luento 6 Ke Timo Männikkö

Algoritmit 2. Luento 6 To Timo Männikkö

Algoritmit 2. Luento 2 To Timo Männikkö

Algoritmit 1. Luento 7 Ti 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ö

Algoritmit 1. Luento 8 Ke Timo Männikkö

Algoritmit 2. Luento 7 Ti Timo Männikkö

Algoritmit 2. Demot Timo Männikkö

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

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

Algoritmit 2. Luento 3 Ti Timo Männikkö

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

Algoritmit 2. Luento 3 Ti Timo Männikkö

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

Algoritmit 1. Luento 12 Ti Timo Männikkö

B + -puut. Kerttu Pollari-Malmi

Algoritmit 2. Luento 9 Ti Timo Männikkö

Tietorakenteet, laskuharjoitus 7, ratkaisuja

Algoritmit 2. Luento 14 Ke Timo Männikkö

Algoritmit 1. Luento 12 Ke Timo Männikkö

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

A TIETORAKENTEET JA ALGORITMIT

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

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

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

Binäärihaun vertailujärjestys

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

Algoritmit 1. Luento 4 Ke Timo Männikkö

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

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

Algoritmit 2. Demot Timo Männikkö

7. Tasapainoitetut hakupuut

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

4. Joukkojen käsittely

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

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

1.1 Tavallinen binäärihakupuu

Algoritmit 1. Luento 1 Ti Timo Männikkö

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

Algoritmit 1. Luento 10 Ke Timo Männikkö

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

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

Algoritmit 2. Luento 11 Ti Timo Männikkö

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

Algoritmit 2. Luento 12 To Timo Männikkö

Algoritmit 2. Luento 9 Ti Timo Männikkö

Algoritmit 2. Luento 11 Ti Timo Männikkö

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

Paikkatiedon käsittely 5. Paikkatiedon indeksointi

Algoritmit 1. Luento 14 Ke Timo Männikkö

Algoritmit 2. Luento 13 Ti Timo Männikkö

Kierros 4: Binäärihakupuut

Algoritmit 1. Luento 9 Ti Timo Männikkö

Algoritmit 2. Luento 10 To Timo Männikkö

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

Algoritmit 2. Luento 13 Ti Timo Männikkö

CS-A1140 Tietorakenteet ja algoritmit

Algoritmit 1. Luento 13 Ti Timo Männikkö

Algoritmit 2. Luento 12 Ke Timo Männikkö

811312A Tietorakenteet ja algoritmit, , Harjoitus 7, ratkaisu

Algoritmit 1. Luento 13 Ma Timo Männikkö

Algoritmit 2. Luento 13 Ti Timo Männikkö

Algoritmit 2. Luento 14 To Timo Männikkö

Algoritmit 1. Luento 3 Ti Timo Männikkö

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

Algoritmit 1. Luento 10 Ke Timo Männikkö

Algoritmit 1. Luento 11 Ti Timo Männikkö

Tietorakenteet, laskuharjoitus 6,

811312A Tietorakenteet ja algoritmit II Perustietorakenteet

Tiraka, yhteenveto tenttiinlukua varten

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

Hakemistotyypeistä. Hakemistorakenteet. Hakemiston toteutuksesta. Hakemiston toteutuksesta

Algoritmit 1. Luento 2 Ke Timo Männikkö

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

Luku 8. Aluekyselyt. 8.1 Summataulukko

Kysymyksiä koko kurssista?

58131 Tietorakenteet Erilliskoe , ratkaisuja (Jyrki Kivinen)

14 Tasapainotetut puurakenteet

B-puu. 3.3 Dynaamiset hakemistorakenteet

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 9. marraskuuta 2009

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

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

Tietokannan indeksointi: B puun ja hajautusindeksin tehokkuus

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

Algoritmi on periaatteellisella tasolla seuraava:

Johdatus graafiteoriaan

Fibonacci-kasoilla voidaan toteuttaa samat operaatiot kuin binomikasoilla.

D B. Harvat hakemistot. Harvat hakemistot

Paikkatiedon hallinta ja analyysi 4. Paikkatiedon indeksointi

Algoritmit 2. Luento 10 To Timo Männikkö

811312A Tietorakenteet ja algoritmit III Lajittelualgoritmeista

Tietorakenteet ja algoritmit Hakurakenteet Ari Korhonen

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

Transkriptio:

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 28.3.2017 3/29

B-puu B-puut ovat tasapainoisia hakupuurakenteita Hyvin suuria tietomääriä ei välttämättä voida käsitellä keskusmuistissa yhtenä kokonaisuutena Tietoa joudutaan siirtämään keskusmuistin ja ulkoisten muistien (levymuistit) välillä Tarkoituksena minimoida ulkoiseen muistiin kohdistuvien I/O-operaatioiden lukumäärä (sillä ne ovat hitaita) Käytetään mm. suurten tietokantojen indekseinä suorasaannin toteuttamiseksi Algoritmit 2 Kevät 2017 Luento 5 Ti 28.3.2017 4/29

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] Algoritmit 2 Kevät 2017 Luento 5 Ti 28.3.2017 5/29

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,..., 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 2017 Luento 5 Ti 28.3.2017 6/29

B-puu Astetta m oleva B-puu: Arvo m Solmujen minimi- ja maksimikoko Jokaisen solmun, paitsi juurisolmun, tulee olla vähintään puoliksi täynnä: Haarautumissolmussa alkioita m 1... 2m 1 osoittimia m... 2m Lehtisolmussa alkioita m 1... 2m 1 Jos juurisolmu on haarautumissolmu, sillä tulee olla vähintään 2 lasta Algoritmit 2 Kevät 2017 Luento 5 Ti 28.3.2017 7/29

B-puu Esimerkiksi m = 2: Alkioita solmussa 1, 2, tai 3 Osoittimia haarautumissolmussa 2, 3 tai 4 2-3-4-puu Esimerkiksi m = 3: Alkioita solmussa 2 5 Osoittimia haarautumissolmussa 3 6 Algoritmit 2 Kevät 2017 Luento 5 Ti 28.3.2017 8/29

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 2017 Luento 5 Ti 28.3.2017 9/29

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 2017 Luento 5 Ti 28.3.2017 10/29

B-puun korkeus Todistus jatkuu: Yleisesti tasolla h vähintään 2m h 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 2017 Luento 5 Ti 28.3.2017 11/29

B-puun operaatioiden vaativuus Pahimmassa tapauksessa käydään läpi polku juurisolmusta lehtisolmuun Puun korkeus määrää operaatioiden aikavaativuuden Edellinen lause Aikavaativuus Θ(log n) Algoritmit 2 Kevät 2017 Luento 5 Ti 28.3.2017 12/29

B-puun operaatiot: Haku Alkion haku: Aloitetaan juurisolmusta Etsitään avainta solmusta Jos alkio ei ole solmussa, siirrytään avainta vastaavaan alipuuhun Tarvittaessa jatketaan lehtisolmuun saakka Algoritmit 2 Kevät 2017 Luento 5 Ti 28.3.2017 13/29

B-puun operaatiot: Haku hae(x, k) Jos x on haarautumissolmu Jos löytyy i, jolla k = x.key[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 2017 Luento 5 Ti 28.3.2017 14/29

B-puun operaatiot: Haku (Jatkuu) Muuten x on lehtisolmu Jos löytyy i, jolla k = x.key[i], palautetaan haluttu tieto Muuten palautetaan tieto: ei löydy Algoritmit 2 Kevät 2017 Luento 5 Ti 28.3.2017 15/29

B-puun operaatiot: Lisäys Alkion lisäys: Kuljetaan juurisolmusta kohti avainta vastaavaa lehtisolmua Jos polulla täysi solmu, halkaistaan se kahdeksi solmuksi Halkaisussa keskimmäisen alkion vasemmalla puolella olevat alkiot jäävät solmuun, oikealla puolella olevat siirretään uuteen solmuun Jos juurisolmu täynnä, muodostetaan sen alkioista uusi taso juuren alapuolelle Algoritmit 2 Kevät 2017 Luento 5 Ti 28.3.2017 16/29

B-puun operaatiot: Lisäys lisää_ei_täysi(x, k, v) Jos x on lehtisolmu Lisätään alkio (k, v) solmuun x järjestys säilyttäen Muuten x on haarautumissolmu Etsitään w = x.child[i], jonne alkio kuuluu Jos w on täysi, halkaistaan se ja lisätään alkio (ks. jäljempänä) Muuten w ei ole täysi, joten kutsutaan lisää_ei_täysi(w, k, v) Algoritmit 2 Kevät 2017 Luento 5 Ti 28.3.2017 17/29

B-puun operaatiot: Lisäys Solmun w halkaisu ja alkion lisääminen: Olkoon a keskimmäinen alkio solmussa w Siirretään a:n oikealla puolella olevat alkiot uuteen solmuun y Jos w on haarautumissolmu, siirretään myös vastaavat lapsiosoittimet Siirretään a ylöspäin solmuun x ja lisätään x:ään uusi lapsiosoitin y:hyn Jos k < a.key, niin lisää_ei_täysi(w, k, v) Muuten kutsutaan lisää_ei_täysi(y, k, v) Algoritmit 2 Kevät 2017 Luento 5 Ti 28.3.2017 18/29

B-puun operaatiot: Lisäys Solmun halkaisu: w x a w x a y Algoritmit 2 Kevät 2017 Luento 5 Ti 28.3.2017 19/29

B-puun operaatiot: Lisäys lisää(root, k, v) Jos x = root on täysi, lisätään uusi taso 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 Asetetaan x.child[1] = y ja x.child[2] = z Kutsutaan lisää_ei_täysi(x, k, v) Algoritmit 2 Kevät 2017 Luento 5 Ti 28.3.2017 20/29

B-puun operaatiot: Lisäys Uuden tason lisääminen: x a y x a z Algoritmit 2 Kevät 2017 Luento 5 Ti 28.3.2017 21/29

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äynnä olevia sisarussolmuja yhdistetään yhdeksi solmuksi Algoritmit 2 Kevät 2017 Luento 5 Ti 28.3.2017 22/29

B-puun operaatiot: Poisto poista(x, k) Jos x on lehtisolmu, poistetaan avainta k vastaava alkio x:stä Muuten x on haarautumissolmu, tehdään seuraavaa: Jos x ei sisällä avainta k vastaavaa alkiota Etsitään y = x.child[i], jonne alkio kuuluu Tarvittaessa siirretään alkioita tai yhdistetään solmuja (ks. jäljempänä) Kutsutaan poista(y, k) (Jatkuu) Algoritmit 2 Kevät 2017 Luento 5 Ti 28.3.2017 23/29

B-puun operaatiot: Poisto (Jatkuu) Jos x sisältää avainta k vastaavan alkion Olkoon y se x:n lapsi, joka edeltää k:ta Jos y:ssä ainakin yksi alkio yli minimin Etsitään k:n edeltäjä k alipuusta, jonka juuri on y Poistetaan k (rekursiivisesti) Sijoitetaan k:n tilalle k solmuun x (Jatkuu) Algoritmit 2 Kevät 2017 Luento 5 Ti 28.3.2017 24/29

B-puun operaatiot: Poisto (Jatkuu) Muuten y on täsmälleen puoliksi täynnä Olkoon z se x:n lapsi, joka seuraa k:ta Jos z:ssa ainakin yksi alkio yli minimin Etsitään k:n seuraaja k alipuusta, jonka juuri on z Poistetaan k (rekursiivisesti) Sijoitetaan k:n tilalle k solmuun x (Jatkuu) Algoritmit 2 Kevät 2017 Luento 5 Ti 28.3.2017 25/29

B-puun operaatiot: Poisto (Jatkuu) Muuten myös z on täsmälleen puoliksi täynnä Yhdistetään y ja z Poistetaan k (rekursiivisesti) Algoritmit 2 Kevät 2017 Luento 5 Ti 28.3.2017 26/29

B-puun operaatiot: Poisto Alkioiden siirto: Jos y on täsmälleen puoliksi täynnä ja toisella välittömällä sisarussolmulla z on ainakin yksi alkio yli minimin Siirretään yksi alkio x:stä y:hyn Siirretään yksi alkio z:sta x:ään Jos y on haarautumissolmu, siirretään myös vastaavat lapsiosoittimet Algoritmit 2 Kevät 2017 Luento 5 Ti 28.3.2017 27/29

B-puun operaatiot: Poisto Alkioiden siirto: Esimerkiksi, jos z on y:n oikealla puolella (Vastaavasti, jos z vasemmalla puolella) x a y b z x b y a z Algoritmit 2 Kevät 2017 Luento 5 Ti 28.3.2017 28/29

B-puun operaatiot: Poisto Solmujen yhdistäminen: Jos sekä y että molemmat välittömät sisarussolmut täsmälleen puoliksi täynnä, yhdistetään y toisen sisaruksen kanssa y x a z x a Algoritmit 2 Kevät 2017 Luento 5 Ti 28.3.2017 29/29