You are on page 1of 33

Struktura indeksa: B-stablo

http://cis.stvincent.edu/html/tutoria ls/swd/btree/btree.html

Uvod
ISAM (Index-Sequential Access Method, IBM sredina 60-tih godina 20. veka) Nedostaci: sekvencijalno pretraivanje indeksa Poboljanje: indeks nad indeksom Uoptavanje: drvoidna indeksna struktura
svaki nivo osim nivoa lista je redak indeks ilustracija

ISAM

Definicije
Graf
Usmereni graf je ure eni par (A, r), gde je A konani skup a r binarna relacija nad skupom A. Elemente skupa A zovemo vorovi, a elemente skupa r potezi. Ako je (ai, aj ) r poteg, kae se da je vor ai neposredni prethodnik vora aj , a da je vor aj neposredni sledbenik vora ai; tako e, vor ai je izlazni vor potega (ai, aj ), a vor aj je ulazni vor potega (ai, aj ). Ulazni red vora ai je broj potega kojima je taj vor ulazni vor, a izlazni red vora ai je broj potega kojima je taj vor izlazni vor. Putanja duine n od vora ai do vora ak u grafu je niz vorova (ai, ai+1, ... , ai+n), takvih da je ai+n = ak i (aj, aj+1) r za svako j = i, i + 1, ..., i+n-1. Putanja od vora ai do vora ak, duine vee od 1, za koju vai da je ai = ak, zove se ciklus.

Stablo
Stablo Graf je stablo ako zadovoljava sledee uslove:
ulazni red svakog vora (osim jednog) je 1; ulazni red jednog vora je 0, i taj vor se zove koren stabla; izlazni red svakog vora je 0 i konaan; graf ne sadri cikluse.

vorovi bez neposrednih sledbenika zovu se listovi stabla (izlazni red svakog lista je 0); visina stabla je maksimalna duina putanje od korena do nekog lista stabla. vorovi neposredni sledbenici istog vora zovu se braa

Stablo reda m
Stablo reda m je stablo u kome je izlazni red svakog vora manji ili jednak m (svaki vor ima najvie m sledbenika). Svaki vor sadri odre en broj kljueva; vor sa k sledbenika sadri tano k - 1 kljueva. Ako su kljuevi i podstabla ure eni kao kod stabla pretrage, stablo reda m naziva se stablom pretrage reda m. Primer: stablo pretrage reda 4 (prvi red vora prikazuje kljueve, drugi red pokazivae na vorove sledbenike). U realnoj situaciji, umesto kljua bie ceo slog, pa e u prvom redu biti niz slogova koji ukljuuje klju i pridruene podatke (ili klju i redni broj sloga, ako su slogovi smeteni u posebnoj datoteci).

Stablo pretrage reda m: primer

Stablo pretrage reda m: osobine


vor stabla pretrage reda m moe da se predstavi strukturom sa brojem kljueva (int Broj) i dva niza: nizom Kljucevi od m-1 kljueva nekog tipa i nizom Grane od m pokazivaa na strukture istog tipa
Struct NodeType { int Broj; // broj kljueva smetenih u tekuem voru tipKljuca Kljucevi[m-1]; // niz za najvie m-1 kljuceva struct NodeType *Grane [m]; // niz pokazivaa } N;

U tom sluaju, stablo pretrage reda 4 (slino za m) treba da zadovolji sledee uslove u vezi sa ure enjem kljueva:

Stablo pretrage reda m: osobine


Kljuevi u svakom voru su u rastuem poretku. U svakom voru N vai:
Podstablo koje poinje u strukturi N.Grane[0] sadri kljueve koji su manji od N.Kljucevi[0]. Podstablo koje poinje u strukturi N.Grane[1] sadri kljueve koji su vei od N.Kljucevi[0] i istovremeno manji od N.Kljucevi[1]. Podstablo koje poinje u strukturi N.Grane[2] sadri kljueve koji su vei od N.Kljucevi[1] i istovremeno manji od N.Kljucevi[2]. Podstablo koje poinje u strukturi N.Grane[3] sadri kljueve koji su vei od N.Kljucevi[2].

Ne govorimo o duplikatima

B-stablo
Posebno poeljna osobina stabla pretrage reda m, kada je u pitanju efikasnost njegovog pretraivanja, jeste balansiranost koja oznaava da je duina puta od korena do svakog lista jednaka. Visina stabla: logmBr, Br ukupan broj kljueva u stablu; obino 3-4 (npr. 10000000 kljueva, m=50, visina 4)

Jedna specifina struktura balansiranog stabla, poznata kao Bstablo, posluila je kao osnov za izgradnju niza struktura podataka koje se koriste u implementaciji indeksa. Struktura specijalizovana za korienje na disku vorovi blokovi fiksne veliine na disku stranice Puno kljueva na jednoj stranici, puno sledbenika, veliki red m velika efikasnost pristupa podacima na disku

B-stablo
B-stablo reda m je stablo pretrage reda m takvo da:
Svi listovi su na najniem nivou (stablo je balansirano) Svi unutranji vorovi (osim moda korena) imaju najmanje ceil(m / 2) (nepraznih) sledbenika. Koreni vor, ako nije list, ima najmanje 2 sledbenika, a ako je istovremeno i list onda nema sledbenika (i stablo se sastoji samo od tog jednog vora) Svaki list sadri najmanje ceil(m / 2) - 1 kljueva

B-stablo je osnovna drvoidna indeksna struktura Sadri podatke (kljueve tj. slogove) na svim nivoima Popunjenost stranice min 50%, u proseku oko 70% Modifikacije: B* stablo, B+ stablo, sa veom popunjenou / razdvojenim indeksom od podataka / sekvencijalnou nad podacima

B-stablo: primer - red 5

Operacije nad B-stablom: pretraivanje


(1) Neka je stranica N - korena stranica (2) Pretraiti stranicu N na klju Klj (3) Ako je klju Klj na en, pretraivanje uspeno (4) Inae,
Ako je stranica N list, pretraivanje je neuspeno Inae, nai me u kljuevima N.Kljucevi[0], N.Kljucevi[1], N.Kljucevi[2], , N.Kljucevi[Br-1] najmanji klju koji je vei od Klj; neka je to klju N.Kljucevi[j]; N postaje stranica na koju pokazuje pokaziva N.Grane[j-1]; prei na korak 2.

Primer: pretraiti prethodno stablo na kljueve S, J, A

Operacije nad B-stablom: unoenje


Pretraiti B-stablo kljuem unoenja Ako klju nije na en, pretraga je zavrena u listu
(1) Ako ima mesta u listu, uneti klju u list uz eventualna pomeranja (2) Ako je list pun, treba ga pocepati:
(2.1) oko polovine kljueva ostaje na starom listu (2.2) oko polovine kljueva ide na novi list desno od postojeeg (2.3) srednji klju se penje u roditeljski vor, pomeraju se kljuevi i pokazivai

Operacije nad B-stablom: unoenje (nast.)


(3) Ako u roditeljskom (unutranjem) voru nema mesta, i on se cepa:
(3.1) oko polovine kljueva ostaje na starom voru (3.2) oko polovine kljueva ide u novi vor desno od postojeeg (3.3.) srednji klju se penje u roditeljski vor, uz pomeranje kljueva i pokazivaa (rekurzivno korak 3)

(4) Ako se pocepa koreni vor, srednji klju ide u novi koreni vor; visina stabla se poveava za 1

Ako je klju na en unoenje se ne vri (sluaj bez duplikata)

B-stablo: unoenje - primer


Unose se sledea slova u (na poetku) prazno B stablo reda 5: CNGAHEKQMFWLTZDPRXYS Red 5 znai da vor moe da ima najvie 5 neposrednih sledbenika i 4 kljua (najmanje 3 neposredna sledbenika i 2 kljua). Svi vorovi osim korena moraju da imaju najmanje 2 kljua (koren ima najmanje 1 klju). Prva 4 slova (C N G A ) se unose u isti (prvi) vor:

Unoenje kljueva H E K Q M: cepanje lista (H, 2), (M, 4)

Unoenje kljueva F W L T Z: cepanje lista (Z, 2)

Unoenje kljueva D P R X Y: cepanje lista (D)

Unoenje kljua S:
cepanje lista i unutranje stranice; novi koren, poveanje visine stabla

B-stablo: brisanje - algoritam


Brisanje se uvek svodi na brisanje iz lista (1) Ako se brie klju iz lista onda
(1.1) Ako ostaje dovoljno kljueva, vri se samo pomeranje (1.2) Ako ne ostaje dovoljno kljueva onda
(1.2.1) Ako susedni brat (vor) ima viak kljueva, najmanji klju iz desnog (odnosno najvei iz levog brata) se penje u vor-prethodnik, a klju iz prethodnika se sputa u vor iz kojeg smo izbrisali klju (1.2.2) Ako nijedan susedni brat nema viak kljueva, vor iz kojeg smo izbrisali klju spaja se sa levim ili desnim bratom, uz dodavanje razdvojnog kljua iz vora-prethodnika. Ako vor-prethodnik nema dovoljno kljueva, vri se rotacija preko njegovog vora-prethodnika, ili spajanje sa bratom

(2) Ako se brie klju iz unutranjeg vora, onda se umesto njega penje najmanji klju iz njegovog sledbenika; klju koji se penje brie se iz vora u kome je bio pravilo se primenjuje rekurzivno i svodi na brisanje iz lista

B stablo: brisanje - primer


Izbrisati klju H (pravilo 1.1)

Izbrisati klju T (pravilo 2). Svodi se na brisanje, iz lista, neposrednog sledbenika u ure enju, W (penje se na mesto T)

Izbrisati klju R (pravilo 1.2.1). Svodi se na rotaciju, tj. prelivanje iz desnog suseda (X, penje se) preko roditeljskog kljua W (sputa se)

Izbrisati klju E (pravilo 1.2.2). vor se spaja sa levim bratom uz dodavanje kljua D iz roditeljskog vora. Unutranji vor sa kljuem G spaja se sa bratom uz sputanje kljua M. Visina drveta se smanjuje za 1.

B-stablo primer 2.
Izbrisati klju C korak 1 (pravilo 2):

Korak 2 (pravilo 1.2.2)

Korak 3 (pravilo 1.2.2 nast.). vor sa kljuevima K, L promenio je prethodnika i brau!

http://www.csanimated.com/animation.php ?t=B-tree http://wiki.algoviz.org/AlgovizWiki/B-Trees http://www.cs.hut.fi/Research/TRAKLA2/e xercises/BTree_insert.html

B*-stablo
Cepanje pune stranice u B-stablu je skupa operacija Umesto cepanja prelivanje u susedne vorove - brau B*-stablo pretrage reda m je balansirano stablo pretrage reda m za koje vai:
Svaki vor, osim korena i listova, ima najmanje (2m1)/3 neposrednih sledbenika (podstabala), to podie popunjenost na najmanje 2/3 Koren ima najmanje 2 neposredna sledbenika vor koji nije list ima k neposrednih sledbenika i k-1 kljueva

B*-stablo - operacije
Pretraivanje kljua je isto kao kod B-stabla Unoenje (uvek u list) analogno unoenju u B-stablo, OSIM to:
Ako je list pun, pokuava se prelivanje desnim ili levim bratom:
urede se svi kljuevi iz lista, izabranog brata, razdvojni klju (iz neposrednog prethodnika) i klju koji se unosi (ukupno m-1+k+1+1 kljueva) floor((m+k+1)/2) kljueva (manjih ili veih, u zavisnosti od toga da li se preliva iz desnog ili levog brata) ostaje na starom listu, a ostali idu u desni / levi brat (sredinji se penje)

Ako prelivanje ne uspe, cepaju se 2 vora (i puni list i njegov brat) na 3 vora, tako to u prvi ide floor((2m-2)/3), u drugi floor((2m-1)/3) a u trei floor((2m)/3) kljueva, a u vor neposredni prethodnik idu dva razdvojna kljua Prethodno pravilo se propagira po potrebi sve do korena

B*-stablo - operacije
Brisanje: spajanje 3 vora u 2 (ako je potrebno) Bolja popunjenost, manja visina i efikasnije operacije u odnosu na B-stabla

B*-stablo - primer

You might also like