Sunteți pe pagina 1din 46

Structuri de date avansate pentru cautare

arbori binari de cautare


arbori AVL
2-3 arbori
arbori bicolori

Cautare in liste liniare - complexitate

Tip de date Implementare

Cautare

Inserare

Stergere

Lista
liniara

Tablouri

O(n)

O(1)

O(n)

Liste inlantuite

O(n)

O(1)

O(1)

Tablouri

O(log n)

O(n)

O(n)

Liste inlantuite

O(n)

O(n)

O(1)

Lista
liniara
ordonata

Cautare binara: aspect dinamic structura de date


arbore binar de cautare
arbore binar cu proprietatea ca pentru orice nod v, valorile
memorate in subarborele la stinga lui v

<
valoarea din v

<
valorile memorate in subarborele la dreapta lui v
echivalent: parcurgerea inordine listeaza elementele crescator
operatii
cautare
inserare
stergere

Degenerarea cautarii binare in cautare liniara


elimina(10)

20
0

40
30

10

30

elimina(50)
40
30

50

insereaza(32)

20

50

20
40

40

40
30

20

40

50

insereaza(35)

20

elimina(0)

20

30

30

35

35
32

Clase de arbori O(log n)-stabile


arbori echilibrati
C clasa de arbori echilibrati (ntC) t are n noduri
h(t) = (log n)
clase O(log n)-stabile
C clasa O(log n)-stabila daca:
C clasa de arbori echilibrati
operatiile de inserare si eliminare se realizeaza in
timpul O(log n) si in urma realizarii acestor operatii se
obtin arbori ce apartin clasei C.

Arbori AVL
un arbore binar de cautare t este un arbore AVL-echilibrat daca
pentru orice virf v,
h(vstg) - h(vdrp) 1
Lema
t AVL-echilibrat t echilibrat (i.e., h(t) = (log n)).

Arbori AVL
Teorema
Clasa arborilor AVL-echilibrati este O(log n) stabila.
algoritmul de inserare
nodurile au memorate si factorii de echilibrare ( {-1,
0, 1})
se memoreaza drumul de la radacina la nodul adaugat
intr-o stiva (O(log n))
se parcurge drumul memorat in stiva in sens invers si
se actualizeaza factorii de echilibrare; nodurile
dezichilibrate se reechilibeaza cu una dintre operatiile:
rotatie stinga/dreapta simpla/dubla (O(log n)).

Rotatii
Rotatie dreapta simpla
y

x
y

x
A

B
z

Rotatie dreapta dubla


y

x
D

A
B

x
A

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
p->stg

p->mij

subarbore subarbore
stanga
mijlociu

p->drp

subarbore
dreapta

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

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<z

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

h
h

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

inserare in 2-3-arbore
35
30; 60
10; 20

40; 50

80;
100;

70;

90;

110; 120
80;

30; 60
40
10; 20

35;

50;

100;
70;

90;

110; 120

inserare 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

inserare 2-3-arbore (continuare)


subprograme necesare
radNoua(t, x, q)
creeaza o noua radacina cu cheia x
t: 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 nod
parametri sunt similari subprogramului insInNod()

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

stergere 2-3-arbore
daca elementul 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

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

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

stergere 2-3-arbore: rotatie


roteste dreapta

30; 40

50; 80
60;

100;

40; 80
30;

50;

100;

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
Exercitiu: Sa se scrie procedura de stergere
Teorema
Clasa 2-3-arborilor este O(log n)-stabila.

2-3-4-arbori
sunt generalizari ale 2-3 arborilor
un nod intern poate avea 2, 3 sau 4 copii
un nod cu 4 copiii va memora 3 chei
se mentin proprietatile de arbore de cautare si aceeasi
inaltime 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 nodurilor
la momentul inserarii si propagarea spre radacina
sau in timpul cautarii, fiecare nod plin este spart in doua

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
Exemplu: B-arbori

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

Exemplu de arbore bicolor


70

100

40
20

60
50

110

80
90

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


bh( x )

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

arbori bicolori - inserare

11
14

2
1

7
5
x

unchiul lui x

4
recolorare

15

arbori bicolori - inserare

11
2

unchiul lui x

14

7
5

y
15

4
roteste stanga

arbori bicolori - inserare

11
7
x

unchiul lui x

14

15

5
4

roteste dreapta

arbori bicolori - inserare


7

11

14
15

4
recoloreaza

arbori bicolori - inserare


7

11

14
15

Discrepanta SSr
A
B

unchiul lui C

C
A
B
x

unchiul lui C

C
Daca bunicul e radacina, devine negru

Discrepanta SDr
A
B

unchiul lui C

D
C
A

unchiul lui C

D
C
Daca bunicul e radacina, devine negru

Discrepanta SSn
A

unchiul lui C

C
B

B
C

A
D

A
D

Discrepanta SDn
A

unchiul lui C

D
C
C

C
B

A
D

A
D

arbori bicolori - inserare

se considera si transformarile simetrice ...

arbori bicolori - stergere


nodul sters are cel mult un fiu (daca nu se face o interschimbare
cu un vecin din lista ordonata)
daca nodul sters este rosu, arborele ramane unul bicolor
daca nodul sters este negru si are un fiu rosu, atunci acesta (fiul)
se recoloreaza cu negru
in celelalte cazuri avem o discrepanta ce trebuie rezolvata (a se
vedea slide-urile urmatoare)
Legenda:
D sau S dau pozitia nodului sters (Dreapta sau Stanga)
n sau r dau culoarea nodului frate
0, 1sau 2 da numarul de fii/nepoti rosii ai nodului frate

arbori bicolori stergere discrepanta Dn0


nodul sters este Dreapta, fratele negru care are ambii copii negri

copiii lui B

arbori bicolori stergere discrepanta Dn1


nodul sters este Dreapta, fratele negru care are un copil rosu si
unul negru

B
A

copiii lui B

arbori bicolori stergere discrepanta Dn1


nodul sters este Dreapta, fratele negru care are un copil rosu si
unul negru

B
C

copiii lui B

arbori bicolori stergere discrepanta Dn2


nodul sters este Dreapta, fratele negru care are ambii copii rosii

B
C

copiii lui B

arbori bicolori stergere discrepanta Dr0


nodul sters este Dreapta, fratele rosu care are toti nepotii negri

B
A

arbori bicolori stergere discrepanta Dr1


nodul sters este Dreapta, fratele rosu care are un nepot rosu

B
C

nepotii lui B

arbori bicolori stergere discrepanta Dr1


nodul sters este Dreapta, fratele rosu care are un nepot rosu

B
C

C
D
nepotii lui B

arbori bicolori stergere discrepanta Dr2


nodul sters este Dreapta, fratele rosu care are doi nepoti rosii

B
C

C
D
nepotii lui B

S-ar putea să vă placă și