ASD Ćwiczenia 8: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Amal (dyskusja | edycje)
mNie podano opisu zmian
Amal (dyskusja | edycje)
Nie podano opisu zmian
Linia 43: Linia 43:


<div class="mw-collapsible-content" style="display:none">
<div class="mw-collapsible-content" style="display:none">
..................
Niech <math>\mu(r)</math> i <math>\mu'(r)</math> oznaczają wartość funkcji <math>\mu</math> dla węzła <math>r</math>, odpowiednio, przed i po operacji splay. Dalej, niech <math>v</math>, <math>w</math> i <math>u</math> oznaczają węzły jak w definicji operacji splay. Rozważamy trzy przypadki, odpowiadające trzem podpunktom w tej definicji.
 
(1) Węzeł <math>u</math> nie istnieje, bo <math>v</math> jest synem korzenia <math>w</math>. <br>
Do wykonania mamy tylko ROT1<math>(v, w)</math>, a do zużycia <math>3(\mu'(v)-\mu(v))+1</math> jednostek kredytu. Mamy <math>\mu'(v) = \mu(w)</math> oraz <math>\mu'(w) \le \mu'(v)</math>.
Na utrzymanie niezmiennika (***) potrzeba <br>
<math>\mu'(v)+\mu'(w)-\mu(v)-\mu(w) = \mu'(w)-\mu(v) \le \mu'(v)-\mu(v) \le 3(\mu'(v)-\mu(v)</math><br>
jednostek kredytu. Pozostałą 1 jednostkę przeznaczamy na opłacenie wykonania rotacji.
 
(2) Oba węzły <math>v</math> i <math>w</math> są lewymi synami (albo oba prawymi). <br>
Wykonujemy ROT1<math>(w,u)</math>, a następnie ROT1<math>(v,w)</math>. Pokażemy, że do wykonania tych dwóch rotacji i utrzymania niezmiennika (***) wystarczy <math>\le 3(\mu'(v)-\mu(v)</math> jednostek kredytu (podobnie jak w przypadku (3)). Sumując to oszacowanie po wszystkich operacjach wykonywanych w ramach procedury splay, dostajemy sumę teleskopową jak w tezie lematu.
 
Mamy <math>\mu'(v) = \mu(u)</math>. Na utrzymanie niezmiennika (***) potrzeba <br>
<math>\Delta\mu = \mu'(v)+\mu'(w)+\mu'(u)-\mu(v)-\mu(w)-\mu(u) = \mu'(w)+\mu'(u)-\mu(v)-\mu(w) = (\mu'(w)-\mu(v)) + (\mu'(u)-\mu(w)) \le 2(\mu'(v)-\mu(v))</math><br>
jednostek kredytu, co pozostawia <math>\mu'(v)-\mu(v)</math> jednostek na opłacenie wykonania dwóch rotacji. Może się jednak zdarzyć, że <math>\mu'(v)=\mu(v)</math>. Pokażemy, że wtedy <math>\Delta\mu <0</math>, więc utrzymujemy niezmiennik (***), odbierając jednostkę kredytu na opłacenie rotacji.  
 
Przypuśćmy przeciwnie, że <math>\mu'(v)=\mu(v)</math>, ale <math>\mu'(v)+\mu'(w)+\mu'(u)\ge\mu(v)+\mu(w)+\mu(u)</math>. Mamy <math>\mu(u) = \mu'(v) = \mu(v)</math>, skąd <math>\mu(w) = \mu(v) = \mu(u)</math>, więc <math>\mu'(v)+\mu'(w)+\mu'(u)\ge 3\mu(u) = 3\mu'(v)</math>, czyli <math>\mu'(w)+\mu'(u)\ge 2\mu'(v)</math>. Ponieważ <math>\mu'(w), \mu'(u)\le\mu'(v)</math>, to wnioskujemy, że również <math>\mu'(w) = \mu'(v) = \mu'(u)</math>. To jednak jest niemożliwe: niech bowiem <math>a</math> oznacza rozmiar poddrzewa o korzeniu <math>v</math> przed operacją, zaś <math>b</math> - rozmiar poddrzewa o korzeniu <math>u</math> po operacji. Mielibyśmy wówczas równość <math>\lfloor \lg a\rfloor = \lfloor \lg (a+b+1)\rfloor = \lfloor \lg b\rfloor</math>. Załóżmy dla ustalenia uwagi, że <math>a\le b</math>; mamy <math>\lfloor \lg (a+b+1)\rfloor\ge\lfloor \lg (2a)\rfloor = 1+\lfloor \lg a\rfloor > \lfloor \lg a\rfloor</math>, sprzeczność.
 
(3) Węzeł <math>v</math> jest lewym synem, a <math>w</math> prawym, albo odwrotnie.
Dowód analogiczny jak w przypadku (2).
</div>
</div>
</div>
</div>

Wersja z 09:11, 24 sie 2006

Zadanie 1

Udowodnij, że wysokość drzewa AVL jest logarytmiczna względem jego rozmiaru.

Rozwiązanie


Zadanie 2

Oblicz, ile jest różnych drzew Fibonacciego o wysokości h.

Rozwiązanie


Zadanie 3

Napisz pseudokod operacji Insert i Delete w drzewach AVL.


Zadanie 4

Udowodnij Lemat 1.

Rozwiązanie


Zadanie

Opisane tu operacje Insert i Delete dla B-drzew są dwuprzebiegowe: najpierw schodzimy od korzenia do liścia, a następnie wracamy w górę drzewa przywracając warunki równowagi. Zaprojektuj wymagające z grubsza o połowę odwołań do dysku mniej jednoprzebiegowe algorytmy wstawiania i usuwania kluczy z B-drzewa, w których przywracanie równowagi odbywa się od razu podczas marszu w dół drzewa.

Rozwiązanie