B⁺-puu on tietorakenne, joka perustuu B-puuhun , tasapainoiseen hakupuuhun, jossa on muuttuva, mutta usein suuri määrä lapsia solmua kohti. B⁺-puu koostuu juuresta, sisäsolmuista ja lehdistä, juuri voi olla joko lehti tai solmu, jossa on kaksi tai useampia lapsia.
Alun perin rakenteen tarkoituksena oli tallentaa dataa tehokasta hakua varten lohkoorientoituneessa tallennusympäristössä - erityisesti tiedostojärjestelmille; Sovellus johtuu siitä, että toisin kuin binäärihakupuilla, B⁺-puilla on erittäin korkea haarautumiskerroin (osoittimien määrä yläsolmusta lapsiin on yleensä luokkaa 100 tai enemmän), mikä vähentää hakujen määrää. I/O-toiminnot, jotka vaativat elementin etsimisen puusta.
B⁺-puun muunnos, jossa kaikki arvot tallennettiin lehtisolmuihin, tarkistettiin systemaattisesti vuonna 1979 [1] , ja todettiin, että IBM on käyttänyt tällaisia rakenteita VSAM -päätietokoneen tiedostopääsyteknologiassa vuodesta lähtien . ainakin 1973.
Rakennetta käytetään laajalti tiedostojärjestelmissä - NTFS , ReiserFS , NSS , XFS , JFS , ReFS ja BFS käyttävät tämän tyyppistä puuta metatietojen indeksointiin; BeFS käyttää myös B⁺-puita hakemistojen tallentamiseen. Relaatiotietokannan hallintajärjestelmät , kuten DB2 , Informix , Microsoft SQL Server , Oracle Database (versiosta 8 alkaen), Adaptive Server Enterprise ja SQLite , tukevat tämän tyyppistä puuta taulukkohakemistoille. NoSQL -tietokantajärjestelmissä, jotka toimivat avainarvomallin kanssa, tietorakenne on toteutettu tietojen käyttöä varten CouchDB : ssä , MongoDB :ssä (käytettäessä WiredTiger - tallennusalijärjestelmää ) ja Tokyo Cabinetissa .
B⁺-puu on tasapainoisen järjestyksen (tai asteen) hakupuu , joka täyttää seuraavat ominaisuudet:
B⁺-puun rakentaminen voi vaatia välirakenteen uudelleenrakentamista, tämä johtuu siitä, että avainten lukumäärän jokaisessa solmussa (juurta lukuun ottamatta) tulee olla mistä on puun aste (tai järjestys). Kun yrität lisätä ( )- avaimen solmuun, on välttämätöntä erottaa tämä solmu; ( )-avain, joka on sijoitettu puun viereiselle tasolle, toimii muodostettujen oksien erotinavaimena. . Erikoistapaus on juuren jako, koska tässä tapauksessa puun tasojen lukumäärä kasvaa. B⁺-puun lehden halkaisemisen ominaisuus on, että se jaetaan epätasaisiin osiin. Sisäisen solmun tai juuren jakaminen johtaa solmuihin, joissa on sama määrä avaimia . Lehden halkaisu voi aiheuttaa "ketjureaktion" solmujen halkaisemisesta, joka päättyy juureen.
B⁺-puun juuri on lähtökohta koko arvoalueelle, jossa jokainen sisäinen solmu on osaväli.
Oletetaan esimerkiksi, että meidän on löydettävä avaimen arvo B⁺-puusta. Tätä varten etsimme lehtisolmua, joka sisältää arvon Jokaisessa sisäisessä solmussa meidän on selvitettävä, mitä seuraavaa lapsisolmua seurataan, B⁺-puun sisäisellä solmulla on enintään lapsia, joissa jokainen niistä edustaa erillinen osaväli. Sopiva solmu valitaan etsimällä solmun avainarvoista:
Funktio : search ( k ) return tree_search ( k , juuri ); Funktio : tree_search ( k , solmu ) jos solmu on lehti , palauttaa solmun ; _ vaihtaa k tee tapaus k < k [ 0 ] palauttaa puuhaku ( k , p [ 0 ]); tapaus k [ i ] ≤ k < k [ i + 1 ] palauttaa puuhaku ( k , p [ i + 1 ]); tapaus k [ d ] ≤ k palauttaa puuhaku ( k , p [ d + 1 ]);(Tämä pseudokoodi olettaa, että kaksoiskappaleet jätetään huomioimatta.)
Jos haluat lisätä uuden avaimen tai uuden merkinnän, sinun on ensin löydettävä solmu, johon haluat lisätä ne. Tässä tapauksessa algoritmi on:
B-puut, toisin kuin B⁺-puut, laajenevat juurien puolelta, eivät lehtiä.
Avaimen tai merkinnän poistamiseksi sinun on ensin löydettävä lehtisolmu, jossa se sijaitsee. Algoritmi lehden solmusta poistamiseksi:
Liitos voi ulottua juureen asti, jolloin puun korkeus pienenee.
Kunkin operaation laskennallinen monimutkaisuus pahimmassa tapauksessa: missä on puun järjestys tai haaroitustekijä; on elementtien lukumäärä puussa oksien solmuissa.
Puu (tietorakenne) | |
---|---|
Binääripuut | |
Itsetasapainottavat binaaripuut |
|
B-puut | |
etuliite puita |
|
Avaruuden binaarinen osiointi | |
Ei-binääripuut |
|
Avaruuden hajottaminen |
|
Muut puut |
|
Algoritmit |