Presentation is loading. Please wait.

Presentation is loading. Please wait.

Curs 2 Structuri de date avansate pentru cautare 2-3 arbori B-arbori

Similar presentations


Presentation on theme: "Curs 2 Structuri de date avansate pentru cautare 2-3 arbori B-arbori"— Presentation transcript:

1 Curs 2 Structuri de date avansate pentru cautare 2-3 arbori B-arbori
arbori bicolori Tabele hash Arbori digitali

2 2-3-arbori: definitie valStg valStg valMij subarbore stanga mijlociu
orice nod intern v are 2 fii (este de aritate 2) sau 3 fii (este de aritate 3) valStg valStg valMij subarbore stanga mijlociu dreapta p->stg p->drp p->mij

3 2-3-arbori : definitie valStg valStg < y x < valStg
pentru orice nod v de aritate 2, valorile memorate in subarborele stinga < vvalStg < valorile memorate in subarborele mijlociu valStg x < valStg valStg < y

4 2-3-arbori : definitie valStg valMij x< valStg valStg< y <
pentru orice nod v de aritate 3, valorile memorate in subarborele stinga < vvalStg < valorile memorate in subarborele mijlociu < vvalMijl < valorile memorate in subarborele dreapta valStg valMij x< valStg valStg< y < valMij<z

5 2-3-arbori : definitie toate nodurile de pe frontiera au acelasi nivel h

6 cautare in 2-3-arbore function poz23Arb(t, a) begin p  t
while (p != NULL) do switch(cmp(a, p)) case 1: p  p->stg; break; case 2: p  p->mij; break; case 3: p  p->drp; break; case 4: return p; return p end

7 inserare in 2-3-arbore 10; 20 40; 50 70;  90;  110; 120 30; 60 100;  80;  35 10; 20 70;  90;  110; 120 30; 60 100;  80;  40 35;  35;  50;  50; 

8 iserare 2-3-arbore (continuare)
10; 20 50;  70;  90;  110; 120 35;  100;  80;  40 30;  60;  40; 80 10; 20 50;  70;  90;  110; 120 35;  100;  60;  30; 

9 iserare 2-3-arbore (continuare)
subprograme necesare radNoua(t, x, q) t: intrare – rad subarb. stg. iesire – noua rad. q rad. subarb. drp poz23ArbMod(t, x, s) memoreaza drumul in stiva s insInNod(p, x, q) similar subprogramului radNoua() imparte(p, x, q) similar subprogramului insInNod()

10 iserare 2-3-arbore (continuare)
procedure ins23Arb(t, x) begin if (t == NULL) then radNoua(t, x, NULL) else p = poz23ArbMod(t, x, s) if (p == NULL) then throw ”x in t” else q  NULL while(true) do if (p->valMij = ) then insInNod(p, x, q); break imparte(p, x, q) if (p = t) then radNoua(t, x, q); break; else p = top(s); pop(s); end

11 stergere 2-3-arbore 10; 20 50;  90;  110; 120 35;  100;  60;  30;  40; 80 70;  10; 20 90;  110; 120 35;  100;  30;  40; 80 50; 60

12 stergere 2-3-arbore: combinare
50; 60 10; 20 90;  110; 120 35;  100;  30;  40; 80 80;  10; 20 35;  50; 60 90;  110; 120 100;  30; 40

13 stergere 2-3-arbore: rotatie
roteste dreapta 100;  ;  30; 40 50; 80 60 100;  50;  30;  40; 80

14 stergere 2-3-arbore modifica p
atat timp cat p are zero elemente && p nu e radacina fie r radacina lui p fie q fratele lui p (stg. sau drp. dupa caz) daca q este de aritate 3 atunci roteste altfel combina r devine p Exerc. Sa se scrie procedura de stergere Teorema Clasa 2-3-arborilor este O(log n)-stabila.

15 B-arbori - motivatie Un index ordonat este un fisier secvential. Pe masura ce dimensiunea acestuia creste, cresc si dificultatile de administrare Solutia: indexarea pe mai multe nivele . un posibil instrument : B arborii Algoritmii de cautare intr-un index ( fisier) neorganizat pe nivele nu pot depasi performanta O(log2n) intrari/iesiri (I/O) Indexarea pe mai multe nivele are ca rezultat algoritmi de cautare de ordinul O( logd n) I/O, unde d = dimensiunea elementului din arborele de index

16 Organizarea pe nivele a indexului

17 B-arbori Fiecare nod are un numar variabil de chei si fii
Cheile sunt memorate in ordine crescatoare Fiecare cheie are asociat un fiu care este radacina unui subarbore ce contine toate nodurile cu chei <= cheia respectiva dar mai mari decat cheia precedenta Un nod are de asemenea un fiu extrem-dreapta care care este radacina unui subarbore ce contine toate nodurile cu chei > orice cheie din nod Fiecare nod are cel putin un numar de f-1 chei (f fii) f = factorul de minimizare Doar radacina poate avea mai putin de f fii Fiecare nod are cel mult 2f-1 chei (2f fii) Lungimea oricarui drum de la radacina la o frunza trebuie sa fie aceeasi

18 B-arbore: structura unui nod

19 Optimizarea accesului la disc
Daca fiecare nod necesita accesarea discului atunci B-arborii vor necesita numar minim de astfel de accesari Factorul de minimizare va fi ales astfel incat dimensiunea unui nod sa corespunda unui multiplu de blocuri ale dispozitivului de memorare Aceasta alegere optimizeaza accesarea discului Inaltimea h a unui B-arbore cu n > 0 chei si f > 1 este h <= logf[(n+1)/2]

20 B-arbori: cautarea function B-Tree-Search(v, k) i  0;
while (i < v->nrChei  k > v->cheie[i]) do i  i + 1 if (i <= v->nrChei  k = v->cheie[i] ) then return (v, i) if (v->tipNod = frunza) then return NULL citesteDisk(v->fiu[i]) return B-Tree-Search(v->fiu[i], k) end

21 B-arbori: insertia Pentru a efectua o insertie intr-un B-arbore trebui intai gasit nodul in care urmeaza a se face insertia. Pentru aceasta se aplica un algoritm similar cu BTree-Search. Apoi cheia urmeaza a fi inserata Daca nodul determinat anterior contine mai putin de 2f-1chei se face inserarea Daca acest nod contine 2f-1 chei urmeaza spargerea acestuia Procesul de spargere poate continua pana in radacina Pentru a evita doua citiri de pe disc ale aceluiasi nod, algoritmul sparge fiecare nod plin (2f-1 chei) intalnit la parcurgea top-down in procesul de cautare a nodului in care urmeaza a se face inserarea Timpul de spargere a unui nod este O(f) Rezulta pentru insertia complexitatea timp O(f log n)

22 B-arbori: eliminarea daca nodul gazda a cheii ce urmeaza a fi stearsa nu este frunza, atunci se efectueaza o interschimbare intre acesta si succesorul sau in ordinea naturala a cheilor. Se repeta operatia pana se ajunge intr-o frunza, care devine nod curent; se sterge intrarea corespunzatoare cheii; daca nodul curent contine cel putin f-1 chei, operatia de stergere se considera terminata; daca nodul curent contine mai putin decat f-1 chei se considera fratii vecini; daca unul din fratii vecin are mai mult decat f-1 chei, atunci se redistribuie una dintre intrarile acestui frate in nodul parinte si una din intrarile din nodul parinte se redistribuie nodului curent (deficitar); daca ambii fratii au exact f-1 chei, atunci se uneste nodul curent cu unul dintre fratii vecini si cu o intrare din parinte; daca nodul parinte devine deficitar (contine mai putin decat f-1 chei) acesta devine nod curent si se reiau pasii 5-6.

23 Arbori bicolori un arbore bicolor este caracterizat de urmatoarele proprietati: sint arbori binari de cautare in care nodurile pendante (coresp. intervalelor) fac parte din structura fiecare nod este colorat cu negru sau rosu toate nodurile de pe frontiera sint negre daca un nod este rosu atunci ambii fii ai acelui nod sint negri pentru orice nod v, toate drumurile simple care pleaca din acel nod si se opresc intr-un nod de pe frontiera, au acelasi numar de noduri negre

24 Exemplu de arbore bicolor
70 40 20 60 50 100 80 90 110

25 arbori bicolori - proprietati
Notatie bh(x) = numarul de noduri negre aflate pe un drum din x pe frontiera (x nu se considera) bh(x) nu depinde de drum (ultima conditie) Lema Subarborele cu radacina in x contine cel putin noduri interne. Teorema Inaltimea unui arbore bicolor este cel mult 2log(n + 1). Arborii bicolori sint echilibrati.

26 arbori bicolori - inserare
2 1 14 11 7 8 15 4 5 x y unchiul lui x recolorare

27 arbori bicolori - inserare
2 1 14 11 7 8 15 4 5 x y unchiul lui x roteste stanga

28 arbori bicolori - inserare
7 1 14 11 2 8 15 4 5 x y unchiul lui x roteste dreapta

29 arbori bicolori - inserare
recoloreaza 7 1 14 11 2 8 15 4 5

30 arbori bicolori - inserare
7 2 11 1 14 5 8 15 4

31 Hashing (dispersie) Tipul de data abstract TabelaDeSimboluri
entitati de tip data: o colectie de perechi (nume, atribute) in care numele identifica unic perechea operatii: Atribut(TS, nume) – cauta numele in tabela TS numele nume si intoarce atributele acestuia (daca il gaseste) Insereaza(TS, nume, atribut)- insereaza in tabela TS perechea (nume, atribut) Elimina(TS,nume) – cauta in tabela TS numele nume si daca-l gaseste il elimina impreuna cu atributele sale.

32 Hashing (dispersie) Implementarea prin tehnica dispersiei
structura de date o tabela (hash sau de dispersie) T[0..p-1] cu p numar prim de obicei o functie hash h: mult. numelor  [0..p-1]

33 Hashing (continuare I)
operatii cautarea i = h(nume) if (T[i]  ) then return T[i]->atrib inserarea then throw “ERR: coliziune” else T[i]->atrib  atribut eliminarea then T[i]  

34 Hashing (continuare II)
Alegerea functiei hash h(x) = x % p h( ) = ( )%p daca x este sir: unsigned hashVal=0; while (*x != ‘\0’) hashVal = (hashVal << 5) + *x++; return hashVal % p

35 Hashing (continuare III)
coliziunea inlantuire numarul mediu de comparatii in cazul cautarilor cu succes = 1 + b/2, unde b = #S/p este factorul de incarcare al tabelei adresare deschisa liniara se cerceteaza pe rind pozitiile h(x,i), i = 0,1,2, ... unde h(x,i) =(h1(x)+i) % p numarul mediu de comparatii in cazul cautarilor FARA succes = 1/(1-b) numarul mediu de comparatii in cazul cautarilor CU succes = ½(1 + 1/(1-b))

36 Arbori digitali - I Cazul cheilor de aceeasi lungime S = {102, 120, 121, 210, 211, 212}

37 Arbori digitali - II algoritmul de cautare function poz(a, m, t) i  0
p  t while ((p != NUL) && (i<m)) do p  succ[a[i]] i  i+1 return p end

38 Arbori digitali - III Cazul cheilor de lungime diferita

39 Arbori digitali - IV compactarea lanturilor

40 Arbori digitali - V Inserarea lui 0111 in structura compactata

41 Arbori digitali - VI Eliminarea lui 1011 in structura compactata


Download ppt "Curs 2 Structuri de date avansate pentru cautare 2-3 arbori B-arbori"

Similar presentations


Ads by Google