1 / 13

Miskolci Egyetem Informatikai Intézet Általános Informatikai Tanszé k Pance Miklós

Miskolci Egyetem Informatikai Intézet Általános Informatikai Tanszé k Pance Miklós Adatstruktúrák, algoritmusok előadásvázlat Miskolc, 2004 Technikai közreműködő: Imre Mihály, műszaki informatikus hallgató. B-fák.

Download Presentation

Miskolci Egyetem Informatikai Intézet Általános Informatikai Tanszé k Pance Miklós

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Miskolci Egyetem Informatikai Intézet Általános Informatikai Tanszék Pance Miklós Adatstruktúrák, algoritmusok előadásvázlat Miskolc, 2004 Technikai közreműködő: Imre Mihály, műszaki informatikus hallgató

  2. B-fák • Nem bináris fa. Az M-ed rendű B-fa a következő szerkezeti tulajdonságú fa: • a gyökér vagy levél, vagy 2 és M közötti gyereke van, • minden nem levél csúcsnak a (gyökér kivételével) [M/2] és M közötti gyereke van, • minden levél azonos mélységben van. • Minden adatot a levelekben tárolunk. Minden belső csomópontban a gyerekekre mutatóP1, P2, ..., PMpointereket, és azokat a legkisebb k1, k2, ..., kM-1 kulcsértékeket tároljuk, melyek P2, P3, ..., PM alfákban találhatóak. Természetesen ezen mutatók nil-ek is lehetnek és akkor a megfelelő kulcsérték definiálatlan. 2

  3. B-fák Minden csúcsra a P1 alfában található összes kulcs kisebb a P2 alfában található kulcsoknál, és így tovább. A levelek a tényleges adatokat tartalmazzák, amik vagy maguk a kulcsok, vagy a kulcsot tartalmazó rekordra mutató pointerek. Ennek a definíciónak léteznek variációi, de ez a legáltalánosabban elfogadott. Most azt is kikötjük, hogy a levelekben [M/2] és M közötti kulcs legyen. 3

  4. 21 48 72 12 15 25 31 41 59 84 91 84, 88 15, 18, 19 1, 4, 8, 11 12, 13 21, 24 25, 26 31, 38 41, 43, 46 48, 49, 50 59, 68 72, 78 91, 92, 99 B-fák A4-ed rendű B-fát szokták 2-3-4 fának is nevezni, pl.: 4

  5. 22 : - 16 : - 41 : 58 58, 59, 61 16, 17 22, 23, 31 41, 52 8, 11, 12 B-fa műveletek A B-fa műveleteit egy 2-3 fán mutatjuk be: a belső pontok , levél a kulcsokkal: , a leveleken a kulcsok rendezettek. Keresés: a gyökértől indul, összehasonlít, megy tovább... 5

  6. 22 : - 11 : 16 41 : 58 58, 59, 61 1, 8 16, 17, 18 22, 23, 31 41, 52 11, 12 B-fa műveletek Beszúrás: keresés a levélig, pl. a 18, majd az 1 beszúrása: a levélen 4 érték lenne (maximum 3 lehet) kettévágjuk és a szülők információit kiigazítjuk: 6

  7. 22 : - 58, 59, 61 22, 23, 31 41, 52 18, 19 1, 8 16, 17 11, 12 41 :58 16 : 22 18 : - 11 : - 58, 59, 61 18, 19 22, 23, 31 41, 52 1, 8 16, 17 11, 12 41 : 58 11 : 16 B-fa műveletek Az 19 beszúrásánál a szülő csúcsot is ketté kell vágni: 7

  8. 11 : - 18 : - 41 :58 16 : 22 58, 59, 61 18, 19 22, 23 28, 31 1, 8 16, 17 41, 52 11, 12 B-fa műveletek Az 28 beszúrásánál a nagyszülő csúcsot(gyökér) is ketté kell vágni, a fa magassága eggyel nő: 8

  9. 28 : - 58 : - 16 : 22 11 : - 18 : - 16 : - 28 : - 58 : - 41 : - 22 : - 58, 59, 61 28, 31 41, 52 22, 23 B-fa műveletek 9

  10. 59, 61, 70 41, 52, 58 B-fa műveletek Csak az elérési úton kell változtatásokat végezni és ez az útvonal hosszával arányos. Egy más módszer a túlterhelés kezelésére (bár az előző talán a legegyszerűbb), a kettévágás helyett először megpróbálunk egy kétkulcsos testvért keresni. Pl. a 70 beszúrását végezhetjük úgy is, hogy az 58-at áttesszük a baloldali testvérhez: és a szülőknél is aktualizálunk: 58  59. Ez a stratégia a belső csúcsokban is alkalmazható. Így a csúcspontok telítettebbek lesznek. Egy kicsit bonyolultabb a rutin, de kevesebb tárolóhelyet vesztegetünk. 10

  11. B-fa műveletek • Törlés: megkeressük, eltávolítjuk, ha egy érték maradna akkor, ha a testvérének • 3 kulcsa van, akkor egyet ellopunk, • 2 kulcsa van, akkor összevonjuk őket. • a szülő vesztett egy gyereket, felbugyborékoltatjuk a gyökérig, ha a gyökérnek már csak egy gyereke marad, akkor töröljük a gyökeret, csökken a magasság. • Általában az M-ed rendű B-fánál, a kulcs beszúrásánál akkor van gond, ha a csúcsnak (ahová való) már M kulcsa van. A B-fa maximális mélysége [log[M/2] N]. Az útvonal minden csúcsában O(log M) munkával választjuk ki a megfelelő ágat (bináris kereséssel). Az Insert vagy DeleteO(M) munkát igényelhet a csúcspontban. Így a legrosszabb esetben O(M logM N) =O( M * log N / logM), a keresés pedigO(log N) hatékonyságú. 11

  12. B-fa műveletek Empirikusan az M=3,4 a legjobb, ha csak fő memóriát használunk. Adatbázis rendszereknél a fát lemezen tároljuk. A lemez műveletek száma O(logM N), ezen belül a keresés O(log M), de ez most a lemez művelet idejénél nagyságrendekkel kisebb. Ezért az M értékét úgy választjuk, hogy egy csomópont adatai egy blokkot foglaljanak el: 32 <= M <= 256. Mivel egy ilyen fa mélysége 2,3,... , nagyon kevés lemez művelet kell (a gyökér és talán az első szint is a memóriában lehet). Analízisek mutatják, hogy ajánlatos a B-fát69%-ig telíteni (log 2) és hatásos a testvér kihasználása is, a kettévágás helyett. 12

  13. B+-fa A B+-fa testvér mutatókat is alkalmaz. 13

More Related