A B-fa (oroszul B-faként ejtve ) egy adatstruktúra , egy keresőfa. A külső logikai reprezentáció szempontjából kiegyensúlyozott , erősen elágazó fa . Gyakran használják adatok külső memóriában való tárolására.
A B-fák használatát először R. Bayer és E. McCreight javasolta 1970 - ben .
A kiegyensúlyozott azt jelenti, hogy a gyökértől a levelekig tartó bármely két út hossza legfeljebb eggyel különbözik.
A fa elágazása az egyes facsomópontok azon tulajdonsága, hogy nagyszámú leszármazott csomópontra hivatkozzon.
A fizikai szervezés szempontjából a B-fa memóriaoldalak többlistás struktúrájaként jelenik meg, vagyis a fa minden csomópontja egy memóriablokknak (oldalnak) felel meg. A belső és a levéloldalak általában eltérő szerkezetűek.
A B-fa struktúrát számos modern DBMS -ben használják indexek rendezésére .
A B-fa felhasználható a merevlemezen lévő információk (általában metaadatok) strukturálására (indexelésére). A merevlemezen lévő tetszőleges blokkhoz való hozzáférési idő nagyon hosszú (ezredmásodperc nagyságrendű), mivel azt a lemez forgási sebessége és a fej mozgása határozza meg. Ezért fontos csökkenteni az egyes műveleteknél vizsgált csomópontok számát. A listakeresés minden alkalommal egy véletlenszerű blokk megtalálására túl sok lemezelérést eredményezhet, mivel az adott elemet megelőző összes elemén egymás után kell áthaladni, míg a B-fában történő keresés a blokk tulajdonságai miatt. egyensúly és magas elágazás, jelentősen csökkentheti az ilyen műveletek számát.
Az algoritmusok viszonylag egyszerű megvalósítása és a B-fa struktúrával való munkavégzéshez kész könyvtárak (beleértve a C - hez tartozókat is) népszerűvé teszik az ilyen memóriaszervezést a sokféle, nagy adatmennyiséggel dolgozó programban.
A B-fa olyan fa, amely megfelel a következő tulajdonságoknak:
A 2. tulajdonság másként is megfogalmazható: a B-fa minden csomópontja a levelek kivételével rendezett listának tekinthető, amelyben a kulcsok és a gyermekekre mutató mutatók váltakoznak.
Ha a kulcs a gyökérben található, akkor a rendszer megtalálja. Ellenkező esetben meghatározzuk az intervallumot, és a megfelelő leszármazotthoz lépünk. Ismételjük.
Egy bizonyos csomópont leszármazottainak fáját egy részfának nevezzük , amely ebből a csomópontból és leszármazottaiból áll.
Először is definiáljunk egy függvényt, amely hozzáadja a K kulcsot az x csomópont gyermekfájához. A függvény végrehajtása után az összes átadott csomópontban, kivéve talán magát az x csomópontot, kevesebb, mint , de nem kevesebb kulcs lesz.
Most határozzuk meg a K kulcs hozzáadását a teljes fához. Az R betű a gyökércsomópontot jelöli.
Ha a gyökér egyben levél is, vagyis csak egy csomópont van a fában, egyszerűen eltávolítjuk a kulcsot ebből a csomópontból. Ellenkező esetben először megkeressük a kulcsot tartalmazó csomópontot, emlékezve a hozzá vezető útvonalra. Legyen ez a csomópont .
Ha - levél, törölje onnan a kulcsot. Ha legalább kulcsok maradtak a csomópontban , akkor itt megállunk. Ellenkező esetben a kulcsok számát nézzük két szomszédos testvércsomópontban. Ha van egy szomszédos jobb csomópont, és van legalább kulcsa, akkor a közte és a szomszédos jobb csomópont közötti elválasztó kulcshoz hozzáadjuk , és e kulcs helyére a szomszédos jobb csomópont első kulcsát tesszük, ami után megállunk. . Ha ez nem így van, de van egy szomszédos bal csomópont, és legalább kulcsai vannak, akkor a közte és a szomszédos bal csomópont közötti elválasztó kulcshoz hozzáadjuk , és e kulcs helyére a szomszédos bal csomópont utolsó kulcsát tesszük. bal csomópont, ami után megállunk. Végül, ha a bal oldali kulcs meghibásodik, egyesítjük a csomópontot a szomszédos bal vagy jobb csomóponttal, és áthelyezzük a két csomópontot korábban elválasztó kulcsot az egyesített csomópontba. Ebben az esetben csak a kulcsok maradhatnak a szülőcsomópontban . Majd ha nem gyökér, akkor hasonló eljárást végzünk vele. Ha ennek eredményeként elértük a root-ot, és 1-től kulcsig maradt benne, akkor nem kell semmit tenni, mert előfordulhat, hogy a gyökérnek kevesebb kulcsa van. Ha a gyökérben egyetlen kulcs sem maradt, akkor a gyökércsomópontot kizárjuk, és annak egyetlen gyermekét tesszük a fa új gyökerévé.
Ha nem levél, és K a -edik kulcsa, törölje a -. leszármazott utódok részfájából a jobb szélső kulcsot , vagy fordítva, a -edik leszármazott utódok részfájából a bal szélső kulcsot . Ezt követően a K kulcsot cseréljük ki a távvezérlőre. A kulcs törlése az előző bekezdésben leírtak szerint történik.
A B-fák fő hátránya, hogy nem rendelkeznek hatékony eszközzel a kiválasztott kulcstól eltérő tulajdonság által rendezett adatok lekérésére (vagyis fa bejárási módszerrel).
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 |
|