Zadanie 1
Udowodnij, że wysokość drzewa AVL jest logarytmiczna względem jego rozmiaru.
Rozwiązanie
Pokażemy, że drzewo AVL o wysokości musi mieć rozmiar wykładniczy względem , konstruując drzewo AVL o wysokości i najmniejszym możliwym rozmiarze. Jego definicja jest rekurencyjna:
- rysunek drzewa Fibonacciego ************************
Oznaczmy rozmiar drzewa przez . Mamy
, , dla . Porównując kilka pierwszych wyrazów tego ciągu z początkowymi wyrazami ciągu Fibonacciego zgadujemy, że (co łatwo sprawdzić przez indukcję) - dlatego noszą nazwę drzew Fibonacciego. Mamy zatem .
Zadanie 2
Oblicz, ile jest różnych drzew Fibonacciego o wysokości .
Rozwiązanie
Jeśli szukaną wielkość oznaczymy przez , to z faktu, że niższe poddrzewo może być zarówno lewe jak i prawe, wynika równanie rekurencyjne: , , . Podstawiając , mamy , , . Zgadujemy, a następnie sprawdzamy przez indukcję, że , zatem .
Zadanie 3
Napisz pseudokod operacji Insert i Delete w drzewach AVL.
Zadanie 4
Udowodnij Lemat 1.
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
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.