Ü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:

  1. Iteration:

  1. Iteration:

  1. Iteration:

  1. Iteration:

  1. Iteration:

  1. Iteration:

  1. Iteration:

Tabelle:

KeyValue
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

KeyValue
1
2
3
4
5
6
7
8
9
10
11
12

KeyValue
1
2
314
4
5
6
7
8
9
10
11
12

KeyValue
1
2
314
4
5
6
7
8
942
10
11
12

KeyValue
1
2
314
4
5
6
7
819
942
10
11
12

KeyValue
1
2
314
43
5
6
7
819
942
10
11
12

KeyValue
1
2
314
43
5
617
7
819
942
10
11
12

KeyValue
1
2
314
43
5
617
7
819
942
1020
11
12

KeyValue
1
2
314
43
5
617
76
819
942
1020
11
12

KeyValue
1
2
314
43
5
617
76
819
942
1020
1131
12

KeyValue
1
2
314
43
525
617
76
819
942
1020
1131
12

KeyValue
1
2
314
43
525
617
76
819
942
1020
1131
1228

Insgesamt: (Lösung)

KeyValue(Hashwert)
0319
1286
2
3143
433
5253
6176
766
8198
9429
10209
  • (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:

KeyValue
031
128
2
314
43
525
6del
76
819
942
1020

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:

KeyValue
031
128
2
314
43
525
66
7
819
942
1020

Jetzt schauen wir in der Leeren Zeile und applien wieder das oben erwähnte

KeyValue
031
1
2
314
43
525
66
728
819
942
1020