Übung 07
- Wenn wir etwas mit verkettung hashen wollen, müssen wir kram dann auch irgendwie sortieren, aber das machen wir einfach nicht, denn wir fügen einfach immer ganz am ende an :)
- Denen ist aufgefallen, dass der Pseudocode aus der Vorlesung fürs Hashen mit verschieben, bzw lücken füllen (dat mit den blöcken) warscheinlich falsch ist (yay)
- In Vorlesung 13, Folie 3-12ff. muss es in Zeile 27
Aufgabe 1: Hashing mit Verkettung
a)
Hashfunktion: mit
und
Einzufügen:
Mit Hashfunktion:
- Iteration:
- Iteration:
- Iteration:
- Iteration:
- Iteration:
- Iteration:
- Iteration:
Tabelle:
Key | Value |
---|---|
0 | |
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 |
b)
Für alle zwei unterschiedlichen schlüssel (in der schlüsselmenge der natürlichen Zahlen) darf es höchstens eine Hashfunktion geben bei der beide eingegebenen Zahlen den selben Hashwert haben, damit das dann 1 Universell ist
=> ist nicht -universell für
Aufgabe 2: Hashing mit linearem Sondieren
Mit Hashfunktion:
a)
Schlüssel mit obiger Hashfunktion in eine leere Hashtabelle einfügen
Key | Value |
---|---|
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 |
Key | Value |
---|---|
1 | |
2 | |
3 | 14 |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 |
Key | Value |
---|---|
1 | |
2 | |
3 | 14 |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | 42 |
10 | |
11 | |
12 |
Key | Value |
---|---|
1 | |
2 | |
3 | 14 |
4 | |
5 | |
6 | |
7 | |
8 | 19 |
9 | 42 |
10 | |
11 | |
12 |
Key | Value |
---|---|
1 | |
2 | |
3 | 14 |
4 | 3 |
5 | |
6 | |
7 | |
8 | 19 |
9 | 42 |
10 | |
11 | |
12 |
Key | Value |
---|---|
1 | |
2 | |
3 | 14 |
4 | 3 |
5 | |
6 | 17 |
7 | |
8 | 19 |
9 | 42 |
10 | |
11 | |
12 |
Key | Value |
---|---|
1 | |
2 | |
3 | 14 |
4 | 3 |
5 | |
6 | 17 |
7 | |
8 | 19 |
9 | 42 |
10 | 20 |
11 | |
12 |
Key | Value |
---|---|
1 | |
2 | |
3 | 14 |
4 | 3 |
5 | |
6 | 17 |
7 | 6 |
8 | 19 |
9 | 42 |
10 | 20 |
11 | |
12 |
Key | Value |
---|---|
1 | |
2 | |
3 | 14 |
4 | 3 |
5 | |
6 | 17 |
7 | 6 |
8 | 19 |
9 | 42 |
10 | 20 |
11 | 31 |
12 |
Key | Value |
---|---|
1 | |
2 | |
3 | 14 |
4 | 3 |
5 | 25 |
6 | 17 |
7 | 6 |
8 | 19 |
9 | 42 |
10 | 20 |
11 | 31 |
12 |
Key | Value |
---|---|
1 | |
2 | |
3 | 14 |
4 | 3 |
5 | 25 |
6 | 17 |
7 | 6 |
8 | 19 |
9 | 42 |
10 | 20 |
11 | 31 |
12 | 28 |
Insgesamt: (Lösung)
Key | Value | (Hashwert) |
---|---|---|
0 | 31 | 9 |
1 | 28 | 6 |
2 | ||
3 | 14 | 3 |
4 | 3 | 3 |
5 | 25 | 3 |
6 | 17 | 6 |
7 | 6 | 6 |
8 | 19 | 8 |
9 | 42 | 9 |
10 | 20 | 9 |
- (Der Hashwert, wird normalerweise nicht gespeichert)
- Wir wrappen around, damit wir nicht nen ewigen "overflowpool" bauen, und um effizienter zu sein
- Die Länge der Hashtabelle ist , also die Maximale anzahl an Indizes (jedenfalls beim linearen sondieren)
b)
Mit markieren als gelöscht:
Key | Value |
---|---|
0 | 31 |
1 | 28 |
2 | |
3 | 14 |
4 | 3 |
5 | 25 |
6 | del |
7 | 6 |
8 | 19 |
9 | 42 |
10 | 20 |
Nachdem wir gelöscht haben, mmüssen wir einmal komplett über das ding iterieren und schauen, ob eine Zahl gut in das jetzt leere feld passt, spricht hochrücken will
Das machen wir so lange, bis es keinen "besseren Fit" mehr gibt.
Mit verschieben:
Key | Value |
---|---|
0 | 31 |
1 | 28 |
2 | |
3 | 14 |
4 | 3 |
5 | 25 |
6 | 6 |
7 | |
8 | 19 |
9 | 42 |
10 | 20 |
Jetzt schauen wir in der Leeren Zeile und applien wieder das oben erwähnte
Key | Value |
---|---|
0 | 31 |
1 | |
2 | |
3 | 14 |
4 | 3 |
5 | 25 |
6 | 6 |
7 | 28 |
8 | 19 |
9 | 42 |
10 | 20 |