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 lapsen v i alipuun avaimet k i 1 ja k i k 0 =, k d = Sisäsolmuissa vähint. yksi avain vähint. lasta Tietorakenteet, syksy 007 Esim. avaimen k = 34 haku 1 50 5 8 1 50 5 8 Avaimen k = 50 haku Haun työmäärä per solmu? Miten solmun v avaimet k i, alkiot x i ja lapsisolmut v i talletetaan? 1 50 5 8 sekvenssi työ = O(d) esim. AVL-puu työ = O(log(d)) (d: lapsilkm) Käsiteltyjä solmuja? O(h) (puun korkeus) Tietorakenteet, syksy 007 3 Tietorakenteet, syksy 007 4
B-puu: monitiehakupuu, jossa: minimiaste t (t ) kullakin sisäsolmulla vähintään t lasta kullakin solmulla vähintään t 1 avainta paitsi juuri: jos puu ei tyhjä, juurisolmulla vähintään 1 avain ( vähintään lasta) kussakin solmussa korkeintaan t 1 avainta korkeintaan t lasta jokainen lehtisolmu samalla tasolla 1 50 5 8 B-puu, jonka minimiaste on t = : (,4)-puu sisäsolmulla saa olla, 3 tai 4 lasta n-solmuisen B-puun korkeus h? väh. t lasta, lehdet tasakorkeudella h täydellisen t-asteisen puun korkeus = O(log t (n)) Tietorakenteet, syksy 007 5 Avaimen k lisäys B-puuhun k = 1 50 5 8 Tietorakenteet, syksy 007 6 k = 1 50 5 8 edetään avaimen k hakupolku lehtisolmuun asti jos k i = k, jatketaan esim. vasemmalle (lapseen v i ) avain k lisätään omalle paikalleen lehtisolmussa (avainten lineaarinen järjestys) 1 50 5 8 Tietorakenteet, syksy 007 7 Tietorakenteet, syksy 007 8
Lisätään edelleen k = 45 1 k = 45 50 5 8 1 45 50 5 8 B-puussa sallittu t 1 avainta Solmussa t avainta ns. ylivuoto Tietorakenteet, syksy 007 Ylivuodon korjaaminen 45 50 5 45 50 solmu jaetaan kahtia: t avainta yhteen solmuun 5 1 avain lisätään vanhempaan loput t 1 toiseen solmuun jos ei vanhempaa (jaettiin juuri), luodaan uusi juuri Tietorakenteet, syksy 007 Jako voi johtaa vanhemman ylivuotoon 1 45 50 5 8 1. 5. k = 45 50 61 8 5 45 50 61 8 3. 5 4. 45 50 61 8 5 1 5 45 50 8 45 50 61 8 ylivuotojen korjauksen työmäärä? O(t log(n)) solmun lisäys ainoastaan juurisolmun jaossa lehdet säilyvät samalla tasolla Tietorakenteet, syksy 007 11 Tietorakenteet, syksy 007 1
Avaimen k poisto B-puusta k = 5 5 45 50 61 8 jos k sisäsolmussa, korvataan edeltäjäavaimella myös seuraaja olisi ok, vrt. binäärihakupuu 50 45 61 8 50 45 61 8 Poisto: lehtisolmun avainten lukumäärä pienenee aina ok, jos kyseessä juurisolmu muut solmut: B-puu vaatii, että avaimia vähintään t 1 solmussa t avainta ns. alivuoto Tietorakenteet, syksy 007 Solmun v alivuodon korjaaminen tapaus 1: solmulla v vierekkäinen sisar w, jossa yli t 1 avainta 8 8 w 1 w w 3 w 1 w w 3 tehdään siirto: solmujen v ja w välinen avain solmuun v solmun w solmun v puoleisin avain vanhempaan (äsken siirretyn avaimen tilalle) solmun w solmun v puoleisin alipuu solmuun v (solmu/lapsimäärät tasapainoon) Tietorakenteet, syksy 007 Tietorakenteet, syksy 007 14 tapaus : solmun v (kummallakin) vierekkäisellä sisarella w tasan t 1 avainta 50 8 w 1 w 50 8 w 1 w tehdään sulautus: solmujen v ja w avaimet sekä niiden välinen avain vanhemmasta uuteen solmuun v vanhemman avaimet/lapset vähenevät yhdellä v perii solmujen v ja w alipuut (solmu/lapsimäärien tasapaino säilyy) Tietorakenteet, syksy 007 16
sulautus voi johtaa alivuotoon vanhemmassa Vielä yksi esimerkki poistoista alivuotojen korjauksen työmäärä? O(t log(n)) alivuoto juurisolmussa: vain jos avaimia 0 tällöin juurella oltava tasan 1 lapsi vanha juuri pois, tilalle sen ainoa lapsi (lehtisolmut pysyvät samalla tasolla) 1. 3. 5 k = 61 31 50 61 8. 4. 31 50 5 8 5 k = 8 5 31 50 8 31 50 Tietorakenteet, syksy 007 17 Tietorakenteet, syksy 007 18 Vielä yksi esimerkki poistoista... 4. 5. 5 5 k = 50 31 50 31 50 6. 5 7. 5 31 31 Tietorakenteet, syksy 007 1