14 Tasapainotetut puurakenteet

Samankaltaiset tiedostot
1.1 Tavallinen binäärihakupuu

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

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.

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

Algoritmit 2. Luento 6 Ke Timo Männikkö

Algoritmit 2. Luento 6 To Timo Männikkö

Algoritmit 1. Luento 7 Ti Timo Männikkö

Binäärihaun vertailujärjestys

Algoritmit 2. Luento 5 Ti Timo Männikkö

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

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

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

Kierros 4: Binäärihakupuut

CS-A1140 Tietorakenteet ja algoritmit

9.3 Algoritmin valinta

Algoritmit 2. Luento 2 To Timo Männikkö

Tietorakenteet, laskuharjoitus 7, ratkaisuja

Algoritmit 2. Luento 2 Ke Timo Männikkö

Algoritmit 2. Luento 5 Ti Timo Männikkö

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

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

Algoritmit 2. Luento 7 Ti Timo Männikkö

A TIETORAKENTEET JA ALGORITMIT

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

1 Puu, Keko ja Prioriteettijono

7. Tasapainoitetut hakupuut

Tietorakenteet, laskuharjoitus 6,

Algoritmit 2. Luento 4 To Timo Männikkö

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

B + -puut. Kerttu Pollari-Malmi

4 Tehokkuus ja algoritmien suunnittelu

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

1.1 Pino (stack) Koodiluonnos. Graafinen esitys ...

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

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

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

Algoritmit 1. Luento 6 Ke Timo Männikkö

Algoritmit 2. Luento 4 Ke Timo Männikkö

Tietorakenteet ja algoritmit Hakurakenteet Ari Korhonen

8. Puna-mustat puut ja tietorakenteiden täydentäminen

4. Joukkojen käsittely

Luku 8. Aluekyselyt. 8.1 Summataulukko

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

Datatähti 2019 loppu

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

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

Tarkennamme geneeristä painamiskorotusalgoritmia

811312A Tietorakenteet ja algoritmit, , Harjoitus 7, ratkaisu

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

Luku 4. Tietorakenteet funktio-ohjelmoinnissa. 4.1 Äärelliset kuvaukset

Algoritmit 2. Luento 9 Ti Timo Männikkö

Algoritmit 2. Demot Timo Männikkö

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

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

Algoritmit 1. Demot Timo Männikkö

2. Seuraavassa kuvassa on verkon solmujen topologinen järjestys: x t v q z u s y w r. Kuva 1: Tehtävän 2 solmut järjestettynä topologisesti.

Algoritmit 2. Luento 3 Ti Timo Männikkö

13 Lyhimmät painotetut polut

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

Algoritmit 2. Luento 3 Ti Timo Männikkö

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

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

Algoritmit 1. Demot Timo Männikkö

Algoritmi on periaatteellisella tasolla seuraava:

811312A Tietorakenteet ja algoritmit II Perustietorakenteet

Algoritmit 1. Luento 8 Ke Timo Männikkö

1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa:

58131 Tietorakenteet (kevät 2009) Harjoitus 11, ratkaisuja (Topi Musto)

Algoritmit 2. Demot Timo Männikkö

TIE Tietorakenteet ja algoritmit 261

811312A Tietorakenteet ja algoritmit III Lajittelualgoritmeista

58131 Tietorakenteet Erilliskoe , ratkaisuja (Jyrki Kivinen)

Fibonacci-kasoilla voidaan toteuttaa samat operaatiot kuin binomikasoilla.

Pikalajittelu: valitaan ns. pivot-alkio esim. pivot = oikeanpuoleisin

Algoritmit 2. Luento 10 To Timo Männikkö

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

Algoritmit 1. Demot Timo Männikkö

Algoritmit 1. Luento 5 Ti Timo Männikkö

Algoritmit 1. Luento 12 Ke Timo Männikkö

Tämä on helpompi ymmärtää, kun tulkitaan keko täydellisesti tasapainotetuksi binääripuuksi, jonka juuri on talletettu taulukon paikkaan

Algoritmit 2. Luento 9 Ti Timo Männikkö

Kysymyksiä koko kurssista?

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

D B. Harvat hakemistot. Harvat hakemistot

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

Ohjelmoinnin perusteet Y Python

Vasen johto S AB ab ab esittää jäsennyspuun kasvattamista vasemmalta alkaen:

A TIETORAKENTEET JA ALGORITMIT KORVAAVAT HARJOITUSTEHTÄVÄT 3, DEADLINE KLO 12:00

4. Perustietorakenteet

811312A Tietorakenteet ja algoritmit V Verkkojen algoritmeja Osa 2 : Kruskalin ja Dijkstran algoritmit

TIE Tietorakenteet ja algoritmit 25

Algoritmit 1. Luento 12 Ti Timo Männikkö

6. Sanakirjat. 6. luku 298

58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe malliratkaisut ja arvosteluperusteet

9 Erilaisia tapoja järjestää

Paikkatiedon hallinta ja analyysi 4. Paikkatiedon indeksointi (jatkoa)

Stabiloivat synkronoijat ja nimeäminen

Paikkatiedon hallinta ja analyysi 4. Paikkatiedon indeksointi

811312A Tietorakenteet ja algoritmit, , Harjoitus 6, Ratkaisu

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

Transkriptio:

TIE-20100 Tietorakenteet ja algoritmit 308 14 Tasapainotetut puurakenteet Binäärihakupuu toteuttaa kaikki dynaamisen joukon operaatiot O(h) ajassa Kääntöpuolena on, että puu voi joskus litistyä listaksi, jolloin tehokkuus menetetään (O(n)) Tässä luvussa käsitellään tapoja pitää huolta siitä, ettei litistymistä käy Ensin opitaan tasapainoitus puna-mustan puun invarianttia ylläpitämällä Lopuksi vilkaistaan muista tasapainotetuista binäärihakupuista Splay- ja AVL-puita

TIE-20100 Tietorakenteet ja algoritmit 309 14.1 Puna-musta binäärihakupuu Puna-mustat puut ovat tasapainotettuja binäärihakupuita. Ne tekevät lisäysten ja poistojen yhteydessä tasapainotustoimenpiteitä, jotka takaavat, ettei haku ole koskaan tehoton vaikka alkiot olisikin lisätty puuhun epäsuotuisassa järjestyksessä. puna-musta puu ei voi koskaan litistyä listaksi, kuten perusbinäärihakupuu Kuva 23: Punamustapuu (via Wikipedia, c Colin M.L. Burnett (CC BY-SA 3.0))

TIE-20100 Tietorakenteet ja algoritmit 310 Puna-mustien puiden perusidea: jokaisessa solmussa on yksi lisäbitti: väri (colour) arvot punainen ja musta muut kentät ovat vanhat tutut key, left, right ja p jätämme oheisdatan näyttämättä, jotta pääideat eivät hukkuisi yksityiskohtien taakse värikenttien avulla ylläpidetään puna-mustan puun invarianttia, joka takaa, että puun korkeus on aina kertaluokassa Θ(lg n)

TIE-20100 Tietorakenteet ja algoritmit 311 Puna-mustien puiden invariantti: 1. Jos solmu on punainen, niin sillä joko ei ole lapsia, tai on kaksi lasta, ja ne molemmat ovat mustia. 2. Jokaiselle solmulle pätee: jokainen solmusta alas 1- tai 0-lapsiseen solmuun vievä polku sisältää saman määrän mustia solmuja. 3. Juuri on musta. Solmun x musta-korkeus (black-height) bh(x) on siitä alas 1- tai 0-lapsiseen solmuun vievällä polulla olevien mustien solmujen määrä. invariantin osan 3 mukaisesti jokaisen solmun mustakorkeus on yksikäsitteinen jokaisella vaihtoehtoisella polulla on sama määrä mustia solmuja koko puun mustakorkeus on sen juuren mustakorkeus

TIE-20100 Tietorakenteet ja algoritmit 312 Puna-mustan puun maksimikorkeus merkitään korkeus = h ja solmujen määrä = n kunkin juuresta lehteen vievän polun solmuista vähintään puolet ( h 2 + 1) ovat mustia (invariantin osat 1 ja 3) jokaisella juuresta lehteen vievällä polulla on saman verran mustia solmuja (invariantin osa 2) ainakin h 2 + 1 ylintä tasoa täysiä n 2 h 2 h 2 lg n Invariantti siis todellakin takaa puun korkeuden pysymisen logaritmisena puun alkioiden määrään nähden. Dynaamisen joukon operaatiot SEARCH, MINIMUM, MAXIMUM, SUCCESSOR ja PREDECESSOR saadaan toimimaan puna-mustille puille ajassa O(lg n). binäärihakupuulle operaatiot toimivat ajassa O(h), ja puna-musta puu on binäärihakupuu, jolle h = Θ(lg n)

TIE-20100 Tietorakenteet ja algoritmit 313 Puna-mustien puiden ylläpitämiseen ei kuitenkaan voida käyttää samoja lisäys- ja poistoalgoritmeja kuin tavallisilla binäärihakupuilla, koska ne saattavat rikkoa invariantin. Niiden sijaan käytetään algoritmeja RB-INSERT ja RB-DELETE. operaatiot RB-INSERT ja RB-DELETE perustuvat kiertoihin (rotation) kiertoja on kaksi: vasemmalle ja oikealle ne muuttavat puun rakennetta, mutta säilyttävät binäärihakupuiden perusominaisuuden kaikille solmuille A x B y y x C A B C kierto vasemmalle olettaa, että solmut x ja y ovat olemassa kierto oikealle vastaavasti left ja right vaihtaneet paikkaa

TIE-20100 Tietorakenteet ja algoritmit 314 LEFT-ROTATE(T, x) 1 y := x right; x right := y left 2 if y left NIL then 3 y left p := x 4 y p := x p 5 if x p = NIL then 6 T.root := y 7 else if x = x p left then 8 x p left := y 9 else 10 x p right := y 11 y left := x; x p := y molempien kiertojen ajoaika on Θ(1) ainoastaan osoittimia muutetaan

TIE-20100 Tietorakenteet ja algoritmit 315 Lisäyksen perusidea ensin uusi solmu lisätään kuten tavalliseen binäärihakupuuhun sitten lisätty väritetään punaiseksi mitä puna-mustien puiden perusominaisuuksia näin tehty lisäys voi rikkoa?

TIE-20100 Tietorakenteet ja algoritmit 316 Invariantin osa 1 rikkoutuu lisätyn solmun osalta, jos sen isä on punainen; muuten se ei voi rikkoutua. 2 ei rikkoudu, koska minkään solmun alla olevien mustien solmujen määrät ja sijainnit eivät muutu, ja lisätyn alla ei ole solmuja. 3 rikkoutuu, jos puu oli alun perin tyhjä.

TIE-20100 Tietorakenteet ja algoritmit 317 korjataan puu seuraavasti: ominaisuutta 2 pilaamatta siirretään 1:n rike ylöspäin kunnes se katoaa lopuksi 3 korjataan värittämällä juuri mustaksi (ei voi pilata ominaisuuksia 1 ja 2) 1:n rike = sekä solmu että sen isä ovat punaisia siirto tapahtuu värittämällä solmuja ja tekemällä kiertoja

TIE-20100 Tietorakenteet ja algoritmit 318 RB-INSERT(T, x) 1 TREE-INSERT(T, x) 2 x colour := RED (suoritetaan silmukkaa kunnes rike on hävinnyt tai ollaan saavutettu juuri) 3 while x T.root and x p colour = RED do 4 if x p = x p p left then 5 y := x p p right 6 if y NIL and y colour = RED then (siirretään rikettä ylöspäin) 7 x p colour := BLACK 8 y colour := BLACK 9 x p p colour := RED 10 x := x p p 11 else (siirto ei onnistu korjataan rike) 12 if x = x p right then 13 x := x p; LEFT-ROTATE(T, x) 14 x p colour := BLACK 15 x p p colour := RED 16 RIGHT-ROTATE(T, x p p) 17 else... sama kuin rivit 5... 16 paitsi left ja right vaihtaneet paikkaa 30 T.root colour := BLACK (väritetään juuri mustaksi)

TIE-20100 Tietorakenteet ja algoritmit 319 x x >p >p x >p A A x B B y C C Ominaisuuden 1 rikkeen siirto ylöspäin: solmu x ja sen isä ovat molemmat punaisia. myös solmun x setä on punainen ja isoisä musta. rike siirretään ylöspäin värittämällä sekä x:n setä että isä mustiksi ja isoisä punaiseksi. Korjauksen jälkeen: ominaisuus 1 saattaa olla edelleen rikki solmu x ja sen isä saattavat molemmat olla punaisia ominaisuus 2 ei rikkoudu kaikkien polkujen mustien solmujen määrä pysyy samana ominaisuus 3 saattaa rikkoutua jos ollaan noustu juureen asti, se on saatettu värittää punaiseksi

TIE-20100 Tietorakenteet ja algoritmit 320 x >p >p x >p y A x B C D Mikäli punaista setää ei ole olemassa, rikettä ei voi siirtää ylöspäin vaan se täytyy poistaa käyttäen monimutkaisempaa menetelmää: x >p >p Varmistetaan ensin, että x on isänsä vasen lapsi tekemällä tarvittaessa kierto vasemmalle. x >p y x D C A B

TIE-20100 Tietorakenteet ja algoritmit 321 x >p x >p >p y tämän jälkeen väritetään x:n isä mustaksi ja isoisä punaiseksi, ja suoritetaan kierto oikealle x C D isoisä on varmasti musta, koska muuten puussa olisi ollut kaksi punaista solmua päällekkäin jo ennen lisäystä A x B Korjauksen jälkeen: puussa ei enää ole päällekkäisiä punaisia solmuja korjausoperaatiot yhdessä eivät riko 2. ominaisuutta puu on ehjä ja korjausalgoritmin suorittaminen voidaan lopettaa A B C D

TIE-20100 Tietorakenteet ja algoritmit 322 Poistoalgoritmin yleispiirteet ensin solmu poistetaan kuten tavallisesta binäärihakupuusta w osoittaa poistettua solmua jos w oli punainen tai puu tyhjeni kokonaan, puna-musta-ominaisuudet säilyvät voimassa ei tarvitse tehdä muuta muussa tapauksessa korjataan puu RB-DELETE-FIXUPin avulla aloittaen w:n (mahdollisesta) lapsesta x ja sen isästä w p TREE-DELETE takaa, että w:llä oli enintään yksi lapsi RB-DELETE(T, z) 1 w := TREE-DELETE(T, z) 2 if w colour = BLACK and T.root NIL then 3 if w left NIL then 4 x := w left 5 else 6 x := w right 7 RB-DELETE-FIXUP(T, x, w p) 8 return w

TIE-20100 Tietorakenteet ja algoritmit 323 RB-DELETE-FIXUP(T, x, y) 1 while x T.root and (x = NIL or x colour = BLACK) do 2 if x = y left then 3 w := y right 4 if w colour = RED then 5 w colour := BLACK; y colour := RED 6 LEFT-ROTATE(T, y); w := y right 7 if (w left = NIL or w left colour = BLACK) and (w right = NIL or w right colour = BLACK) then 8 w colour := RED; x := y 9 else 10 if w right = NIL or w right colour = BLACK then 11 w left colour := BLACK 12 w colour := RED 13 RIGHT-ROTATE(T, w); w := y right 14 w colour := y colour; y colour := BLACK 15 w right colour := BLACK; LEFT-ROTATE(T, y) 16 x := T.root 17 else... sama kuin rivit 3... 16 paitsi left ja right vaihtaneet paikkaa 32 y := y p 33 x colour := BLACK

TIE-20100 Tietorakenteet ja algoritmit 324 14.2 AVL-puut ja Splay-puut AVL puu (Adelson-Velsky, Landis mukaan) on binäärihakupuu, jossa jokaisella solmulla on tasapainokerroin: 0, +1, tai -1, kun tasapainossa. kerroin määräytyy solmun oikean ja vasemman alipuun korkeuksien erotuksesta. Kun uuden solmun lisäys tekee AVL-puusta epätasapainoisen, puu palautetaan tasapainoiseksi tekemällä rotaatioita.

TIE-20100 Tietorakenteet ja algoritmit 325 Mahdollisia rotaatioita on neljä: Oikealle Vasemmalle Kaksois-rotaatio vasen-oikea Kaksois-rotaatio oikea-vasen 3 3 2 R 2 1 LR 2 1 1 3 2 1 3 1 2 3 L 1 2 3 1 2 3 RL 1 2 3

TIE-20100 Tietorakenteet ja algoritmit 326 Splay puu on binäärihakupuu, jossa lisäominaisuutena viimeksi haetut alkiot ovat nopeita hakea uudelleen. Splay-operaatio suoritetaan solmulle haun yhteydessä. Tämä ns. splay-askelien sekvenssi siirtää solmun askel askeleelta lähemmäksi juurta ja lopulta juureksi. Zig-askel:

TIE-20100 Tietorakenteet ja algoritmit 327 Zig-Zig-askel: Zig-Zag-askel:

TIE-20100 Tietorakenteet ja algoritmit 328 15 Monihaaraiset puut Binääripuissa solmuilla on 0-2 lasta. Puurakenne on kuitenkin mahdollista toteuttaa haarautumaan hyvinkin paljon Tutustutaan näistä merkkijonojen käsittelyyn tarkoitettuun merkkijonopuuhun (Trie) ja voimakkaasti haarautuvaan puurakenteeseen (B-puu)

TIE-20100 Tietorakenteet ja algoritmit 329 15.1 Merkkijonopuu (trie) Kun dynaamisen joukon alkiot ovat merkkijonoja, soveltuu merkkijonopuu binääripuuta paremmin niiden tallentamiseen. Merkkijonopuussa solmut ovat merkkejä. Kukin solmu edustaa siihen juuresta johtavan polun varrelta löytyvää merkkijonoa. solmun edustama merkkijono on siis sen isän edustama merkkijono + solmun sisältämä merkki solmun edustama merkkijono on kaikkien sen lasten edustamien merkkijonojen alkuosa Lisäksi kussakin solmussa on yksi bitti, joka kertoo, onko solmun edustama merkijono mukana joukossa vai ei.

TIE-20100 Tietorakenteet ja algoritmit 330 a b T a b F a b F a b T a b F a b T a b T

TIE-20100 Tietorakenteet ja algoritmit 331 Kuvan esimerkkipuun aakkosto on {a, b}. koska juurisolmun totuusarvo on true, kuuluu sen edustama tyhjä merkkijono ɛ mukaan joukkoon pelkät a ja b eivät kuulu joukkoon, koska ne on merkitty falsella merkkijonot aa, aba ja ba kuuluvat joukkoon TRIE-SEARCH(p, A, n) 1 for i := 1 to n do (käydään lisättävän sanan merkkejä läpi) 2 if p C[A[i]] = NIL then (jos valittu haara päättyy...) 3 return FALSE (...tiedetään, ettei sanaa löydy) 4 p := p C[A[i]] (siirrytään alaspäin) 5 return p bit (palautetaan löydetyn solmun totuusarvo) Etsittävä merkkijono on taulukossa A[1,, n] ja p osoittaa puun juureen. Solmut sisältävät taulukon C, jossa on osoitin C[a] jokaista merkkijonon mahdollista merkkiä a kohti, sekä bittikentän bit, joka ilmoittaa, kuuluuko merkkijono joukkoon vai ei.

TIE-20100 Tietorakenteet ja algoritmit 332 Etsinnässä puuta laskeudutaan alaspäin kunnes kohdataan NIL-osoitin, jolloin sana ei ole puussa tai sana loppuu, jolloin palautetaan bit-kentän arvo TRIE-INSERT(p, A, n) 1 for i := 1 to n do (käydään lisättävän sanan merkkejä läpi) 2 if p C[A[i]] = NIL then (tarvittaessa lisätään uusi solmu) 3 varaa uusi solmutietue ja alusta kunkin osoittimen uusi C[i] arvoksi NIL ja bit FALSE 4 p C[A[i]] := uusi (linkitetään uusi solmu paikalleen) 5 p := p C[A[i]] (siirrytään alaspäin) 6 p bit := TRUE (asetetaan viimeisen solmun totuusarvoksi TRUE) Lisättäessä uutta alkiota puuhun laskeudutaan uuden merkkijonon mukaisesti kohti lehtisolmuja. jos kohdataan NIL-osoitin luodaan uusi solmu kun ollaan päästy sanan loppuun, käännetään solmun bit-kenttä arvoon TRUE sen merkiksi, että sana kuuluu joukkoon

TIE-20100 Tietorakenteet ja algoritmit 333 TRIE-DELETE(p, A, n) 1 for i := 1 to n do (käydään poistettavan sanan merkkejä läpi) 2 if p C[A[i]] = NIL then (jos valittu haara päättyy...) 3 return FALSE (...tiedetään, ettei sanaa löydy) 4 P [i] := p (otetaan solmun i isän osoite talteen) 5 p := p C[A[i]] (siirrytään alaspäin) 6 p bit := FALSE (asetetaan löydetyn solmun totuusarvoksi FALSE) 7 i := n 8 while i > 1 and Leafnode(p) and p bit = FALSE do 9 vapautetaan p:n osoittama alkio 10 p := P [i] (jatketaan vapauttamista talteen otetusta isästä) 11 p C[A[i]] = NIL (nollataan osoitin poistettuun solmuun) 12 i := i 1 13 return TRUE Puusta etsitään vapautettava merkkijono ja poistetaan se joukosta asettamalla bit arvoon FALSE.

TIE-20100 Tietorakenteet ja algoritmit 334 Tämän jälkeen poistetaan ne solmut, jotka poisto on tehnyt turhiksi. koska trien solmuissa ei ole parent-osoittimia, talletetaan taulukkoon P laskeutumisen aikana kohdatut osoittimet Dynaamisen joukon operaatiot ovat trielle erittäin tehokkaita Riippumatta talletettujen merkkijonojen määrästä operaatiot ovat enintään lineaarisia käsiteltävän merkkijonon pituuteen nähden. Haittapuolena on runsas muistinkäyttö erityisesti jos erilaisten mahdollisten merkkien määrä on suuri. toisaalta jos talletettavilla merkkijonoilla on pitkiä yhteisiä alkuosia, tilaa jopa säästyy, koska yhteiset osat talletetaan vain kerran

TIE-20100 Tietorakenteet ja algoritmit 335 Merkkijonopuu sallii myös siihen talletettujen merkkijonojen tulostamisen aakkosjärjestyksessä tehokkaasti. Esimerkiksi matkapuhelimissa yleisesti käytetty ennakoiva tekstinsyöttö T9, on toteutettu trierakenteen avulla. erona tässä esitettyyn malliin on, että saman näppäimen takana olevat kirjaimet kuuluvat samaan solmuun lisäksi kullekin kirjaimelle on laskettu todennäköisyys, jonka perusteella päätetään, mikä merkkijono painalluksista todennäköisimmin muodostuu

TIE-20100 Tietorakenteet ja algoritmit 336 15.2 B-puut B-puut ovat nopeasti haarautuvia hakupuita, jotka on tarkoitettu isojen dynaamisten joukkojen tallettamiseen levylle. tavoitteena pitää levyltä hakujen / kirjoittamisten määrä mahdollisimman pienenä kaikki lehdet ovat samalla syvyydellä yksi solmu täyttää yhden levylohkon mahdollisimman tarkkaan B-puu haarautuu yleensä nopeasti: jokaisella solmulla kymmeniä, satoja tai tuhansia lapsia käytännössä B-puut ovat hyvin matalia puu pidetään tasapainossa vaihtelemalla solmun lasten määrää välillä t,..., 2t jollekin t N, t 2 jokaisella sisäsolmulla juurta lukuunottamatta on lapsia aina vähintään 1 2 maksimimäärästä

TIE-20100 Tietorakenteet ja algoritmit 337 B-puun avaimet jakavat hakualueen kuvan esittämällä tavalla. Haku B-puusta tapahtuu samaan tapaan kuin binäärihakupuustakin. lähdetään laskeutumaan juuresta kohti lehtiä jokaisessa solmussa valitaan se haara, jossa haetun alkion täytyy olla - haaroja vain on huomattavasti enemmän

TIE-20100 Tietorakenteet ja algoritmit 338 Lisäys B-puuhun edetään juuresta lehteen, ja matkan varrella jaetaan jokainen täysi solmu kahtia aina kun tullaan solmuun, sen isä ei ole täysi lopullinen lisäys tapahtuu lehteen jos juuri jaetaan, luodaan uusi juuri, jonka lapsiksi tulevat vanhan juuren puolikkaat B-puu kasvaa korkeutta vain juuria jakamalla tarvitaan vain yksi kulku alas puussa, eikä yhtään ylös B-puun solmun jako tapahtuu raivaamalla isään tilaan yhdelle avaimelle, minkä jälkeen jaettavan solmun keskimmäinen avain nostetaan saatuun tilaan. Loput avaimet jaetaan keskimmäistä avainta pienempien avainten solmuun ja suurempien avainten solmuun.

TIE-20100 Tietorakenteet ja algoritmit 339

TIE-20100 Tietorakenteet ja algoritmit 340 Poisto B-puusta on samantyyppinen operaatio kuin lisäys. edetään juuresta lehteen, ja aina ennen solmuun menoa huolehditaan, että siinä on vähintään minimimäärä + 1 avainta tämä takaa, että avainten määrä säilyy laillisena, vaikka yksi avaimista poistettaisikin kun etsitty avain löydetään, se poistetaan, ja tarvittaessa solmu yhdistetään jommankumman sisaruksensa kanssa tämä on varmasti tehtävissä, koska isä-solmussa on vähintään yksi ylimääräinen avain jos lopputuloksen juurella on vain yksi lapsi, niin juuri poistetaan, ja sen lapsesta tehdään uusi juuri