Datenstrukturen und Algorithmen SS17 Lösung - Übung 6 aa
Prof. Dr. Ir. G. Woeginger T. Hartmann, D. Korzeniewski, B. Tauer
Hausaufgabe4 (Hashtabelle Divisionsmethode): (5 + 1 = 6 Punkte)
a) Fügen Sie die folgenden Werte in ein anfangs leeres Array der Länge 11 unter Verwendung derDivisi- onsmethode ohne Sondierung (also durch Verkettung) ein:
2, 5, 9, 43, 52, 93.
b) Wie groß ist der Füllgrad der Tabelle?
Lösung:
a) m = 11:
0:
1:
2: 2 3:
4:
5: 5, 93 6:
7:
8: 52 9: 9 10: 43
b) Der Füllgrad ist 116
Hausaufgabe5 (Hashtabelle Multiplikationsmethode): (7 + 1 = 8 Punkte)
a) Fügen Sie die folgenden Werte in ein anfangs leeres Array der Länge 8 unter Verwendung derMultipli- kationsmethode (c= 0.62)ohne Sondierung (also durch Verkettung) ein:
3, 9, 6, 7, 97, 17, 77, 41.
b) Wie groß ist der Füllgrad der Tabelle?
1
Datenstrukturen und Algorithmen SS17 Lösung - Übung 6
Lösung:
a) m = 8, c = 0.62:
0:
1: 97 2: 7 3: 41 4: 9, 17 5: 6, 77 6: 3 7:
b) Der Füllgrad ist1
Hausaufgabe6 (Kollisionsauflösung durch Verkettung): (6 Punkte)
Ist es sinnvoll, die Listen zur Kollisionsauflösung in einer Hashtabelle sortiert zu halten? Begründen sie ihre Antwort, indem sie untersuchen, wie sich die asymptotische Laufzeit der Operationen Einfügen, erfolglose Suche,erfolgreiche Suche undLöschen, durch die Anpassung verändert. Gehen Sie davon aus, dass die Listen doppelt verkettet sind und dass beim Löschen ein Pointer auf das zu löschende Element übergeben wird.
Lösung:
• Einfügen benötigt nunO(α(n, m)), da sortiertes Einfügen in die Liste linear in der länge der Liste ist.
• Erfolglose Suche ist doppelt so schnell, da im Schnitt nach der Hälfte der Liste abgebrochen werden kann.
An der asymptotischen Laufzeit ändert dies nichts.
• Erfolgreiche Suche ist unverändert, da im Schnitt ebenfalls die halbe Liste durchsucht werden muss.
• Löschen ist unverändert, da Löschen in sortierten Listen gleich dem Löschen in unsortierten Listen ist.
Der Worst Case ist generell für die meisten Operationen unverändert, da dort die Hashtabelle zu einer Liste degeneriert. Nur Einfügen dauert hierO(n)stattO(1).
Damit ist diese Anpassung offensichtlich im Allgemeinen nicht sinnvoll. Sowohl im Average-Case, als auch im Worst-Case ist die Laufzeit für alle Operationen asymptotisch gleich oder schlechter. Die leicht beschleunigte erfolglose Suche bringt auch in der Praxis meistens keine Vorteile, da Kollisionen selten sind.
2