Algorithmen und Datenstrukturen II

Werbung
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
Herunterladen