ASD Ćwiczenia 8: Różnice pomiędzy wersjami
Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Nie podano opisu zmian |
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. | ||
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 .
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