A B⁺-fa egy B-fán alapuló adatstruktúra , amely egy kiegyensúlyozott keresési fa változó, de csomópontonként gyakran nagy számú gyermekkel. A B⁺-fa egy gyökérből, belső csomópontokból és levelekből áll, a gyökér lehet levél vagy két vagy több gyermekes csomópont.
Kezdetben a struktúra célja az volt, hogy a hatékony keresés érdekében adatokat tároljon blokkorientált tárolási környezetben – különösen fájlrendszerek esetében; Az alkalmazás annak köszönhető, hogy a bináris keresőfákkal ellentétben a B⁺-fák nagyon magas elágazási tényezővel rendelkeznek (a szülőcsomóponttól a gyerekek felé mutató mutatók száma általában 100 vagy több nagyságrendű), ami csökkenti a keresések számát. I / O műveletek, amelyek megkövetelik egy elem keresését a fában.
A B⁺-fa egy változatát, amelyben az összes értéket a levél csomópontjaiban tárolták, 1979-ben szisztematikusan felülvizsgálták [1] , megjegyezve, hogy ezeket a struktúrákat az IBM a VSAM nagyszámítógépes fájlelérési technológiájában óta használja. legalább 1973.
A struktúrát széles körben használják a fájlrendszerekben - az NTFS , ReiserFS , NSS , XFS , JFS , ReFS és BFS ezt a fát használja a metaadatok indexelésére; A BeFS B⁺-fákat is használ a könyvtárak tárolására. A relációs adatbázis-kezelő rendszerek , például a DB2 , Informix , Microsoft SQL Server , Oracle Database (8-as verziótól), Adaptive Server Enterprise és SQLite támogatják ezt a fajta fát a táblaindexekhez. A kulcsérték-modellel dolgozó NoSQL DBMS-ek közül az adatstruktúra a CouchDB -ben, a MongoDB - ben ( a WiredTiger tárolási alrendszer használatakor ) és a Tokyo Cabinetben valósult meg adathozzáféréshez .
A B⁺-fa egy kiegyensúlyozott sorrendű (vagy fokszámú) keresési fa , amely megfelel a következő tulajdonságoknak:
A B⁺-fa felépítéséhez szükség lehet a köztes struktúra újraépítésére, ez abból adódik, hogy a kulcsok számának minden csomópontban (a gyökér kivételével ) a fa fokának (vagy sorrendjének) hova kell lennie . Amikor megpróbálja beszúrni a ( )-edik kulcsot a csomópontba, szükségessé válik ennek a csomópontnak a szétválasztása; a fa szomszédos szintjén elhelyezett ()-edik kulcs a kialakított ágak elválasztó kulcsaként működik. . Speciális eset a gyökér felosztása, mivel ebben az esetben megnő a fa rétegeinek száma. A B⁺-fa levelének felhasadásának sajátossága, hogy egyenlőtlen részekre oszlik. Egy belső csomópont vagy gyökér felosztása azonos számú kulccsal rendelkező csomópontokat eredményez .
A B⁺-fa gyökere a kiindulópontja a teljes értéktartománynak, amelyben minden belső csomópont egy részintervallum.
Tegyük fel például, hogy meg kell találnunk egy kulcs értékét egy B⁺-fában. Ehhez keresünk egy értéket tartalmazó levélcsomópontot Minden belső csomópontnál meg kell találnunk, hogy melyik következő gyermekcsomópontot kell követni, a B⁺-fa belső csomópontjának legfeljebb gyermeke van, ahol mindegyik egy külön részintervallum. A megfelelő csomópontot a csomópont kulcsértékeiben való kereséssel választjuk ki:
Funkció : search ( k ) return tree_search ( k , gyökér ); Funkció : tree_search ( k , csomópont ) ha a csomópont egy levél , akkor visszatér a csomópont ; switch k do case k < k [ 0 ] return tree_search ( k , p [ 0 ]); eset k [ i ] ≤ k < k [ i + 1 ] return tree_search ( k , p [ i + 1 ]); eset k [ d ] ≤ k return tree_search ( k , p [ d + 1 ]);(Ez a pszeudokód feltételezi, hogy a duplikációkat figyelmen kívül hagyja.)
Új kulcs vagy új bejegyzés hozzáadásához először meg kell találnia azt a csomópontot, amelyhez hozzá szeretné adni őket. Ebben az esetben az algoritmus a következő:
A B-fák a B⁺-fákkal ellentétben a gyökér oldaláról tágulnak, nem a levelek felől.
Kulcs vagy bejegyzés törléséhez először meg kell találnia azt a levélcsomópontot, amelyben az található. Algoritmus a levél csomópontból való eltávolításához:
Az egyesülés a gyökérig terjedhet, ilyenkor a fa magassága csökken.
Az egyes műveletek számítási bonyolultsága a legrosszabb esetben: hol van a fa vagy az elágazási tényező sorrendje; a fa csomópontjaiban lévő ágak elemeinek száma .
Fa (adatstruktúra) | |
---|---|
Bináris fák | |
Önkiegyensúlyozó bináris fák |
|
B-fák | |
előtag fák |
|
A tér bináris particionálása | |
Nem bináris fák |
|
A tér felosztása |
|
Más fák |
|
Algoritmusok |
|