Structuri de date avansate pentru cautare.

Download Report

Transcript Structuri de date avansate pentru cautare.

Slide 1

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


Slide 2

2-3-arbori: definitie
 orice nod intern v are 2 fii (este de aritate 2) sau 3 fii (este de
aritate 3)

valStg

valStg valMij
p->stg

p->mij

subarbore subarbore
stanga
mijlociu

p->drp

subarbore
dreapta


Slide 3

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

valStg

x < valStg

valStg < y


Slide 4

2-3-arbori : definitie
 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

valMij

Slide 5

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

h
h


Slide 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


Slide 7

inserare in 2-3-arbore
80; 
100; 

30; 60
10; 20

35 40; 50

70; 

90; 

110; 120
80; 
100; 

30; 60
40
10; 20

35; 

50; 

70; 

90; 

110; 120


Slide 8

iserare 2-3-arbore (continuare)
80; 
40

30; 
10; 20

35; 

60; 
50; 

70; 

100; 
90; 

110; 120

40; 80
30; 
10; 20

35; 

60; 
50; 

70; 

100; 
90; 

110; 120


Slide 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()


Slide 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


Slide 11

stergere 2-3-arbore
40; 80

30; 
10; 20

35; 

60; 
50; 

70; 

100; 
90; 

110; 120

40; 80
30; 
10; 20

35; 

100; 
50; 60

90; 

110; 120


Slide 12

stergere 2-3-arbore: combinare
40; 80

combina

30; 
10; 20

35; 

100; 
90; 

50; 60

110; 120
80; 
100; 

30; 40
10; 20

35; 

50; 60

90; 

110; 120


Slide 13

stergere 2-3-arbore: rotatie
roteste dreapta

30; 40

50; 80

60; 

100; 

40; 80
30; 

50; 

100; 


Slide 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.


Slide 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


Slide 16

Organizarea pe nivele a indexului


Slide 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


Slide 18

B-arbore: structura unui nod


Slide 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]


Slide 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


Slide 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 topdown 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)


Slide 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 intro 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.


Slide 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


Slide 24

Exemplu de arbore bicolor

70

100

40

20

60
50

110

80

90


Slide 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

2

bh ( x )

1

noduri interne.
Teorema
Inaltimea unui arbore bicolor este cel mult 2log(n + 1).
Teorema
Arborii bicolori sint echilibrati.


Slide 26

arbori bicolori - inserare

11
2

14

1

7
5
x

unchiul lui x

8

y

4
recolorare

15


Slide 27

arbori bicolori - inserare

11
2

unchiul lui x

14

1

7 x
5

y

15
8

4
roteste stanga


Slide 28

arbori bicolori - inserare

11
7

unchiul lui x

14

x 2

y

8

1

15

5

4
roteste dreapta


Slide 29

arbori bicolori - inserare
7

2

1

11

5

8

14

15

4
recoloreaza


Slide 30

arbori bicolori - inserare
7

2

1

11

5

4

8

14

15


Slide 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.


Slide 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]


Slide 33

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


Slide 34

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


Slide 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))


Slide 36

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


Slide 37

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


Slide 38

Arbori digitali - III
 Cazul cheilor de lungime diferita


Slide 39

Arbori digitali - IV
 compactarea lanturilor


Slide 40

Arbori digitali - V
 Inserarea lui 0111 in structura compactata


Slide 41

Arbori digitali - VI
 Eliminarea lui 1011 in structura compactata