Algorithmen und Programmierung III 

         WS 2002/2003                   Übung 12                          H. Schweppe
                                        

        Ausgabe: 17.1.12. 2002
        Abgabe:   28. 1. 2003  15.00

Aufgabe 12.1 (  6 P)
a) (3 P) Zeichnen Sie schrittweise den Rot-Schwarz-Baum, der bei Einfügen der Schlüssel 'A' bis 'K' in den anfangs leeren Baum entsteht.

b) (3 P) Machen Sie eine allgemeine Aussage dazu, was passiert, wenn man Rot-Schwarz-Bäume durch Einfügen von Schlüsseln in aufsteigender Reihenfolge erstellt. Geben Sie die Laufzeit für das Einfügen von n Schlüsseln in aufsteigender Reihenfolge an.

Aufgabe 12.2 (  6  P)
 Machen Sie sich für Teil a) mit Rot-Schwarz-Bäumen anhand von Animationen vertraut (z.B.    http://www.seanet.com/users/arsen/avltree.html oder  http://www.ececs.uc.edu/~franco/C321/html/RedBlack/redblack.html). 

a)
(3 P) Geben Sie die Anzahl strukturell verschiedener Rot-Schwarz-Bäume mit n=2, 3,...., 12 verschiedenen Schlüssel an.

b) (3 P) Entwerfen Sie einen Algorithmus, der in logarithmischer Zeit feststellt, ob es in einem Rot-Schwarz-Baum einen Schlüssel gibt, der zwischen den Schlüsseln x und y (Eingabeparameter) liegt: 
               
interval :: Ord t -> RBTree  a -> a -> a -> Bool
        -- interval rb i j
        -- pre : i <= j
        -- result:True if( exists k, k element of rb  and i < k < j),
        --        False otherwise. 

Geben Sie eine Implementierung in Haskell an. (Code für den Rot-Schwarz-Baum hier). 

Aufgabe 12.3 (7  P)
a)
(1 P) Geben Sie die Hash-Tabelle an, die sich durch Einfügen der Werte  E, A, S, Y, Q, U, E, S, T, I , O, N  in dieser Reihenfolge ergibt. Die Schlüssel sind als natürliche  Zahlen kodiert, und zwar A= 0, B = 1 usw. . Duplikate sind erlaubt.   Die Tabelle besitzt m=13 Elemente, h(x) = x mod 13. Im Fall von Kollisionen wird linear sondiert. 

b) (1 P) Wie a), aber Sondierung mit unabhängigen  Hash-Funktionen.  Die sekundäre Hash-Funktion sei  h'(x) = 1 + (x mod 11). 

c) (1 P) Welche Laufzeit hat das Einfügen eines Schlüssels in eine Hash-Tabelle bei Kollisionsbehandlung durch Verkettung  im schlechtesten Fall, wenn die Ketten sortiert gespeichert werden?

d) (2 P) Wie viele Sondierungen braucht man, um n-mal den gleichen Wert (oder: n gleiche Schlüssel)  in eine Hash-Tabelle bei Kollisionsauflösung mit  zwei unabhängigen Hash-Funktionen  einzufügen. 

e) (2 P) Zeigen Sie: Bei Kollisionsbehandlung mit zwei unabhängigen  Funktionen h(x) und h'(x) werden, falls m (die Tabellengröße) keine Primzahl ist, nicht notwendig alle leeren Tabellenelemente gefunden. 

Aufgabe 12.4  ( 11 + 6 P)
a) (3) Beweisen Sie: ((a*x mod m ) + b) mod m = (a*x + b) mod m; dabei sind a, b, x, m sind positive ganze Zahlen.

b) (4 P) Implementieren Sie eine Klasse
class HashExperiment, deren Methode h Zeichenketten s durch Modulbildung in die Zahlen [0.. m-1] abbildet. Dabei ist m die Tabellengröße. Die Zeichenkette wird als Zahl zur  Basis a interpretiert. Z.B. ist   h("ava") = (97a^2 + 118*a + 97) % m. Die auf dem Typ String definierte Funktion charAt(int i) liefert das i-te Zeichen von s (Siehe Java Klassen-Dokumentation). Verwenden Sie zur Berechnung das Hornerschema. Da die Zeichenketten lang werden können, müssen Sie die in a) zu beweisende Eigenschaft nutzen. Ein einfaches Fragment für ein Rahmenprogramm finden Sie hier.

c) (4 P) Berechnen Sie die Hashwerte für die Zeilen der hier zu findenden Datei (mit 79 Zeilen), und zwar mit m=96, a= 128; m=97, a=128; m=96, a=127. Geben Sie die Hashwerte jeder Zeile aus, ferner die Kollisionsstatistik ("Wieviel Zeilen wurden auf i, 0 <= i < m abgebildet?"). Interpretieren Sie das Ergebnis.
Bemerkung: Es geht in c) nur um die Hash-Verschlüsselung von Zeichenketten, nicht um die Wirksamkeit von  Kollisionsauflösungsverfahren. Um die geht es hier.....:

d) (6 Zusatzpunkte) Untersuchen Sie experimentell für die offenen Adressierung die Verfahren lineare Sondierung, quadratische Sondierung und unabhängige Hash-Funktionen (Double hashing). Eine geeignete zweite Hashfunktion bzw. die Konstanten c1 und c2 für quadratisches Sondieren wählen Sie bitte selbst.  Vergleichen Sie die durchschnittliche Anzahl von Tests bei einer Suche mit den theoretischen Werten (lineares Sondieren, unabhängige Hash-Funktionen). Eine besonders gelungene experimentelle Untersuchung kann in der letzten Vorlesung am 13.2. vorgestellt werden.

Aufgabe 12.5  ( 2 P)
a) (2 P) Ist die Folge F = [4,7,10,9,16,12,8,13,11,20] die Felddarstellung eines binären (Min)-Heaps? Zeichnen Sie bitte den durch F angegebenen Heap. Stellen Sie gegebenenfalls die Heap-Eigenschaft her.
 

32 Punkte + 6 Sonderpunkte.