logo

B Fa vizualizáció

A következő oktatóanyagban megismerjük a B fa adatstruktúráját, és megfontoljuk annak megjelenítését.

Tehát kezdjük.

Mi az a B fa?

A B Fa egy speciális típusú többirányú keresőfa , közismert nevén a M-út fa, amely egyensúlyba hozza magát. Kiegyensúlyozott szerkezetük miatt ezeket a fákat általában hatalmas adatbázisok működtetésére és kezelésére, valamint a keresések egyszerűsítésére használják. Egy B fában minden csomópontnak legfeljebb n gyermekcsomópontja lehet. A B Tree egy példa a többszintű indexelésre egy adatbázis-kezelő rendszerben (DBMS). A levél és a belső csomópontok egyaránt rendelkeznek rekordhivatkozással. A B fa kiegyensúlyozott tárolt fa néven ismert, mivel az összes levél csomópontja azonos szinten van.

A következő diagram egy példa egy B fára:

B Fa vizualizáció

1.ábra. A B 3-as rendű fa

A B fa szabályainak megértése

A B fa fontos tulajdonságai a következők:

  1. Az összes levél csomópontja azonos szinten van.
  2. A B fa adatszerkezetét a minimális 'd' fokozat határozza meg. A 'd' értéke a lemezblokk méretétől függ.
  3. Minden csomópontnak, a gyökér kivételével, legalább d-1 kulcsból kell állnia. A gyökércsomópont legalább 1 kulcsból állhat.
  4. Az összes csomópont (beleértve a gyökércsomópontot is) legfeljebb a következőkből állhat (2d-1) kulcsok.
  5. Egy csomópont gyermekeinek száma egyenlő a a benne lévő kulcsok számának hozzáadása és .
  6. Egy csomópont összes kulcsa növekvő sorrendben van rendezve. A két billentyű, a k1 és k2 közötti gyermek a k1 és k2 közötti összes billentyűből áll.
  7. A bináris keresőfától eltérően a B fa adatszerkezete a gyökértől kezdve nő és zsugorodik. Míg a bináris keresőfa lefelé nő, és lefelé zsugorodik.
  8. A többi önkiegyensúlyozott bináris keresőfához hasonlóan a B fa adatszerkezetének időbonyolultsága az olyan műveletekhez, mint a keresés, beillesztés és törlés O(log?n) .
  9. Egy csomópont beillesztése a B fába csak a levélcsomópontnál történik.

Tekintsük a következő példát egy 5-ös minimális rendű B fára.

B Fa vizualizáció

2. ábra. A B Rendfa 5

Megjegyzés: A minimális rendelés értéke jóval több, mint 5 egy gyakorlati B fák esetében.

A fenti diagramon megfigyelhetjük, hogy az összes levélcsomópont azonos szinten van, és az összes nem levélcsomópontnak nincs üres részfája, és eggyel kevesebb kulcsból áll, mint a gyermekei száma.

A B fa szabályainak beállított megfogalmazása:

Minden B fa egy pozitív állandó egész számtól függ MINIMÁLIS , amelyet az egyetlen csomópontban tárolható adatelemek számának meghatározására használnak.

1. szabály: A gyökér csak egy adatelemet tartalmazhat (vagy akár semmilyen adatelemet sem, ha nem is gyermek); minden más csomópont rendelkezik legalább MINIMÁLIS adatelemek.

2. szabály: Az egy csomópontban tárolt adatelemek maximális száma kétszerese az értékének MINIMÁLIS .

3. szabály: A B fa egyes csomópontjainak adatelemei egy részben kitöltött tömbben tárolódnak, a legkisebb adatelemtől (indexnél) rendezve. 0 ) a legnagyobb adatelemhez (a tömb végső használt pozíciójában).

4. szabály: A nem levél csomópont alatti részfák teljes száma mindig eggyel több, mint az adott csomópontban lévő adatelemek száma.

  • részfa 0, részfa 1,...

5. szabály: A nem leveles csomópontok tekintetében:

  1. Az indexben lévő adatelem nagyobb, mint a részfa számában szereplő összes adatelem én a csomópontról, és
  2. Az indexben lévő adatelem kisebb, mint a részfa számában szereplő összes adatelem i+1 a csomópontról.

6. szabály: A B fában minden levél ugyanolyan mélységű. Így biztosítja, hogy a B fa megakadályozza a kiegyensúlyozatlan fa problémáját.

Műveletek egy B fa adatstruktúrán

Annak érdekében, hogy a műveletek során a B fa adatstruktúra egyik tulajdonsága se sérüljön, a B fa felosztható vagy egyesíthető. Az alábbiakban felsorolunk néhány műveletet, amelyeket elvégezhetünk egy B fán:

  1. Adatelem keresése a B fában
  2. Adatelem beszúrása a B fába
  3. Adatelem törlése a B fában

Keresési művelet egy B fán

Egy elem keresése a B fában hasonló a bináris keresőfában végzett kereséshez. De ahelyett, hogy kétirányú döntést hozna (balra vagy jobbra), mint egy bináris keresőfa, egy B fa m-irányú döntést hoz minden csomóponton, ahol m a csomópont gyermekeinek száma.

A B fában lévő adatelemek keresésének lépései:

1. lépés: A keresés a gyökércsomóponttól kezdődik. Hasonlítsa össze a k keresőelemet a gyökérrel.

1.1. lépés: Ha a gyökércsomópont a k elemből áll, a keresés befejeződik.

1.2. lépés: Ha a k elem kisebb, mint a gyökér első értéke, akkor a bal szélső gyermekre lépünk, és rekurzívan keresünk a gyermekben.

1.3.1. lépés: Ha a gyökérnek csak két gyermeke van, akkor a jobb szélső gyermekre lépünk, és rekurzív módon keresünk a gyermek csomópontokban.

1.3.2. lépés: Ha a gyökérnek kettőnél több kulcsa van, akkor a többiben keresni fogunk.

2. lépés: Ha a k elemet nem találjuk a teljes fa bejárása után, akkor a keresőelem nincs jelen a B fában.

Vizualizáljuk a fenti lépéseket egy példa segítségével. Tegyük fel, hogy egy k=34 kulcsot akartunk keresni a következő B fában:

B Fa vizualizáció

3.1. ábra. Adott B fa

  1. Először is ellenőrizzük, hogy a kulcs k = 34 a gyökér csomópontban van. Mivel a kulcs nem a gyökérben található, áttérünk a gyermek csomópontjaira. Azt is megfigyelhetjük, hogy a gyökércsomópontnak két gyermeke van; ezért összehasonlítjuk a szükséges értéket a két kulcs között.
    B Fa vizualizáció
    3.2. ábra. A k kulcs nincs jelen a gyökérben
  2. Most, hogy észrevesszük, hogy a k kulcs nagyobb, mint a gyökércsomópont, azaz 30, a gyökér megfelelő gyermekével folytatjuk.
    B Fa vizualizáció
    3.3. ábra. A k > 30 kulcs, lépjen a jobb oldali gyermekre
  3. Most összehasonlítjuk a k kulcsot a csomóponton lévő értékekkel, azaz a 40-nel és az 50-nel. Mivel a k kulcs kisebb, mint a bal kulcs, azaz 40, a csomópont bal gyermekére lépünk.
    B Fa vizualizáció
    3.4. ábra. A kulcs k<40, move to left child< li>
  4. Mivel a 40 bal oldali gyermekében lévő érték 34, ami a szükséges érték, megállapíthatjuk, hogy a kulcs megtalálható, és a keresési művelet befejeződött.
    B Fa vizualizáció
    3.4. ábra. A k kulcs = 34, a 40 bal gyermeke

A kulcsot a fenti példában négy különböző értékkel hasonlítottuk össze, amíg meg nem találtuk. Így egy B fában a keresési művelethez szükséges időbonyolultság az O(log?n) .

Művelet beszúrása egy B fára

Amikor egy adatelemet beszúrunk egy B fába, először ellenőriznünk kell, hogy az elem már szerepel-e a fában vagy sem. Ha az adatelem megtalálható a B fában, akkor a beillesztési művelet nem történik meg. Ha azonban nem ez a helyzet, akkor folytatjuk a beillesztést. Két forgatókönyvre kell ügyelni, amikor egy elemet a levél csomópontjába szúr be:

    A csomópont nem tartalmazhat több kulcsot, mint a MAXIMÁLIS számú kulcs -A kulcsot beillesztjük a csomópontba a megfelelő helyre.Egy csomópont MAXIMÁLIS számú kulcsból áll -A kulcsot beillesztjük a teljes csomópontba, majd megtörténik a felosztási művelet, amely három részre osztja a teljes csomópontot. A második vagy medián kulcs a szülőcsomópontra kerül, az első és a harmadik rész pedig bal és jobb oldali gyermekcsomópontként fog működni. Ez a folyamat megismétlődik a szülőcsomóponttal, ha az is MAXIMÁLIS számú kulcsból áll.

Az adatelem B fába való beszúrásának lépései:

1. lépés: Kezdjük azzal, hogy a B fa sorrendje alapján kiszámoljuk a csomópontban lévő kulcsok maximális számát.

2. lépés: Ha a fa üres, akkor a rendszer kijelöl egy gyökércsomópontot, és beillesztjük a gyökércsomópontként funkcionáló kulcsot.

3. lépés: Most megkeressük a megfelelő csomópontot a beillesztéshez.

4. lépés: Ha a csomópont megtelt:

4.1. lépés: Az adatelemeket növekvő sorrendben illesztjük be.

4.2. lépés: Ha az adatelemek nagyobbak, mint a kulcsok maximális száma, akkor a teljes csomópontot felosztjuk a mediánnál.

4.3. lépés: A középső billentyűt felfelé toljuk, a bal és jobb billentyűket pedig bal és jobb gyermekként osztjuk szét.

5. lépés: Ha a csomópont nem tele van, akkor a csomópontot növekvő sorrendben illesztjük be.

Vizualizáljuk a fenti lépéseket egy példa segítségével. Tegyük fel, hogy létre kell hoznunk egy 4-es sorrendű B fát. A B fába beszúrandó adatelemek a következők: 5, 3, 21, 11, 1, 16, 8, 13, 4 és 9 .

  1. Mivel m egyenlő 3-mal, a kulcsok maximális száma egy csomóponthoz = m-1 = 3-1 = 2 .
  2. A beillesztéssel kezdjük 5 az üres fában.
    B Fa vizualizáció
    4.1. ábra. Beillesztés 5
  3. Most beszúrunk 3-at a fába. Mivel a 3 kisebb, mint 5, a 3-at beszúrjuk az 5-től balra ugyanabba a csomópontba.
    B Fa vizualizáció
    4.2. ábra. Beillesztés 3
  4. Most beszúrjuk a 21-et a fába, és mivel a 21 nagyobb, mint 5, az 5-től jobbra lesz beszúrva ugyanabban a csomópontban. Mivel azonban tudjuk, hogy a csomópontban a kulcsok maximális száma 2, az egyik kulcs átkerül a fenti csomópontba, hogy feloszthassa azt. Így az 5, a középső adatelem felfelé fog mozogni, a 3 és a 21 pedig ennek bal és jobb oldali csomópontja lesz.
    B Fa vizualizáció
    4.3. ábra. Beillesztés 21
  5. Most itt az ideje beszúrni a következő adatelemet, azaz a 11-et, amely nagyobb, mint 5, de kisebb, mint 21. Ezért a 11 kulcsként kerül beszúrásra a 21-ből álló csomópont bal oldalán kulcsként.
    B Fa vizualizáció
    4.4. ábra. Beillesztés 11
  6. Hasonlóképpen a következő 1-es adatelemet illesztjük be a fába, és mint láthatjuk, 1 kisebb, mint 3; ezért kulcsként a 3-ból álló csomópont bal oldalán lesz beszúrva kulcsként.
    B Fa vizualizáció
    4.5. ábra. Beillesztés 1
  7. Most beillesztjük a fába a 16-os adatelemet, amely nagyobb, mint 11, de kisebb, mint 21. A csomópontban lévő kulcsok száma azonban meghaladja a kulcsok maximális számát. Ezért a csomópont kettéválik, és a középső kulcsot a gyökérbe mozgatja. Ezért a 16 az 5-től jobbra lesz beszúrva, és a 11-et és a 21-et két különálló csomópontra osztja.
    B Fa vizualizáció
    4.6. ábra. Beillesztés 16
  8. A 8-as adatelem kulcsként kerül beillesztésre a 11-től balra.
    B Fa vizualizáció
    4.7. ábra. Beillesztés 8
  9. A fába 13-at fogunk beszúrni, ami 16-nál kisebb és 11-nél nagyobb. Ezért a 13-as adatelemet a 8-as és 11-es csomóponttól jobbra kell beilleszteni. Mivel azonban a fában a kulcsok maximális száma Ha csak 2, akkor felosztás történik, és a középső 11 adatelem a fenti csomópontba kerül, a 8 és 13 pedig két különálló csomópontba. Most a fenti csomópont 5-ből, 11-ből és 16-ból fog állni, ami ismét meghaladja a maximális kulcsszámot. Ezért lesz egy másik felosztás, aminek következtében a 11 adatelem lesz a gyökércsomópont, amelynek gyermekei 5 és 16.
    B Fa vizualizáció
    4.8. ábra. Beillesztés 13
  10. Mivel a 4. adatelem kisebb, mint 5, de nagyobb, mint 3, az 1-ből és 3-ból álló csomópont jobb oldalára kerül beillesztésre, ami ismét meghaladja a kulcsok maximális számát egy csomópontban. Ezért ismét kiömlés történik, és a 3-at az 5-ös melletti felső csomópontra helyezi.
    B Fa vizualizáció
    4.9. ábra. Beillesztés 4
  11. Végül a 9-es adatelem, amely nagyobb, mint 8, de kisebb, mint 11, kulcsként bekerül a 8-as csomópont jobb oldalán.
    B Fa vizualizáció
    4.10. ábra. Beillesztés 9

A fenti példában különböző összehasonlításokat végeztünk. Az első érték közvetlenül bekerült a fába; ezt követően minden értéket össze kellett hasonlítani a fában elérhető csomópontokkal. A beszúrási művelet időbonyolultsága egy B fában a csomópontok számától és a .

Művelet törlése egy B fán

Egy adatelem törlése egy B fán három elsődleges eseményt tartalmaz:

  1. Keresi azt a csomópontot, ahol a törölni kívánt kulcs található,
  2. A kulcs törlése, és
  • Ha szükséges, kiegyensúlyozza a fát.

Amikor egy elemet töröl a fából, az Underflow néven ismert állapot léphet fel. Alulcsordulás akkor fordul elő, ha egy csomópont a minimális számú kulcsból áll; tartania kellene.

A törlési/eltávolítási művelet megjelenítése előtt meg kell érteni a következő kifejezéseket:

    Rendelési előd:A csomópont bal oldali gyermekén található legjelentősebb kulcs a sorrendben lévő elődjeként ismert.Rendelési utód:A csomópont jobb gyermekén lévő moll kulcsot a sorrendben utódjaként ismerjük.

Az alábbiakban a törlési művelet három kiemelkedő esete látható egy B fában:

1. eset: A kulcs törlése/eltávolítása a Leaf csomópontban található - Ez az eset még két különböző esetre oszlik:

1. A kulcs törlése/eltávolítása nem sérti a kulcsok minimális számának tulajdonságát, amelyet egy csomópontnak tartalmaznia kell.

Vizualizáljuk ezt az esetet egy példa segítségével, ahol a következő B fából töröljük a 32-es kulcsot.

B Fa vizualizáció

4.1. ábra: Egy levél csomópont kulcsának (32) törlése a B fából

Mint láthatjuk, a 32 törlése ebből a fából nem sérti a fenti tulajdonságot.

2. A kulcs törlése/eltávolítása sérti a csomópontban tárolt kulcsok minimális számának tulajdonságát. Ebben az esetben kölcsön kell kölcsönöznünk egy kulcsot annak közeli testvércsomópontjától, balról jobbra sorrendben.

ábécé számozott

Először is meglátogatjuk a közeli baloldali testvért. Ha a bal oldali testvér csomópontnak a minimálisnál több kulcsa van, akkor ettől a csomóponttól kölcsönöz egy kulcsot.

Ellenkező esetben ellenőrizni fogjuk, hogy a közeli jobb oldali testvér csomóponttól kérjünk kölcsönt.

Vizualizáljuk ezt az esetet egy példa segítségével, ahol a fenti B fából töröljük a 31-et. Ebben az esetben kölcsönkérünk egy kulcsot a bal oldali testvércsomóponttól.

B Fa vizualizáció

4.2. ábra: Egy levél csomópont kulcsának (31) törlése a B fából

Ha mindkét közeli testvércsomópont már minimális számú kulcsból áll, akkor a csomópontot vagy a bal oldali testvércsomóponttal egyesítjük, vagy a jobb oldali testvércsomóponttal. Ez az egyesítési folyamat a szülőcsomóponton keresztül történik.

Vizualizáljuk újra úgy, hogy töröljük a 30-as kulcsot a fenti B fából.

B Fa vizualizáció

4.3. ábra: Egy levél csomópont kulcsának (30) törlése a B fából

2. eset: A kulcs törlése/eltávolítása a nem Leaf csomópontban rejlik - Ez az eset további esetekre oszlik:

1. Az eltávolított nem levél/belső csomópont helyébe egy sorrendbeli előd lép, ha a bal oldali gyermekcsomópontnak több kulcsa van, mint a minimális számú kulcs.

Vizualizáljuk ezt az esetet egy példa segítségével, ahol a 33-as kulcsot töröljük a B fából.

B Fa vizualizáció

4.4. ábra: Egy levél csomópont kulcsának (33) törlése a B fából

2. Az eltávolított nem Leaf/Belső csomópont helyébe egy sorrendi utód kerül, ha a jobb oldali gyermekcsomópontnak több kulcsa van, mint a minimális számú kulcs.

Ha bármelyik gyermeknek van minimális számú kulcsa, akkor összevonjuk a bal és a jobb gyermek csomópontokat.

Vizualizáljuk ezt az esetet úgy, hogy töröljük a 30-as kulcsot a B fából.

B Fa vizualizáció

4.5. ábra: Egy levél csomópont kulcsának (30) törlése a B fából

Egyesítés után, ha a szülőcsomópontnak kevesebb kulcsa van, mint a minimális számú kulcs, meg lehet keresni a testvéreket, mint a 1. eset .

3. eset: A következő esetben a fa magassága csökken. Ha a célkulcs egy belső csomópontban található, és a kulcs eltávolítása kevesebb kulcsot eredményez a csomópontban (ami kevesebb, mint a minimálisan szükséges), akkor keresse meg a sorrendbeli elődöt és a sorrendi utódát. Ha mindkét gyereknek megvan a minimális számú kulcsa, akkor a kölcsönzés nem lehetséges. Ez ahhoz vezet 2. eset (3) , azaz a gyermek csomópontok összevonása.

Újra meg fogjuk keresni a testvért, hogy kulcsot kérjünk. Ha azonban a testvér is minimális számú kulcsból áll, akkor a csomópontot összevonjuk a testvérrel a szülőcsomóponttal együtt, és a gyermekcsomópontokat a követelmények szerint rendezzük el (növekvő sorrendben).

Vizualizáljuk ezt az esetet egy példa segítségével, ahol a 10-es adatelemet töröljük az adott B fából.

B Fa vizualizáció

4.6. ábra: Egy levél csomópont kulcsának (10) törlése a B fából

A fenti példákban az idő bonyolultsága attól függően változik, hogy a kulcsot melyik helyről kell törölni. Így a törlési művelet időbeli összetettsége egy B fában az O(log?n) .

A következtetés

Ebben az oktatóanyagban megismerkedtünk a B fával, és különböző példákkal szemléltettük annak különböző műveleteit. Megértettük a B fa néhány alapvető tulajdonságát és szabályát is.