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 < vvalStg < 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 < vvalStg < valorile memorate in subarborele
mijlociu < vvalMijl < 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) && (i p 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
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 < vvalStg < 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 < vvalStg < valorile memorate in subarborele
mijlociu < vvalMijl < 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) && (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