curs2 structuri avansate pentru cautare
TRANSCRIPT
![Page 1: Curs2 Structuri Avansate Pentru Cautare](https://reader037.vdocuments.site/reader037/viewer/2022102521/5571f88449795991698d9810/html5/thumbnails/1.jpg)
Curs 2
Structuri de date avansate pentru cautare2-3 arboriB-arboriarbori bicoloriTabele hashArbori digitali
![Page 2: Curs2 Structuri Avansate Pentru Cautare](https://reader037.vdocuments.site/reader037/viewer/2022102521/5571f88449795991698d9810/html5/thumbnails/2.jpg)
2-3-arbori: definitie
orice nod intern v are 2 copii (este de aritate 2) sau 3 copii (este de aritate 3)
valStg valStg valMij
subarbore
stanga
subarbore
mijlociu
subarbore
dreapta
p->stg p->drpp->mij
![Page 3: Curs2 Structuri Avansate Pentru Cautare](https://reader037.vdocuments.site/reader037/viewer/2022102521/5571f88449795991698d9810/html5/thumbnails/3.jpg)
2-3-arbori : definitie
pentru orice nod v de aritate 2, valorile memorate in subarborele stinga < vvalStg < valorile memorate in subarborele mijlociu
valStg
x < valStg valStg < y
![Page 4: Curs2 Structuri Avansate Pentru Cautare](https://reader037.vdocuments.site/reader037/viewer/2022102521/5571f88449795991698d9810/html5/thumbnails/4.jpg)
2-3-arbori : definitie
pentru orice nod v de aritate 3, valorile memorate in subarborele stinga < vvalStg < valorile memorate in subarborele mijlociu < vvalMijl < valorile memorate in subarborele dreapta
valStg valMij
x< valStg
valStg<
y <
valMijvalMij<z
![Page 5: Curs2 Structuri Avansate Pentru Cautare](https://reader037.vdocuments.site/reader037/viewer/2022102521/5571f88449795991698d9810/html5/thumbnails/5.jpg)
2-3-arbori : definitie
toate nodurile de pe frontiera au acelasi nivel
h
h
![Page 6: Curs2 Structuri Avansate Pentru Cautare](https://reader037.vdocuments.site/reader037/viewer/2022102521/5571f88449795991698d9810/html5/thumbnails/6.jpg)
cautare in 2-3-arbore
function poz23Arb(t, a)
begin
p twhile (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
![Page 7: Curs2 Structuri Avansate Pentru Cautare](https://reader037.vdocuments.site/reader037/viewer/2022102521/5571f88449795991698d9810/html5/thumbnails/7.jpg)
inserare in 2-3-arbore
35
10; 20 40; 50 70; 90; 110; 120
30; 60 100;
80;
50; 35; 10; 20 70; 90; 110; 120
30; 60 100;
80;
40
50; 35;
![Page 8: Curs2 Structuri Avansate Pentru Cautare](https://reader037.vdocuments.site/reader037/viewer/2022102521/5571f88449795991698d9810/html5/thumbnails/8.jpg)
inserare 2-3-arbore (continuare)
40; 80
10; 20 50; 70; 90; 110; 12035;
100; 60; 30;
60; 30;
10; 20 50; 70; 90; 110; 12035;
100;
80;
40
![Page 9: Curs2 Structuri Avansate Pentru Cautare](https://reader037.vdocuments.site/reader037/viewer/2022102521/5571f88449795991698d9810/html5/thumbnails/9.jpg)
inserare 2-3-arbore (continuare)
subprograme necesareradNoua(t, x, q)
• creeaza o noua radacina cu cheia xt: intrare – rad subarb. stg. iesire – noua rad.q rad. subarb. drp
poz23ArbMod(t, x, s)• memoreaza drumul de la radacina la x in stiva s
insInNod(p, x, q)• insereaza x innodul p
parametri sunt similari subprogramului radNoua()imparte(p, x, q)
• sparge un nodparametri sunt similari subprogramului insInNod()
![Page 10: Curs2 Structuri Avansate Pentru Cautare](https://reader037.vdocuments.site/reader037/viewer/2022102521/5571f88449795991698d9810/html5/thumbnails/10.jpg)
inserare 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
![Page 11: Curs2 Structuri Avansate Pentru Cautare](https://reader037.vdocuments.site/reader037/viewer/2022102521/5571f88449795991698d9810/html5/thumbnails/11.jpg)
stergere 2-3-arbore
daca elemntul sters nu se afla intr-un de pe frontiera, atunci se poate interschimba cu un vecin aflat pe frontiera
vecinul cu care face interschimbarea se poate face ca la arborii binari de cautare
asa ca putem considera numai cazul cand elementul care se sterge se afla pe frontiera
![Page 12: Curs2 Structuri Avansate Pentru Cautare](https://reader037.vdocuments.site/reader037/viewer/2022102521/5571f88449795991698d9810/html5/thumbnails/12.jpg)
stergere 2-3-arbore
70; 10; 20 50; 90; 110; 12035;
100; 60; 30;
40; 80
50; 6010; 20 90; 110; 12035;
100; 30;
40; 80
![Page 13: Curs2 Structuri Avansate Pentru Cautare](https://reader037.vdocuments.site/reader037/viewer/2022102521/5571f88449795991698d9810/html5/thumbnails/13.jpg)
stergere 2-3-arbore: combinare
30; 40
80;
10; 20 35; 50; 60 90; 110; 120
100;
50; 6010; 20 90; 110; 12035;
100; 30;
40; 80
combina
![Page 14: Curs2 Structuri Avansate Pentru Cautare](https://reader037.vdocuments.site/reader037/viewer/2022102521/5571f88449795991698d9810/html5/thumbnails/14.jpg)
stergere 2-3-arbore: rotatie
100; ; 30; 40
50; 80
100; 50; 30;
40; 80
60
roteste dreapta
![Page 15: Curs2 Structuri Avansate Pentru Cautare](https://reader037.vdocuments.site/reader037/viewer/2022102521/5571f88449795991698d9810/html5/thumbnails/15.jpg)
stergere 2-3-arbore
modifica p atat timp cat p are zero elemente && p nu e radacina
fie r radacina lui pfie q fratele lui p (stg. sau drp. dupa caz)daca q este de aritate 3
atunci roteste
altfel combina
r devine p
Exercitiu: Sa se scrie procedura de stergere
Teorema
Clasa 2-3-arborilor este O(log n)-stabila.
![Page 16: Curs2 Structuri Avansate Pentru Cautare](https://reader037.vdocuments.site/reader037/viewer/2022102521/5571f88449795991698d9810/html5/thumbnails/16.jpg)
2-3-4-arbori
sunt generalizari ale 2-3 arborilorun nod intern poate avea 2, 3 sau 4 copiiun nod cu 4 copiii va memora 3 cheise mentin proprietatile de arbore de cautare si aceeasi inltime
pentru toate nodurile de pe frontiera ca si in cazul celorlalti abori de cautare, exista doua moduri de
implementare:elementele multimii memorate in nodurile interne (si frunze)elementele multimii doar in nodurile frunza (pe frontiera)
inserarea se face tot prin spargerea nodurilorla momentul inserarii si propgarea spre radacinasau in timpul cautarii, fiecare nod plin este spart in doua
![Page 17: Curs2 Structuri Avansate Pentru Cautare](https://reader037.vdocuments.site/reader037/viewer/2022102521/5571f88449795991698d9810/html5/thumbnails/17.jpg)
Arbori de cautare pe M-cai
generalizare de la 2-3 si 2-3-4 la M un nod poate avea n copii cu 2 <= n <= M numarul de chei memorate intr-un nod este n-1; cheile k1,..., kn-1
sunt ordonate crescator are proprietatea de arbore de cautare:
elementele memorate in subarborele Ti sunt mai mici decat cheia ki
elementele memorate in subarborele Ti+1 sunt mai mari decat cheia ki
![Page 18: Curs2 Structuri Avansate Pentru Cautare](https://reader037.vdocuments.site/reader037/viewer/2022102521/5571f88449795991698d9810/html5/thumbnails/18.jpg)
B-arbori - motivatie
Un index ordonat este un fisier secvential. Pe masura ce dimensiunea acestuia creste, cresc si dificultatile de administrare
un acces la disc este mult mai scump decat executia unei instructiuni ( 200,000 instructiuni)
memoria secundara (discul) este divizata in blocuri egale (512, 1024, 2048 etc)
o operatie I/O transfera un bloc scopul este de a minimiza numarul de accesari ale discului Solutia: indexarea pe mai multe nivele .
un posibil instrument : B arborii (arbori de cautare multicai)
![Page 19: Curs2 Structuri Avansate Pentru Cautare](https://reader037.vdocuments.site/reader037/viewer/2022102521/5571f88449795991698d9810/html5/thumbnails/19.jpg)
Organizarea pe nivele a indexului
![Page 20: Curs2 Structuri Avansate Pentru Cautare](https://reader037.vdocuments.site/reader037/viewer/2022102521/5571f88449795991698d9810/html5/thumbnails/20.jpg)
B-arbori
sunt arbori de cautare pe M-cai cu proprietatipresupunem ca M = 2f
• f = factorul de minimizare
• ordinul arborelui este 2f-1fiecare nod intern are cel putin un numar de f-1 chei (f fii) si
cel mult 2f-1 chei (2f fii)doar radacina poate avea mai putin de f fiilungimea oricarui drum de la radacina la o frunza trebuie sa
fie aceeasi (generalizeza 2-3 si 2-3-4 arborii)
![Page 21: Curs2 Structuri Avansate Pentru Cautare](https://reader037.vdocuments.site/reader037/viewer/2022102521/5571f88449795991698d9810/html5/thumbnails/21.jpg)
B-arbore: structura unui nod
![Page 22: Curs2 Structuri Avansate Pentru Cautare](https://reader037.vdocuments.site/reader037/viewer/2022102521/5571f88449795991698d9810/html5/thumbnails/22.jpg)
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]
![Page 23: Curs2 Structuri Avansate Pentru Cautare](https://reader037.vdocuments.site/reader037/viewer/2022102521/5571f88449795991698d9810/html5/thumbnails/23.jpg)
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
![Page 24: Curs2 Structuri Avansate Pentru Cautare](https://reader037.vdocuments.site/reader037/viewer/2022102521/5571f88449795991698d9810/html5/thumbnails/24.jpg)
B-arbori: insertia
Pentru a efectua o insertie intr-un B-arbore trebuie 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)
![Page 25: Curs2 Structuri Avansate Pentru Cautare](https://reader037.vdocuments.site/reader037/viewer/2022102521/5571f88449795991698d9810/html5/thumbnails/25.jpg)
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.
![Page 26: Curs2 Structuri Avansate Pentru Cautare](https://reader037.vdocuments.site/reader037/viewer/2022102521/5571f88449795991698d9810/html5/thumbnails/26.jpg)
Arbori bicolori
un arbore bicolor este caracterizat de urmatoarele proprietati:sint arbori binari de cautare in care nodurile pendante
(coresp. intervalelor) fac parte din structurafiecare nod este colorat cu negru sau rosutoate nodurile de pe frontiera sint negredaca un nod este rosu atunci ambii fii ai acelui nod sint
negripentru 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
![Page 27: Curs2 Structuri Avansate Pentru Cautare](https://reader037.vdocuments.site/reader037/viewer/2022102521/5571f88449795991698d9810/html5/thumbnails/27.jpg)
Exemplu de arbore bicolor
70
40
20 60
50
100
80
90
110
![Page 28: Curs2 Structuri Avansate Pentru Cautare](https://reader037.vdocuments.site/reader037/viewer/2022102521/5571f88449795991698d9810/html5/thumbnails/28.jpg)
arbori bicolori - proprietati
Notatiebh(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)
12 )( xbh
Lema
Subarborele cu radacina in x contine cel putin
noduri interne.
TeoremaInaltimea unui arbore bicolor este cel mult 2log(n + 1).
TeoremaArborii bicolori sint echilibrati.
![Page 29: Curs2 Structuri Avansate Pentru Cautare](https://reader037.vdocuments.site/reader037/viewer/2022102521/5571f88449795991698d9810/html5/thumbnails/29.jpg)
arbori bicolori - inserare
2
1
14
11
7
8
15
4
5
x
y
unchiul lui x
recolorare
![Page 30: Curs2 Structuri Avansate Pentru Cautare](https://reader037.vdocuments.site/reader037/viewer/2022102521/5571f88449795991698d9810/html5/thumbnails/30.jpg)
arbori bicolori - inserare
unchiul lui x
roteste stanga
2
1
14
11
7
8
15
4
5
x
y
![Page 31: Curs2 Structuri Avansate Pentru Cautare](https://reader037.vdocuments.site/reader037/viewer/2022102521/5571f88449795991698d9810/html5/thumbnails/31.jpg)
arbori bicolori - inserare
7
1
14
11
2 8 15
4
5
x
y
unchiul lui x
roteste dreapta
![Page 32: Curs2 Structuri Avansate Pentru Cautare](https://reader037.vdocuments.site/reader037/viewer/2022102521/5571f88449795991698d9810/html5/thumbnails/32.jpg)
arbori bicolori - inserare
7
1 14
11 2
8
15 4
5
recoloreaza
![Page 33: Curs2 Structuri Avansate Pentru Cautare](https://reader037.vdocuments.site/reader037/viewer/2022102521/5571f88449795991698d9810/html5/thumbnails/33.jpg)
arbori bicolori - inserare
7
1 14
11 2
8
15 4
5
![Page 34: Curs2 Structuri Avansate Pentru Cautare](https://reader037.vdocuments.site/reader037/viewer/2022102521/5571f88449795991698d9810/html5/thumbnails/34.jpg)
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.
![Page 35: Curs2 Structuri Avansate Pentru Cautare](https://reader037.vdocuments.site/reader037/viewer/2022102521/5571f88449795991698d9810/html5/thumbnails/35.jpg)
Hashing (dispersie)
Implementarea prin tehnica dispersieistructura 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]
![Page 36: Curs2 Structuri Avansate Pentru Cautare](https://reader037.vdocuments.site/reader037/viewer/2022102521/5571f88449795991698d9810/html5/thumbnails/36.jpg)
Hashing (continuare I)
operatii• cautarea
i = h(nume)if (T[i] )then return T[i]->atrib
• inserareai = h(nume)if (T[i] )then throw “ERR: coliziune”else T[i]->atrib atribut
• eliminareai = h(nume)if (T[i] )then T[i]
![Page 37: Curs2 Structuri Avansate Pentru Cautare](https://reader037.vdocuments.site/reader037/viewer/2022102521/5571f88449795991698d9810/html5/thumbnails/37.jpg)
Hashing (continuare II)
Alegerea functiei hash h(x) = x % p h(64747488289) = (647+4748+8289)%p daca x este sir:
unsigned hashVal=0;
while (*x != ‘\0’)
hashVal = (hashVal << 5) + *x++;
return hashVal % p
![Page 38: Curs2 Structuri Avansate Pentru Cautare](https://reader037.vdocuments.site/reader037/viewer/2022102521/5571f88449795991698d9810/html5/thumbnails/38.jpg)
Hashing (continuare III)
coliziuneainlantuire
• 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))
![Page 39: Curs2 Structuri Avansate Pentru Cautare](https://reader037.vdocuments.site/reader037/viewer/2022102521/5571f88449795991698d9810/html5/thumbnails/39.jpg)
Arbori digitali - I
Cazul cheilor de aceeasi lungimeS = {102, 120, 121, 210, 211, 212}
![Page 40: Curs2 Structuri Avansate Pentru Cautare](https://reader037.vdocuments.site/reader037/viewer/2022102521/5571f88449795991698d9810/html5/thumbnails/40.jpg)
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
![Page 41: Curs2 Structuri Avansate Pentru Cautare](https://reader037.vdocuments.site/reader037/viewer/2022102521/5571f88449795991698d9810/html5/thumbnails/41.jpg)
Arbori digitali - III
Cazul cheilor de lungime diferita
![Page 42: Curs2 Structuri Avansate Pentru Cautare](https://reader037.vdocuments.site/reader037/viewer/2022102521/5571f88449795991698d9810/html5/thumbnails/42.jpg)
Arbori digitali - IV
compactarea lanturilor
![Page 43: Curs2 Structuri Avansate Pentru Cautare](https://reader037.vdocuments.site/reader037/viewer/2022102521/5571f88449795991698d9810/html5/thumbnails/43.jpg)
Arbori digitali - V
Inserarea lui 0111 in structura compactata
![Page 44: Curs2 Structuri Avansate Pentru Cautare](https://reader037.vdocuments.site/reader037/viewer/2022102521/5571f88449795991698d9810/html5/thumbnails/44.jpg)
Arbori digitali - VI
Eliminarea lui 1011 in structura compactata