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

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Amal (dyskusja | edycje)
Nie podano opisu zmian
 
Amal (dyskusja | edycje)
mNie podano opisu zmian
Linia 1: Linia 1:
Zadanie 1
Zadanie 1
Udowodnij, że wysokość drzewa AVL jest logarytmiczna względem jego rozmiaru.
Udowodnij, że wysokość drzewa AVL jest logarytmiczna względem jego rozmiaru.


<div class="mw-collapsible mw-made=collapsible mw-collapsed">
Rozwiązanie
Rozwiązanie
<div class="mw-collapsible-content" style="display:none">
Pokażemy, że drzewo AVL o wysokości <math>h</math> musi mieć rozmiar wykładniczy względem <math>h</math>, konstruując drzewo AVL <math>T_h</math> o wysokości <math>h</math> i najmniejszym możliwym rozmiarze. Jego definicja jest rekurencyjna:  
Pokażemy, że drzewo AVL o wysokości <math>h</math> musi mieć rozmiar wykładniczy względem <math>h</math>, konstruując drzewo AVL <math>T_h</math> o wysokości <math>h</math> i najmniejszym możliwym rozmiarze. Jego definicja jest rekurencyjna:  


Linia 9: Linia 13:
Oznaczmy rozmiar drzewa <math>T_h</math> przez <math>a_h</math>. Mamy
Oznaczmy rozmiar drzewa <math>T_h</math> przez <math>a_h</math>. Mamy
<math>a_0 = 1</math>, <math>a_1 = 2</math>, <math>a_{h+1} = a_h+a_{h-1}+1</math> dla <math>h>0</math>. Porównując kilka pierwszych wyrazów tego ciągu z początkowymi wyrazami ciągu Fibonacciego <math>\langle F_h\rangle</math> zgadujemy, że <math>a_h = F{h+3}-1</math> (co łatwo sprawdzić przez indukcję) - dlatego <math>T_h</math> noszą nazwę '''drzew Fibonacciego'''. Mamy zatem <math>a_h = \Theta(\phi^h)</math>.
<math>a_0 = 1</math>, <math>a_1 = 2</math>, <math>a_{h+1} = a_h+a_{h-1}+1</math> dla <math>h>0</math>. Porównując kilka pierwszych wyrazów tego ciągu z początkowymi wyrazami ciągu Fibonacciego <math>\langle F_h\rangle</math> zgadujemy, że <math>a_h = F{h+3}-1</math> (co łatwo sprawdzić przez indukcję) - dlatego <math>T_h</math> noszą nazwę '''drzew Fibonacciego'''. Mamy zatem <math>a_h = \Theta(\phi^h)</math>.
</div>
</div>


Zadanie 2
Zadanie 2
Oblicz, ile jest różnych drzew Fibonacciego o wysokości <math>h</math>.
Oblicz, ile jest różnych drzew Fibonacciego o wysokości <math>h</math>.


<div class="mw-collapsible mw-made=collapsible mw-collapsed">
Rozwiązanie
Rozwiązanie
<div class="mw-collapsible-content" style="display:none">
Jeśli szukaną wielkość oznaczymy przez <math>b_h</math>, to z faktu, że niższe poddrzewo może być zarówno lewe jak i prawe, wynika równanie rekurencyjne: <math>b_0 = 1</math>, <math>b_1 = 2</math>, <math>b_{h+1} = 2b_h b_{h-1}</math>. Podstawiając <math>c_h = \lg b_h</math>, mamy <math>c_0 = 0</math>, <math>c_1 = 1</math>, <math>c_{h+1} = c_h + c_{h-1}+1</math>. Zgadujemy, a następnie sprawdzamy przez indukcję, że <math>c_h = F_{h+2}-1</math>, zatem <math>b_h = 2^{F_{h+2}-1}</math>.
Jeśli szukaną wielkość oznaczymy przez <math>b_h</math>, to z faktu, że niższe poddrzewo może być zarówno lewe jak i prawe, wynika równanie rekurencyjne: <math>b_0 = 1</math>, <math>b_1 = 2</math>, <math>b_{h+1} = 2b_h b_{h-1}</math>. Podstawiając <math>c_h = \lg b_h</math>, mamy <math>c_0 = 0</math>, <math>c_1 = 1</math>, <math>c_{h+1} = c_h + c_{h-1}+1</math>. Zgadujemy, a następnie sprawdzamy przez indukcję, że <math>c_h = F_{h+2}-1</math>, zatem <math>b_h = 2^{F_{h+2}-1}</math>.
</div>
</div>




Zadanie 3
Zadanie 3
Napisz pseudokod operacji Insert i Delete w drzewach AVL.
Napisz pseudokod operacji Insert i Delete w drzewach AVL.


Rozwiązanie
.................


Zadanie 4
Zadanie 4
Udowodnij Lemat 1.
Udowodnij Lemat 1.


<div class="mw-collapsible mw-made=collapsible mw-collapsed">
Rozwiązanie
Rozwiązanie
<div class="mw-collapsible-content" style="display:none">
..................
..................
</div>
</div>


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


<div class="mw-collapsible mw-made=collapsible mw-collapsed">
Rozwiązanie
Rozwiązanie
<div class="mw-collapsible-content" style="display:none">
Podstawowy pomysł polega na zadbaniu o to, by przy wstawianiu ojciec aktualnego węzła nigdy nie był całkowicie wypełniony, a przy usuwaniu - miał przynajmniej o jeden klucz więcej niż dozwolone minimum. Szczegóły można znaleźć w książce [CLRS], podrozdz. 18.2 i 18.3.
Podstawowy pomysł polega na zadbaniu o to, by przy wstawianiu ojciec aktualnego węzła nigdy nie był całkowicie wypełniony, a przy usuwaniu - miał przynajmniej o jeden klucz więcej niż dozwolone minimum. Szczegóły można znaleźć w książce [CLRS], podrozdz. 18.2 i 18.3.
</div>
</div>

Wersja z 12:05, 23 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