7. Tasapainoitetut hakupuut

Samankaltaiset tiedostot
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 7 Ti Timo Männikkö

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

Algoritmit 2. Luento 5 Ti Timo Männikkö

Binäärihaun vertailujärjestys

Algoritmit 2. Luento 2 To Timo Männikkö

Algoritmit 2. Luento 5 Ti Timo Männikkö

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

Algoritmit 2. Luento 2 Ke Timo Männikkö

Algoritmit 2. Luento 6 To Timo Männikkö

A TIETORAKENTEET JA ALGORITMIT

Algoritmit 2. Luento 4 To Timo Männikkö

Algoritmit 2. Luento 6 Ke Timo Männikkö

Algoritmit 2. Luento 4 Ke Timo Männikkö

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

Tietorakenteet, laskuharjoitus 7, ratkaisuja

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

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

Algoritmit 2. Luento 7 Ti Timo Männikkö

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

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

B + -puut. Kerttu Pollari-Malmi

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

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

Algoritmit 1. Luento 6 Ke Timo Männikkö

Algoritmit 1. Luento 8 Ke Timo Männikkö

6. Sanakirjat. 6. luku 298

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

Algoritmit 2. Luento 3 Ti Timo Männikkö

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

Algoritmit 2. Luento 3 Ti Timo Männikkö

Tietorakenteet ja algoritmit Hakurakenteet Ari Korhonen

Kierros 4: Binäärihakupuut

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

1.1 Tavallinen binäärihakupuu

Luku 8. Aluekyselyt. 8.1 Summataulukko

CS-A1140 Tietorakenteet ja algoritmit

14 Tasapainotetut puurakenteet

Tietorakenteet, laskuharjoitus 6,

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

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

10. Painotetut graafit

7. Tasapainoitetut hakupuut

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

Algoritmi on periaatteellisella tasolla seuraava:

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

6. Sanakirjat Sanakirjan abstrakti tietotyyppi

4. Joukkojen käsittely

Algoritmit 1. Luento 5 Ti Timo Männikkö

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

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

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

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

811312A Tietorakenteet ja algoritmit II Perustietorakenteet

811312A Tietorakenteet ja algoritmit, , Harjoitus 7, ratkaisu

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

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

Algoritmit 1. Luento 1 Ti Timo Männikkö

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

Algoritmit 1. Luento 12 Ke Timo Männikkö

1 Puu, Keko ja Prioriteettijono

10. Painotetut graafit

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

Algoritmit 1. Luento 2 Ke 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 1. Luento 12 Ti Timo Männikkö

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

puuta tree hierarkkinen hierarchical

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

Tietorakenteet ja algoritmit - syksy

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

1 Määrittelyjä ja aputuloksia

Algoritmit 2. Luento 9 Ti Timo Männikkö

Ratkaisu. Tulkitaan de Bruijnin jonon etsimiseksi aakkostossa S := {0, 1} sanapituudelle n = 4. Neljän pituisia sanoja on N = 2 n = 16 kpl.

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

9.3 Algoritmin valinta

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

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

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

Harjoitus 6 ( )

Jäsennysaiheesta lisää Täydentäviä muistiinpanoja TIEA241 Automaatit ja kieliopit, syksy 2016

Algoritmit 1. Luento 3 Ti Timo Männikkö

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

useampi ns. avain (tai vertailuavain) esim. opiskelijaa kuvaavassa alkiossa vaikkapa opintopistemäärä tai opiskelijanumero

Luku 7. Verkkoalgoritmit. 7.1 Määritelmiä

58131 Tietorakenteet Erilliskoe , ratkaisuja (Jyrki Kivinen)

Ohjelmoinnin perusteet Y Python

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

8. Lajittelu, joukot ja valinta

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

Paikkatiedon käsittely 6. Kyselyn käsittely

Tehtävien ratkaisut

4. Perustietorakenteet

Algoritmit 2. Luento 14 Ke Timo Männikkö

Ei-yhteydettömät kielet [Sipser luku 2.3]

TIEA341 Funktio-ohjelmointi 1, kevät 2008

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

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

Valitaan alkio x 1 A B ja merkitään A 1 = A { x 1 }. Perinnöllisyyden nojalla A 1 I.

811312A Tietorakenteet ja algoritmit III Lajittelualgoritmeista

Transkriptio:

7. Tasapainoitetut hakupuut Tässä luvussa jatketaan järjestetyn sanakirjan tarkastelua esittämällä kehittynyt puutietorakenne. Luvussa 7.1. esitetään monitiehakupuun käsite. Se on järjestetty puu, jonka jokaisessa sisäsolmussa voi olla useita tietoyksiköitä ja solmulla useita lapsia. Se on binäärihakupuun (luku 6.3.) yleistys. Yksi sen hyödyistä on sisäsolmujen määrän väheneminen binäärihakupuuhun verrattuna. Luvussa 7.2. tarkastellaan yksityiskohtaisesti määrättyä monitiehakupuuta, (2,4)-puuta, josta käytetään myös nimityksiä 2-4-puu tai 2-3-4-puu, koska sillä voi olla kahdesta neljään lasta. Kaikki sen lehdet ovat samalla tasolla. Se on tehokas hakua käsittäville operaatioille yltäen tällöin samaan kuin AVL-puu eli aikakompleksisuuteen O(log n). Näitä vielä kehittyneempiä puutyyppejä ovat puna-mustat puut (red-black tree) ja viistopuut (splay tree), joita ei tässä tarkastella. 7. luku 364

7.1. Monitiehakupuut Tässä kuvataan, kuinka monilapsisia monitiepuita käytetään hakupuina. Jälleen puuhun talletettava tieto esitetään tietoyksikköinä, pareina (k,x), jossa k onavainjaxtähän liittyvä alkio. Olkoon v järjestetyn puun solmu. Se on d-solmu, jos sillä on d lasta. Monitiehakupuu (multi-way search tree) on järjestetty puu T, jolla on seuraavat ominaisuudet (kuva 7.1.(a)): Jokaisella puun T sisäsolmulla on vähintään kaksi lasta. Jokainen puun T sisäsolmu sisältää kokoelman tietoyksiköitä muotoa (k,x), jossa k onavainjaxalkio. Jokainen puun Td-solmu, jonka lapset ovat v 1,, v d, sisältää d-1 tietoyksikköä (k 1, x 1 ),,(k d-1, x d-1 ), missä k 1 k d-1. Määritellään lisäksi k 0 =- ja k d =+. Jokaiselle tietoyksikölle (k,x), joka on talletettu solmuun v:n alipuuhun juureltaan v i, i = 1,, d, on k i-1 k k i. 7. luku 365

22 5 10 3 4 6 8 25 14 23 24 27 11 13 17 Kuva 7.1. (alku) (a) Monitiehakupuu T. 7. luku 366

Kun siis solmuun v ajatellaan talletetuksi joukko avaimia mukaanlukien kuvitteelliset erikoisavaimet k 0 =- ja k d =+ (rajoittimia), niin alipuuhun T juureltaan v i talletetun avaimen k täytyy olla solmuun talletetun kahden avaimen välissä. Tällöin d-lapsen solmussa on talletettuna d-1 varsinaista avainta, ja se muodostaa samalla perustan haun suorittamiseksi monitiepuussa. Jälleen puun lehdet ovat ainoastaan paikanpitäjiä. Täten binäärihakupuuta voidaan pitää monitiehakupuun erikoistapauksena. Toisessa ääripäässä yhden sisäsolmun monitiehakupuu voi käsittää useita tietoyksiköitä. Sillä, että käsittääkö monitiehakupuun sisäsolmu kaksi vai useampia lapsia, on seuraava suhde tietoyksiköiden määrän ja lehtisolmujen määrän välillä. Lause 7.1. Monitiehakupuulla, joka sisältää n tietoyksikköä, on n+1 lehteä. Perustelun voi esittää harjoitustehtävänä. 7. luku 367

Haku monitiepuussa Haku tapahtuu suoraviivaisesti monitiepuussa avaimella k. Lähdetään polulle puun juuresta (kuva 7.1.(b)-(c)). Oltaessa d-solmussa v haun aikana verrataan avainta k avaimiin k 1,, k d-1, jotka on talletettu solmuun v. Jos on k = k i jollekin i:lle, haku onnistuu. Muutoin jatketaan hakua solmun v lapsessa v i, missä k i-1 < k < k i. (määriteltiin k 0 =- ja k d =+ ). Jos tullaan lehteen, tiedetään, ettei haettavaa avainta ole puussa eli haku epäonnistuu. Monitiehakupuiden tietorakenteita Luvussa 4 esitettyjä yleisten puiden esitystapoja voidaan soveltaa myös monitiehakupuille. Lisätietona niissä pitää tallettaa kuhunkin solmuun pelkästään tietoyksiköiden (tai avainten) joukko. 7. luku 368

22 5 10 3 4 6 8 25 14 23 24 27 11 13 17 Kuva 7.1. (jatkoa) (b) Avaimen 12 (epäonnistunut haku) hakupolku puussa T. 7. luku 369

22 5 10 3 4 6 8 25 14 23 24 27 11 13 17 Kuva 7.1. (loppu) (c) Avaimen 24 (onnistunut haku) hakupolku puussa T. 7. luku 370

Käytettäessä monitiehakupuuta T edustamaan sanakirjaa D kuhunkin sisäsolmuun v talletetaan viittaus järjestettyyn tietoyksiköiden joukkoon. Solmuun v talletettua sanakirjaa kutsutaan sekundääritietorakenteeksi. Tämä tukee laajempaa kokonaisuutta, puuta, joka on tässä primääritietorakenne. Solmuun v talletettu sanakirja esitetään merkinnällä D(v). Tähän talletetaan tietoyksiköt. Näiden perusteella löydetään lapsisolmu, johon siirrytään haun seuraavassa vaiheessa. Puun T jokaisessa solmussa v, jonka lapset ovat v 1,, v d ja tietoyksiköt (k 1, x 1 ),,(k d-1, x d-1 ), ovat talletettuina tietoyksiköt (k 1, x 1, v 1 ),(k 2,x 2,v 2 ),,(k d-1, x d-1, v d-1 ), (+, null, v d ). Sanakirjan D(v) tietoyksiköllä (k i, x i, v i ) on avain k i ja alkio (x i, v i ) (viimeisessä tietoyksikössä erikoisavain + ). Haettaessa avaimen k alkiota puusta T d-solmun v prosessointi voidaan tehdä suorittamalla haku tietoyksikön (k i, x i, v i ) löytämiseksi sanakirjasta D(v) pienimmällä avaimella, joka on suurempi tai yhtä suuri kuin k. On olemassa kaksi tapausta: 7. luku 371

Jos on k i-1 < k < k i, hakua jatketaan käsittelemällä lasta v i. (Jos palautetaan erikoisavain k d =+,kon silloin suurempi kuin kaikki avaimet, jotka on talletettu solmuun v ja hakua jatketaan käsitellen lasta v d.) Muussa tapauksessa (k = k i ) haku päättyy onnistuneena. Monitiehakupuun tilavaatimus n tietoyksikölle on O(n) tavallisten sanakirjatoteutusten kera sekundääritietorakenteita varten puussa T. Suoritusaika, joka on käytettävä d-solmussa v haun aikana, riippuu siitä, miten sekundääritietorakenne D(v) toteutetaan. Jos se toteutetaan taulukkopohjaisena järjestettynä sekvenssinä tai AVL-puuna, v on prosessoitavissa ajassa O(log d). Jos se sen sijaan toteutetaan järjestämättömän sekvenssin tai listapohjaisen järjestetyn sekvenssin avulla, solmun v prosessointi kestää ajan O(d). Viitatkoon d max puun T minkä tahansa solmun lasten maksimimäärään. Olkoon h puun korkeus. Näin ollen hakuaika monitiehakupuussa on joko O(hd max ) tai O(h log d max ) riippuen sekundääritietorakenteen D(v) toteutuksesta. 7. luku 372

Jos d max on vakio, haun suoritusaika on O(h) riippumatta sekundääritietorakenteen toteutuksesta. Sen mukaisesti päätavoitteena on pitää puun korkeus mahdollisimman matalana, ts. h tietoyksiköiden määrän n logaritmisena funktiona. Tämä aikaansaa tasapainoitetun hakupuun (balanced search tree), jota pohditaan seuraavaksi. 7.2. (2,4)-puu Tämä on monitiehakupuulaji, joka pitää solmuihin talletetut sekundääritietorakenteet kooltaan suppeina ja puun tasapainoitettuna. Nämä tavoitteet saavutetaan ylläpitämällä ominaisuudet (kuva 7.2): Koko-ominaisuus: Jokaisella sisäsolmulla on enintään neljä lasta ja vähintään kaksi. Syvyysominaisuus: Kaikki lehdet ovat samalla syvyydellä. 7. luku 373

12 5 10 15 3 4 6 7 8 11 13 14 17 Kuva 7.2. (2,4)-puu. 7. luku 374

Solmujen koosta kiinnipitäminen tekee solmuista monitiehaussa yksinkertaisia. Siitä tulee myös vaihtoehtoinen nimi, 2-3-4-puu, koska jokaisella sisäsolmulla on joko 2, 3 tai 4 lasta. Lisäksi solmun v sanakirja D(v) sisältää sekvenssin, jossa kaikki operaatiot tehdään vakioajassa O(1), sillä d max = 4. Korkeusominaisuudesta seuraa raja puulle: Lause 7.2. (2,4)-puun korkeus on (log n), kun tietoyksiköitä on n. Perustelu: Olkoon h (2,4)-puun T korkeus, kun tietoyksiköitä on n. Lause osoitetaan todeksi seuraavien epäyhtälöjen avulla: (log(n + 1))/2 h log(n + 1). (7.1) Koon ja syvyyden nojalla lehtien lukumäärä puussa T on vähintään 2 h ja enintään 4 h. Lauseen 7.1. perusteella lehtien määrä puussa T on n + 1. 7. luku 375

Täten saadaan 2 h n + 1 4 h. Ottamalla 2-kantainen logaritmi jokaisesta osasta saadaan h log(n + 1) 2h, josta tulee tämän lauseen tulos (7.1). Lause 7.2. sanoo, että koko- ja syvyysominaisuudet riittävät pitämään monitiepuun tasapainoitettuna. Lisäksi se osoittaa haun (2,4)-puussa toimivan ajassa O(log n) ja ettei sekundäärirakenteen toteutus ole ratkaiseva seikka (yksinkertaisin paras, taulukko tai lista), koska lasten maksimimäärä on vakio d max. 7. luku 376

Lisäys Uuden tietoyksikön (k,x) lisäämiseksi (2,4)-puuhun T on aluksi haettava avain k. Olettaen, ettei puussa ole tätä avainta k, haku päättyy epäonnistuneena lehteen z. Olkoon v tämän vanhempi. Uusi tietoyksikkö lisätään solmuun v ja samoin uusi lapsi w (lehti) solmulle v solmun z vasemmalle puolelle. Näin ollen lisätään (k,x,w) sanakirjaan D(v). Kuvissa 7.3. ja 7.5. esitetään sarja perättäisiä lisäyksiä (2,4)- puuhun. Tarkastellaan yksityiskohtaisesti avaimen 5 lisäystä puuhun kuvassa 7.3(g), josta saadaan kuva 7.3.(i). Lisäysmenetelmä säilyttää syvyysominaisuuden, koska uusi lehti lisätään samalle tasolle kuin olemassa olevat lehdet ja uusi avain alimmalle sisäsolmutasolle. Se saattaa silti vahingoittaa kokoominaisuutta. Jos solmu on 4-solmu ennen lisäystä, siitä tulisi 5-solmu sen jälkeen, mikä ei ole sallittua. Tällöin esiintyy ylivuoto (overflow), joka on ratkaistava sopivasti puun säilyttämiseksi lajissa (2,4). 7. luku 377

4 4 6 v 4 6 12 4 6 12 15 (a) w (b) z (c) (d) 12 4 6 15 12 4 6 15 (e) (f) Kuva 7.3. (alku) Lisäyksiä (2,4)-puuhun: (a) Lähtötilanteen puu, jossa on yksi tietoyksikkö, (b) avaimen 6 lisäys, (c) avaimen 12 lisäys, (d) avaimen 15 lisäys, joka aiheuttaa ylivuodon, (e) jako, joka tuottaa uuden juuren ja (f) jaon jälkeen. 7. luku 378

12 12 3 4 6 15 3 4 5 6 15 (g) (h) 5 12 5 12 3 4 6 15 3 4 6 15 (i) (j) Kuva 7.3 (jatkoa) (g) Avaimen 3 lisäys, (h) avaimen 5 lisäys, joka aiheuttaa ylivuodon, (i) jako ja (j) jaon jälkeen. 7. luku 379

5 12 5 12 v 3 4 6 10 15 3 4 v 6 8 10 15 z (k) (l) Kuva 7.3. (loppu) (k) Avaimen 10 lisäys ja (l) avaimen 8 lisäys. 7. luku 380

Olkoot v 1,, v 5 solmun v lapset ja k 1,, k 4 solmuun v talletetut avaimet. Ylivuodon korjaamiseksi solmusta v jaetaan (split) 5-solmu v seuraavasti (kuva 7.4.): Solmu v korvataan kahdella solmulla v ja v, missä v on 3-solmu lapsinaan v 1, v 2, v 3 ja avaiminaan k 1 ja k 2. v on 2-solmu lapsinaan v 4 ja v 5 ja avaimenaan k 4. Jos v on puun T juuri, luodaan uusi juuri u. Muutoin u olkoon solmun v vanhempi. Lisätään avain k 3 solmuun u ja asetetaan v ja v solmun u lapsiksi niin, että jos v oli i:s u:n lapsi, niin v ja v tulevat u:n i:nneksi ja i+1:nneksi lapseksi. Jako-operaatio suoritetaan selvästi ajassa O(1). 7. luku 381

u u h 1 h 2 h 1 h 2 u 1 v=u 2 u 3 k 1 k 2 k 3 k 4 k 3 u v=u 2 1 u 3 k 1 k 2 k 4 v 1 v 2 v 3 v 4 v 5 v 1 v 2 v 3 v 4 v 5 (a) Kuva 7.4. (2,4)-puun solmun jako: (a) ylivuoto 5-solmussa v, (b) v:n kolmas avain lisätään v:n vanhempaan u ja (c) v korvataan 3-solmulla v ja 2-solmulla v. u (b) h 1 k 3 h 2 u 1 v v u 3 k 1 k 2 k 4 v 1 v 2 v 3 v 4 v 5 (c) 7. luku 382

Solmun v jaon seurauksena uusi ylivuoto voi esiintyä v:n vanhemmassa u. Jos sellainen esiintyy, se sysää puolestaan jaon solmuun u (kuva 7.5.). Jako joko poistaa ylivuodon tai levittää sitä nykyisen solmun vanhempaan. Näin jako-operaatioiden lukumäärää rajoittaa puun korkeus, joka on lauseen 7.2. mukaisesti O(log n). Lisäyksen suorittaminen (2,4)-puuhun vaatii kaikkiaan aikaa O(log n). 5 10 12 3 4 6 8 11 13 14 15 (a) Kuva 7.5. (alku) Lisäys (2,4)-puuhun aiheuttaen sarjan jakoja: (a) Ennen lisäystä. 7. luku 383

5 10 12 5 10 12 15 3 4 6 8 11 13 14 15 17 3 4 6 8 11 13 14 17 (b) (c) 5 10 12 15 3 4 6 8 11 13 14 17 (d) Kuva 7.5. (jatkoa) (b) Avaimen 17 lisäys, joka aiheuttaa ylivuodon, (c) jako ja (d) jaon aiheuttama uusi ylivuoto. 7. luku 384

12 5 10 15 12 5 10 15 3 4 6 8 11 13 14 17 3 4 6 8 11 13 14 17 (e) (f) Kuva 7.5. (loppu) (e) Toinen jako, joka tuottaa uuden juurisolmun, sekä (f) lopullinen puu. 7. luku 385

Poisto Nyt tarkastellaan tietoyksikön poistamista (2,4)-puusta T. Ensiksi pitää luonnollisesti suorittaa haku avaimella k. Tietoyksikön poisto (2,4)- puusta voidaan aina redusoida tapaukseksi, jossa poistettava tietoyksikkö sijaitsee alimmalla sisäsolmutasolla, ts. sen lapset ovat lehtiä. Jos poistettava tietoyksikkö (k i, x i ) sijaitsee tätä ylempänä puun solmussa z, siirretään aluksi tietoyksikön (k i, x i ) sijaan sellainen, joka on talletettuna solmussa v ja tämän lapset ovat lehtiä (kuva 7.6.(d)): 1. Etsitään oikeanpuolimmainen sisäsolmu v alipuusta, jonka juuri on solmun zi:s lapsi, kun solmun v kaikki lapset ovat lehtiä. Solmun v avain on tällöin alipuun i suurin, ts. alhaaltapäin lähin poistetulle k i. 2. Siirretään solmun z tietoyksikön (k i,x i ) sijaan solmun v viimeinen tietoyksikkö. 7. luku 386

Kun edellinen vaihto on tehty, tietoyksikkö poistetaan solmusta v sanakirjasta D(v) ja poistetaan myös v:n i:s lehtilapsi. eli Tietoyksikön ja lapsen poistaminen solmusta v säilyttää syvyysominaisuuden, mutta ei vältämättä koko-ominaisuutta. Jos v on ennen poistoa 2-solmu, siitä tulisi 1-solmu, mikä ei ole sallittua (2,4)- puussa. Tällöin esiintyy alivuoto (underflow). Alivuodon korjaamiseksi tarkistetaan, onko solmun v viereinen sisarus 3-solmu tai 4-solmu. Jos tällainen viereinen sisarus w on olemassa, suoritetaan siirto (transfer), jossa siirretään solmun w lapsi solmuun v, w:n avain v:n ja w:n vanhempaan u sekä u:n avain solmuun v (kuva 7.6.(b)-(c)). Jos solmulla v on ainoastaan yksi vierekkäinen sisarus, joka on 2-solmu, tai molemmat vierekkäiset sirarukset ovat 2-solmuja, suoritetaan sulauttaminen (fusion), jossa lomitetaan v sisaruksensa kanssa luomalla uusi solmu v ja siirretään avain solmun v vanhemmasta u solmuun v (kuva 7.6. (e)-(f)). 7. luku 387

12 12 5 10 15 u 10 15 4 6 8 11 13 14 17 v 5 w 6 8 11 13 14 17 (a) (b) 12 Kuva 7.6. Poistojen sarja (2,4)-puusta: (a) avaimen 4 poisto aiheuttaen alivuodon, (b) siirto ja (c) siirron jälkeen. v 5 u 6 10 15 w 8 11 13 14 17 (c) 7. luku 388

12 11 5 6 10 15 11 8 13 14 17 5 u 6 15 10 v 8 13 14 17 (d) (e) 11 Kuva 7.6. (d) Avaimen 12 poisto, (e) sulauttaminen ja (f) tämän jälkeen. 5 u 6 15 v 8 10 13 14 17 (f) 7. luku 389

u 11 6 15 11 6 15 5 13 8 10 14 17 5 8 10 14 17 (g) (h) Kuva 7.6. (g) Avaimen 13 poisto ja (h) tämän jälkeen. 7. luku 390

Sulauttaminen solmussa v saattaa aikaansaada uuden alivuodon solmun v vanhemmassa u, mikä puolestaan tuottaa siirron tai sulauttamisen solmussa u (kuva 7.7.). Tästä johtuen sulauttamisoperaatioiden määrää rajoittaa puun korkeus, joka on lauseen 7.2. mukaan O(log n). Jos alivuoto leviää juureen saakka, niin juuri yksinkertaisesti poistetaan (kuva 7.7. (c)-(d)). Analyysi (2,4)-puuna toteutetun sanakirjan pääoperaatiot findelement, insertitem ja remove ovat kaikki luokkaa O(log n). Suoritusajat tulevat seuraavista seikoista. (2,4)-puun korkeus, kun puussa on n tietoyksikköä, on O(log n) lauseen 7.1. mukaan. Jako, siirto ja sulauttaminen vaativat ajan O(1). Tietoyksikön haku, lisäys ja poisto käyvät O(log n) solmussa. 7. luku 391

11 11 6 15 6 u 5 14 8 10 17 5 15 8 10 v 17 (a) (b) Kuva 7.7. Sulauttamisten leviäminen (2,4)-puussa: (a) avaimen 14 poisto, joka aiheuttaa alivuodon, ja (b) sulauttaminen. 7. luku 392

6 11 u 6 11 5 8 10 15 17 5 8 10 15 17 (c) (d) Kuva 7.7. (loppu) (c) Toinen sulauttaminen, joka aiheuttaa juuren poistamisen, ja (d) lopullinen puu. 7. luku 393