You are on page 1of 11

ASD wykad 03

semestr zimowy 2011/12

Rwnowaenie drzew BST drzewa AVL Drzewo binarne to drzewo, w ktrym kady wze ma co najwyej 2 nastpniki (lewy i prawy). Ustalenie oznacze.
Uwaga: zmiast oznacze z jzykw programowania (x^.left, x->left, itp) bd uywane oznaczenia teoretyczne.

W strukturze dowolnego wza v drzewa binarnego T wystpuj pola: INF[v] pole informacyjne, zawarto wza, LFT[v] wskanik do lewego poddrzewa (LEFT), RGT[v] wskanik do prawego poddrzewa (RIGHT), czsto wystpuje pole: UP[v] wskanik do wza nadrzdnego (PARENT, POP). Drzewo BST (Binary Search Tree) to takie drzewo binarne, w ktrym dla dowolnego wza v zachodzi: INF[LFT[v]] INF[v] INF[RGT[v]] ( = poprzedza). Twierdzenie. Drzewo binarne jest drzewem BST <==> jego wzy w porzdku INORDER tworz cig niemalejcy. Niech w drzewie binarnym T o korzeniu r dany bdzie wze v. (r to jedyny wze: UP[r]=NIL) Wysoko wza v = H[v] okrela si rekurencyjnie: H[v] = -1 gdy v=NIL H[v] = 1+max(H[LFT[v]],H[RGT[v]]) gdy vNIL

Wysokoci drzewa jest wysoko jego korzenia. H[T] = H[r] . Rnica wysokoci wza DH[v]=H[LFT[v]]-H[RGT[v]].
Uwaga: w niektrych podrcznikach przyjmuje si odwrotnie: DH[v]=H[RGT[v]]-H[LFT[v]]

Liczb wzw (pod)drzewa o korzeniu v mona zdefiniowa rekurencyjnie: NDS[v] = 0 gdy v=NIL NDS[v] = 1+NDS[LFT[v]]+NDS[RGT[v]] gdy vNIL

Rnic wzw (pod)drzewa o korzeniu v jest DNDS[v] = NDS[LFT[v]]-NDS[RGT[v]] Gboko wza, to jego odlego od korzenia. Definicja rekurencyjnie: DEEP[r] = 0 ( gboko korzenia) DEEP[v] = 1+DEEP[UP[v]] gdy vr Jeeli w strukturze wierzchoka drzewa binarnego wystpuje odsyacz do poprzednika (UP[v]), to operacje s prostsze w implementacji. Czasem dodatkowo wystpuj pola zawierajce informacje(H,DH,NDS,DNDS,DEEP), ktre s czsto wykorzystywane, a ich obliczenie wymaga dodatkowego algorytmu. Zoono wikszoci algorytmw drzewowych jest liniowa wzgldem wysokoci drzewa; oczekuje si by zoono bya logarytmiczna wzgldem liczby wzw. Dodatkowe pole H (wysokoci wza), to zwikszenie pamici ale przypieszenie czasu dziaania. Jednak przy operacjach INSERT i DELETE naley dodatkowo zmodyfikowa pole wysokoci. Przy INSERT sprawdza si i w razie potrzeby zwiksza warto H u kolejnych przodkw wstawionego wza; sprawdzanie i zwikszanie koczy si w korzeniu lub, gdy u kolejnego przodka nie nastpi zmiana. Przy DELETE sprawdza si i w razie potrzeby zmniejsza warto H u kolejnych przodkw usunitego wza; sprawdzanie i zmniejszanie koczy si w korzeniu lub, gdy u kolejnego przodka nie nastpi zmiana.
DEMO BST.

Pojcie rwnowagi. Wysoko drzewa BST zaley od kolejnoci wstawianych elementw. Zamy, e dokonujemy tylko wstawiania 7 rnych elementw: A,B,C,D,E,F,G do drzewa BST. Wszystkich permutacji jest 7!=5040. Z permutacji: G,F,E,D,C,B,A powstanie drzewo o wysokoci 6 (max). Tylko ta jedna permutacja da to drzewo. Z permutacji: A,G,B,F,C,E,D powstanie drzewo o wysokoci 6. adna inna permutacja nie da tego samego drzewa. S 64 permutacje (64 = 1,3% z 5040), ktre dadz (rne) drzewa o wysokoci 6. Z permutacji: D,F,B,C,E,A,G powstanie drzewo o wysokoci 2. Tylko 80 permutacji daje drzewo o wysokoci 2. W przypadku 7-miu elementw zawsze takie samo. Istotna jest wysoko drzewa BST, bo od niej zaley zoono operacji: SEARCH, INSERT, DELETE. Drzewo jest zrwnowaone: w sensie zwykym gdy wza u zachodzi: -1 DH[v] 1 w sensie zwykym w lewo gdy wza u zachodzi: 0 DH[v] 1 w sensie zwykym w prawo gdy wza u zachodzi: -1 DH[v] 0 w sensie cisym gdy wza u zachodzi: -1 DNDS[v] 1 w sensie cisym w lewo gdy wza u zachodzi: 0 DNDS[v] 1 w sensie cisym w prawo gdy wza u zachodzi: -1 DNDS[v] 0 Twierdzenie. (bez dowodu) Drzewo zrwnowaone w sensie cisym jest zrwnowaone w sensie zwykym.

Odwrotnie nie zawsze; przykad: R .---------------^---------------. H Y .-------^-------. .-------^-------. D L V Z .---^---. .---^---. ^---. B F J N X .-^-. .-^-. .-^-. .-^-. A C E G I K M P Rzadko uywa si drzew zrwnowaonych w sensie cisym; wystarczy rwnowaga w sensie zwykym bez okrelania kierunku w lewo czy w prawo. Drzewo zrwnowaone w sensie zwykym nazywa si drzewem AVL (Adelson-Velskij, andis). Twierdzenie. (dowd poniej i w [BDR] str.113) Wysoko drzewa AVL o n wierzchokach (n1) jest nie wiksze ni 1.45*log2n . Rotacje. Jak reorganizowa drzewo BST aby: 1 pozostao drzewem BST, 2 zmniejszy jego wysoko (a nawet uzyska AVL), 3 zmiany dokona w czasie staym. Jednym ze znanych sposobw jest dokonywanie odpowiednich rotacji.
Uwaga! w rnych podrcznikach przyjto rne oznaczenia dotyczce kierunku rotacji oraz rotowanego wza (przykadowo rotuje si wze w d lub w gr, przepina si lewe lub prawe poddrzewo itp. Przyjmiemy oznaczenia jak poniej.

Rozrnia si 6 podstawowych rotacji. Dwie pojedyncze (z synami) i cztery podwjne (z wnukami).

W poniszych przykadach litera z * oznacza dowolnie due, jak rwnie puste poddrzewo. Dla wygody wskanik do wza oraz jego pole INF oznaczamy t sam liter (x=INF[x]). H .-------^-------. D L .---^---. .---^---. B F J N .-^-. .-^-. .-^-. .-^-. A* C* E* G* I* K* M* P* Pojedyncza prawa dla wza x : rotR(T,x) (na miejsce x wchodzi RGT[x] gdy RGT[x]NIL ) Przykad: rotR(H,H) H .-------^-------. D* L .---^---. J* N* --> L .-------^-------. H N* .---^---. D* J* W przykadach rotowane bd wzy drzewa po lewej, naley zwrci uwag na zachowanie wasnoci BST.

Pojedyncza lewa dla wza x : rotL(T,x) (na miejsce x wchodzi LFT[x] gdy LFT[x]NIL ) Przykad: rotL(H,L). H --> .-------^-------. D* L .---^---. J N* .-^-. I* K* H .-------^-------. D* J .---^---. I* L .-^-. K* N*

Podwjna prawa-prawa dla wza x : rotRR(T,x) (na miejsce x wchodzi RGT[RGT[x]] gdy RGT[x]NIL RGT[RGT[x]]NIL) Przykad: rotRR(H,H). H --> .-------^-------. D* L .---^---. J* N .-^-. M* P* N .-------^-------. L P* .---^---. H M* .-^-. D* J*

Podwjna lewa-prawa dla wza x : rotLR(T,x) (na miejsce x wchodzi RGT[LFT[x]] gdy LFT[x]NIL RGT[LFT[x]]NIL) Przykad: rotLR(H,H). H .-------^-------. D L* .---^---. B* F .-^-. E* G* --> F .-------^-------. D H .---^---. .---^---. B* E* G* L*

Podwjna prawa-lewa dla wza x : rotRL(T,x) (na miejsce x wchodzi RGT[LFT[x]] gdy RGT[x]NIL LFT[RGT[x]]NIL) Przykad: rotRL(H,H). H --> .-------^-------. D* L .---^---. J N* .-^-. I* K* J .-------^-------. H L .---^---. .---^---. D* I* K* N*

Podwjna lewa-lewa dla wza x : rotLL(T,x) (na miejsce x wchodzi LFT[LFT[x]] gdy LFT[x]NIL LFT[LFT[x]]NIL) Przykad: rotLL(H,H). H .-------^-------. D L* .---^---. B F* .-^-. A* C* --> B .-------^-------. A* D .---^---. C* H .-^-. F* L*

Rotacja pojedyncza polega na przepinaniu odpowiednich wskanikw. Naley pamita o kolejnoci instrukcji aby nie zgubi fragmentw drzewa. Parametrem rotacji jest rwnie cae drzewo, gdy wskanik do jego korzenia moe si zmieni. Rotacja podwjna moe by zastpiona przez dwie odpowiednie rotacje pojedyncze. Gdy si je wykonuje jednoczenie, to liczba jednostkowych przypisa jest mniejsza. Zoono kadej rotacji jest staa.

Drzewa AVL.

([BDR] s.113-117)

Kady wze x drzewa AVL zawiera pola: INF[x], LFT[x],RGT[x],UP[x] oraz H[x] i/lub DH[x]. Drzewo AVL reorganizuje si natychmiast po wykonaniu operacji INSERT lub operacji DELETE. Operacja INSERT - algorytm. [1] wstawia si now warto value jak do drzewa BST. Tworzy si nowy wze x, ktry jest liciem; INF[x]=value, LFT[x]=NULL=RGT[x], H[x]=0=DH[x], [2] y:=UP[x],zmiana H[y],DH[y] (gdy y=NULL lub H[y] nie zmienia si, to nie ma czego rwnoway) [3] z:=UP[y]; if(z=NULL) return; oblicz H[z],DH[z]; if(H[z] bez zmian) return; [4] if(DH[z]=2 lub DH[z]=-2) goto[5] else {x:=y; y:=z; goto[3]} [5] rwnowaenie Niech z bdzie pierwszym (najniszym) wierzchokiem niezrwnowazonym znalezionym w kroku [4] powyszej operacji INSERT . Niech INF[z]=H, a jego poddrzewa s takie jak na rysunku: H .-------^-------. D L .---^---. .---^---. B F J N .-^-. .-^-. .-^-. .-^-. A* C* E* G* I* K* M* P* Wwczas moliwe s 4 przypadki: x H[x] y H[y] DH[y] z H[z] DH[z] --------------------------------------B w D w+1 +1 H w+2 +2 F w D w+1 -1 H w+2 +2 J w L w+1 +1 H w+2 -2 N w L w+1 -1 H w+2 -2 Zmiana nazw wzw zgodnie z alfabetycznym zachowaniem wasnoci BST.

(1) (2) (3) (4)

Przyjmujc e H[z]=w+2 i wiedzc, e DH[z]=2 lub DH[z]=-2 mamy odpowiednie wartoci y, H[y], DH[y], x, H[x]. Omwi na wykadzie dokadnie wszystkie moliwoci. Wariant (3) jest symetryczny do wariantu (2). Wariant (1) jest symetryczny do wariantu (4).

(1) stosuje si rotL(T,H)


R .---------------^ H .-------^-------. D L .---^---. .---^---. B F J N .-^-. .-^-. .-^-. .-^-. A0 C0 E0 G0 I0 K0 M0 P0 | | | | | | | | A1 C1 E1 G1 I1 K1 M1 P1 | | | | A2 C2 E2 G2 | A3 R .---------------^ D .-------^-------. B H .---^---. .---^---. A0 C0 F L | | .-^-. .-^-. A1 C1 E0 G0 J N | | | | .^. .^. A2 C2 E1 G1 I K M P | | | | | | | A3 E2 G2 I K M P

Identyczna rotacja, gdy zamiast A3 wstawi si C3. (2) stosuje si rotLR(T,H) czyli
R .---------------^ H .-------^-------. D L .---^---. .---^---. B F J N .-^-. .-^-. .-^-. .-^-. A0 C0 E0 G0 I0 K0 M0 P0 | | | | | | | | A1 C1 E1 G1 I1 K1 M1 P1 | | | | A2 C2 E2 G2 | E3 R .---------------^ F .-------^-------. D H .---^---. .---^---. B E0 G0 L .-^-. | | .-^-. A0 C0 E1 G1 J N | | | | .^. .^. A1 C1 E2 G2 I K M P | | | | | | | A2 C2 E3 I K M P

Identyczna rotacja, gdy zamiast E3 wstawi si G3. Po dokonaniu kadej z czterech rotacji naley obliczy ponownie wysoko H[] i rnic wysokoci DH[] wierzchokw rotowanych. W kadym przypadku wysoko wierzchka, ktry w rotacji zastpi wierzchoek rwnowaony, powraca do wartoci w+1, takiej jaka bya przed wstawieniem. Wniosek. W operacji INSERT po co najwyej jednej rotacji drzewo AVL jest zrwnowaone.

Operacja DELETE omwienie algorytmu. Sprawdza si i w razie potrzeby zmniejsza o 1 wysoko H[] u kolejnych przodkw usuwanego wza; Sprawdza si i rwnie zmienia co najwyej o 1 rnic wysokoci DH[]. Niech H bdzie pierwszym napotkanym wzem, w ktrym nastpia nierwnowaga (D=LFT[H] L=RGT[H]). H .-------^-------. D L .---^---. .---^---. B F J N Moliwych jest 6 przypadkw: Usunito element (1) DH[H]=+2 , (2) DH[H]=+2 , (3) DH[H]=+2 , Usunito element (4) DH[H]=-2 , (5) DH[H]=-2 , (6) DH[H]=-2 , z poddrzewa L DH[D]=+1 // zmniejszya si DH[D]=-1 // wysoko L nie D DH[D]= 0 z poddrzewa D DH[D]=-1 // symetryczny do (1) DH[D]=+1 // symetryczny do (2) DH[D]= 0 // symetryczny do (3)

(1) stosuje si rotL(T,H)


R .---------------^ H .-------^-------. D L .---^---. .---^---. B F J N .-^-. .-^-. .-^-. .-^-. A0 C0 E0 G0 I0 K0 M0 P0 | | | | | A1 C1 E1 G1 K1 | | A2 C2 R .---------------^ D .-------^-------. B H .---^---. .---^---. A0 C0 F L | | .-^-. .-^-. A1 C1 E0 G0 J N | | | | .^. .^. A2 C2 E1 G1 I K M P

(2) stosuje si rotLR(T,H)


R .---------------^ H .-------^-------. D L .---^---. .---^---. B F J N .-^-. .-^-. .-^-. .-^-. A0 C0 E0 G0 I0 K0 M0 P0 | | | | | A1 C1 E1 G1 K1 | | E2 G2 R .---------------^ F .-------^-------. D H .---^---. .---^---. B E0 G0 L .-^-. | | .-^-. A0 C0 E1 G1 J N | | | | .^. .^. A1 C1 E2 G2 I K M P

(3) stosuje si rotL(T,H)


R .---------------^ H .-------^-------. D L .---^---. .---^---. B F J N .-^-. .-^-. .-^-. .-^-. A0 C0 E0 G0 I0 K0 M0 P0 | | | | | A1 C1 E1 G1 K1 | | | | A2 C2 E2 G2 R .---------------^ D .-------^-------. B H .---^---. .---^---. A0 C0 F L | | .-^-. .-^-. A1 C1 E0 G0 J N | | | | .^. .^. A2 C2 E1 G1 I K M P | | E2 G2

Przypadek (3) rozwizano jak (1), ale mona rozwiza jak (2) Tylko przypadek (3) koczy rwnowaenie, Przypadki (1) i (2) wymagaj dalszego sprawdzania rwnowagi poprzednikw. Dlaczego? KONKURS 1 tylko dla obecnych na wykadzie.

10

Twierdzenie. // to samo co wyej Wysoko drzewa AVL o n wierzchokach nie przekracza 1.45*log2(n) = (log2n) Dowd: N(h):= minimalna liczba wzw zewntrznych (NIL) w drzewie AVL o wysokoci h. N(0)=2 , N(1)=3 , N(2)=5 , N(h)=N(h-1)+N(h-2) N(h)=F(h+3)

Liczby Fibonacciego

xk-1 <= F(k) <= xk , x = 0.5*(1+sqrt(5)) xh+2 <= N(h) czyli h <= logxN(h) <= 1.45*log2n .

Zoono operacji INSERT i DELETE = O(log(n)) Dwa drzewa D1 i D2 o zbiorach wierzchokw V1 i V2 nazywamy drzewami podobnymi gdy bijekcja f: V1 -> V2 zachowujca dowizania w drzewie, czyli uV1 zachodz rwnoci: UP[f(u)]=f(UP[u]), LFT[f(u)]=f(LFT[u]), RGT[f(u)]=f(RGT[u]). Dwa drzewa D1 i D2 o zbiorach wierzchokw V1 i V2 nazywamy drzewami izomorficznymi gdy s podobne i bijekcja podobiestwa zachowuje rwno etykiet: uV1 INF[u]=INF[f(u)]. Twierdzenie: Liczba rnych (nieizomorficznych) drzew BST, gdy |V|=n wyraa si wzorem rekurencyjnym:
n

c(0)=1, c(1)=1, c(n) =

(c(j-1)*c(n-j))
j=1

Dowd. Gdy jako korze drzewa wzi j-ty element, to lewe poddrzewo bdzie miao (j-1) wzw, prawe (n-j) wzw. Mona udowodni, e c(n) jest n-t liczb Catalana: c(n) = (1/(n+1))*(2n|n); (n|k)-symbol Newtona

11

You might also like