Universität Leipzig Institut für Informatik Ausgabe: Abgabe: 25.04.2006 09.05.2006 Algorithmen und Datenstrukturen II SS 2006 - Aufgabenblatt II 1. (8 Punkte) Dynamische Hash-Verfahren Ein Datenbestand soll mittels Erweiterbarem Hashing (vgl. Vorlesungsskript 2, Folien 21 bis 23) verwaltet werden. Dabei habe jedes Bucket Platz für 2 Datensätze. Die Adressbreite betrage zu Beginn d = 1 Bit. Fügen Sie in einen anfangs leeren Hash-Bereich die Schlüssel 29 16 15 8 19 24 in der gegebenen Reihenfolge ein. - Stellen Sie den Anfangszustand des Hash-Bereichs (Directory/Index und Buckets) dar. - Stellen Sie den Zustand des Hash-Bereichs nach jeder Splitoperation dar. - Verwenden Sie als Pseudoschlüssel die jeweils letzten d Bits der (Binärdarstellung der) gegebenen Schlüsselwerte. Bsp.: Wenn k = 5 = 001012 und d = 2, dann h(k) = 01 Anfangszustand: Pseudoschlüssel Zeiger bzw. bzw. Tabellenindex Bucketspeicheradresse 0 1 Bucket 29 = 11101 16 = 10000 15 = 01111 8 = 01000 19 = 10011 24 = 11000 Einfügen von 29 und 16: 0 1 29, 16 Bucket enthält alle Schlüssel, die auf * enden. Einfügen von 15 führt zum Überlauf und damit zum ersten Splitten eines Buckets. Da sich die Schlüssel des zu splittenden Buckets in der letzten Position unterscheiden, braucht d nicht erhöht werden. 0 1 Beispiellösung 16 29, 15 Bucket enthält alle Schlüssel, die auf *0 enden. Bucket enthält alle Schlüssel, die auf *1 enden. 1/5 Einfügen von 8: 0 1 16, 8 Bucket enthält alle Schlüssel, die auf *0 enden. 29, 15 Bucket enthält alle Schlüssel, die auf *1 enden. Einfügen von 19 führt zum nächsten Splitten eines Buckets. Dieses mal muss der Index vergrößert werden, da sich die Schlüssel im betreffenden Bucket erst in der vorletzten Bitposition unterscheiden ⇒ d = 2. 00 01 10 11 16, 8 Bucket enthält alle Schlüssel, die auf *0 enden. 29 Bucket enthält alle Schlüssel, die auf *01 enden. 15, 19 Bucket enthält alle Schlüssel, die auf *11 enden. Einfügen von 24 führt zu weiterem Splitten eines Buckets. Auch dieses mal muss der Index vergrößert werden. Da sich die Schlüssel im betreffenden Bucket (16, 8, 24) erst in der viertletzten Bitposition unterscheiden, wächst der Index auf eine Größe von m = 2d = 24 = 16. 16 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 Beispiellösung 29 Bucket enthält alle Schlüssel, die auf *0000 enden. Bucket enthält alle Schlüssel, die auf *10 enden. Bucket enthält alle Schlüssel, die auf *01 enden. 15, 19 Bucket enthält alle Schlüssel, die auf *11 enden. 16 Bucket enthält alle Schlüssel, die auf *1000 enden. Bucket enthält alle Schlüssel, die auf *100 enden. 2/5 2. (10 Punkte) Der folgende gerichtete Graph sei durch seine Kantenliste gegeben: 7, 9, 1, 2, 1, 5, 2, 3, 2, 5, 6, 5, 3, 4, 4, 2, 5, 7, 7, 6 a) Erstellen Sie eine graphische Darstellung des gegebenen Graphen. (2 Punkte) z.B. 1 3 2 4 5 6 7 oder … b) Besitzt dieser Graph einen Hamiltonschen Zyklus? Falls ja: Geben Sie diesen an. Falls nein: Begründen Sie dies. (2 Punkte) nein Knoten 1 ist nicht erreichbar von einem anderen Knoten. Bzw. es können zwar alle Knoten einmal ohne Wiederholungen besucht werden, zum Schluss kann aber der Anfang nicht wieder erreicht werden. c) Besitzt dieser Graph einen Eulerschen Weg? Falls ja: Geben Sie diesen an. Falls nein: Begründen Sie dies. (2 Punkte) nein Von 1 ausgehend kann nur eine von beiden Kanten gewählt werden, die andere ist danach nicht mehr gebrauchbar. d) Der Graph soll jeweils in den unten angegebenen Knotenfolgen abgeschritten werden. Bestimmen Sie (ja/nein; leer zählt als falsche Antwort), welche der folgenden Eigenschaften zutreffen (4 Punkte): 2,3,4,2,3,4 1,2,5,7,6 1,2,3,4,2 5,1,2,5,7,6,5 5,7,6,5,7,6,5 Beispiellösung Kantenfolge ja ja ja nein ja 3/5 Kantenzug nein ja ja nein nein Weg nein ja nein nein nein Zyklus nein nein nein nein nein 3. (5 Punkte) Suche in Graphen Gegeben sei der Graph aus Aufgabe 2. a) Breitensuche (2 Punkte) Führen Sie einen Breitendurchlauf durch, beginnend bei Knoten 2. Geben Sie die Knoten in der Reihenfolge ihres (erstmaligen) Besuches an. 2, 3, 5, 4, 7, 6 (Reihenfolge innerhalb einer farbigen Gruppe beliebig) b) Tiefensuche (3 Punkte) Geben Sie alle Möglichkeiten des Tiefendurchlaufs an, beginnend bei Knoten 1. Geben Sie die Knoten in der Reihenfolge ihres (erstmaligen) Besuches an. 1, 2, 3, 4, 5, 7, 6 1, 2, 5, 7, 6, 3, 4 1, 5, 7, 6, 2, 3, 4 4. (9 Punkte) Eigenschaften eines gerichteten Graphen. Gegeben sei der Graph aus Aufgabe 2. a) Geben Sie die Adjazenzmatrix des Graphen an. (2 Punkte) 1 2 1 2 3 4 5 6 7 b) 4 5 1 6 7 1 1 1 1 1 1 1 1 Berechnen Sie die transitive Hülle des Graphen mit dem Warshall Algorithmus (vgl. Vorlesungsskript 4, Folie 16) und stellen Sie das Ergebnis wiederum in einer Adjazenzmatrix dar. (3 Punkte) 1 1 2 3 4 5 6 7 Beispiellösung 3 2 1 3 1 1 1 1 4 1 1 1 1 5 1 1 1 1 4/5 6 1 1 1 1 1 1 1 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 c) Topologische Sortierung: Wenden Sie den Algorithmus von Folie 11 aus Vorlesungsskript 4 auf den Graphen an. Geben Sie alle Zwischenergebnisse (berechnete ord(v) der Knoten v), den resultierenden Graphen G und das Resultat der topologischen Sortierung an. (4 Punkte) 1 2 3 5 4 3 Beispiellösung 7 2 4 ord(1) = 1 6 5 6 Resultat: G hat Zyklen (keine topologische Sortierung möglich) 7 5/5