Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

Ähnliche Präsentationen


Präsentation zum Thema: "LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)"—  Präsentation transkript:

1 LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

2 LS 2 / Informatik 2 Test Sie dürfen wieder einen handbeschriebenen DIN A4 Zettel mitnehmen Organisatorisches

3 LS 2 / Informatik 3 Datenstrukturen Problem Gegeben sind n Objekte O,.., O mit zugehörigen Schlüsseln s(O ) Operationen Suche(x); Ausgabe O mit Schlüssel s(O) =x; nil, falls kein Objekt mit Schlüssel x in Datenbank Einfügen(O); Einfügen von Objekt O in Datenbank Löschen(O); Löschen von Objekt O mit aus der Datenbank 1 n i

4 LS 2 / Informatik 4 AVL-Bäume Balanzierte Binärbäume Suchen, Einfügen, Löschen, Min, Max, Nachfolger in O(log n) Zeit Datenstrukturen

5 LS 2 / Informatik 5 Frage Gibt es effizientere Datenstruktur für das Datenbank Problem als AVL-Bäume? Datenstrukturen

6 LS 2 / Informatik 6 Felder mit direkter Addressierung Schlüsselmenge aus Universum U={0,…,m-1} Keine zwei Elemente haben denselben Schlüssel Feld T[0,..,m-1] Position i in T ist für Schlüssel i reserviert Datenstrukturen nil Universum U Genutzte Schlüsselmenge Feld T Das zum Schlüssel gehörige Objekt

7 LS 2 / Informatik 7 Operationen DirectAddressSearch(k) 1. return T[k] DirectAddressInsert(x) 1. T[key[x]] x DirectAddressDelete(k) 1. T[k] nil Datenstrukturen

8 LS 2 / Informatik 8 Operationen DirectAddressSearch(k) 1. return T[k] DirectAddressInsert(x) 1. T[key[x]] x DirectAddressDelete(k) 1. T[k] nil Datenstrukturen Laufzeiten: O(1) Laufzeiten: O(1)

9 LS 2 / Informatik 9 Zusammenfassung (direkte Addressierung) Einfügen, Löschen, Suchen in O(1) Min, Max O(|U|) Speicherbedarf O(|U|) Schlecht, wenn Universum groß ist (normaler Fall) Datenstrukturen

10 LS 2 / Informatik 10 Hashing Ziel: Speicherbedarf soll unabhängig von Universumsgröße sein Wollen nur die Suchzeit optimieren (Insert und Delete werden auch unter bestimmten Annahmen effizient sein) Eingabe n Schlüssel aus Universum U={0,..,m-1} Aufgabe Finde Datenstruktur mit O(n) Speicherbedarf, die Suche in O(1) Zeit erlaubt Datenstrukturen

11 LS 2 / Informatik 11 Erste Idee Fasse Blöcke von r Elementen zusammen und bilde sie auf dieselbe Addresse ab Datenstrukturen Feld T

12 LS 2 / Informatik 12 Erste Idee Fasse Blöcke von r Elementen zusammen und bilde sie auf dieselbe Addresse ab Beispiel Schlüsselmenge aus Universum {0,..,69} 8, 13, 15, 30, 41, 56, 58 Datenstrukturen Feld T

13 LS 2 / Informatik 13 Erste Idee Fasse Blöcke von r Elementen zusammen und bilde sie auf dieselbe Addresse ab Beispiel Schlüsselmenge aus Universum {0,..,69} 8, 13, 15, 30, 41, 56, 58 Problem 13, 15 und 56, 58 liegen im selben Bereich Datenstrukturen Feld T

14 LS 2 / Informatik 14 Erste Idee Fasse Blöcke von r Elementen zusammen und bilde sie auf dieselbe Addresse ab Beispiel Schlüsselmenge aus Universum {0,..,69} 8, 13, 15, 30, 41, 56, 58 Problem 13, 15 und 56, 58 liegen im selben Bereich Auflösen durch Listen Datenstrukturen nil Feld T

15 LS 2 / Informatik 15 Datenstrukturen Insert(x) 1. p key[x]/r 2. ListInsert(T[p],x) Laufzeit O(1) nil Feld T

16 LS 2 / Informatik 16 Datenstrukturen Delete(y) 1. ListDelete(y) Laufzeit O(1) nil Feld T y ist Referenz auf das zu löschende Listenelemente y ist Referenz auf das zu löschende Listenelemente

17 LS 2 / Informatik 17 Datenstrukturen Blocksuche(k) 1. p k/r 2. ListItem head[T[p]] 3. while ListItem nil and key[ListItem] k do 4. ListItem next[ListItem] 5. return ListItem nil Feld T

18 LS 2 / Informatik 18 Datenstrukturen Blocksuche(k) 1. p k/r 2. ListItem head[T[p]] 3. while ListItem nil and key[ListItem] k do 4. ListItem next[ListItem] 5. return ListItem Beispiel Blocksuche(15) nil Feld T

19 LS 2 / Informatik 19 Datenstrukturen Blocksuche(k) 1. p k/r 2. ListItem head[T[p]] 3. while ListItem nil and key[ListItem] k do 4. ListItem next[ListItem] 5. return ListItem Beispiel Blocksuche(15) nil Feld T

20 LS 2 / Informatik 20 Datenstrukturen Blocksuche(k) 1. p k/r 2. ListItem head[T[p]] 3. while ListItem nil and key[ListItem] k do 4. ListItem next[ListItem] 5. return ListItem Beispiel Blocksuche(15) nil Feld T

21 LS 2 / Informatik 21 Blocksuche(k) 1. p k/r 2. ListItem head[T[p]] 3. while ListItem nil and key[ListItem] k do 4. ListItem next[ListItem] 5. return ListItem Beispiel Blocksuche(15) Datenstrukturen nil Feld T

22 LS 2 / Informatik 22 Blocksuche(k) 1. p k/r 2. ListItem head[T[p]] 3. while ListItem nil and key[ListItem] k do 4. ListItem next[ListItem] 5. return ListItem Beispiel Blocksuche(15) Datenstrukturen nil Feld T

23 LS 2 / Informatik 23 Blocksuche(k) 1. p k/r 2. ListItem head[T[p]] 3. while ListItem nil and key[ListItem] k do 4. ListItem next[ListItem] 5. return ListItem Beispiel Blocksuche(15) Datenstrukturen nil Feld T

24 LS 2 / Informatik 24 Blocksuche(k) 1. p k/r 2. ListItem head[T[p]] 3. while ListItem nil and key[ListItem] k do 4. ListItem next[ListItem] 5. return ListItem Beispiel Blocksuche(15) Datenstrukturen nil Feld T

25 LS 2 / Informatik 25 Analyse Wollen Suchzeit für festen Schlüssel k analysieren Worst-Case Alle Schlüssel aus demselben Block sind in Schlüsselmenge Suchzeit: O(min{r,n}) Ist r>n, so ist dies O(n) Datenstrukturen nil

26 LS 2 / Informatik 26 Analyse Wollen Suchzeit für festen Schlüssel k analysieren Worst-Case Alle Schlüssel aus demselben Block sind in Schlüsselmenge Suchzeit: O(min{r,n}) Ist r>n, so ist dies O(n) Diskussion Ist das wirklich, was wir erwarten? Nein! Das eine sehr spezielle Eingabe Normalerweise, sollte das besser funktionieren Datenstrukturen nil

27 LS 2 / Informatik 27 Analyse Wollen Suchzeit für festen Schlüssel k analysieren Average-Case Durchschnittliche Laufzeit über alle möglichen Schlüsselmengen Datenstrukturen nil

28 LS 2 / Informatik 28 Analyse Wollen Suchzeit für festen Schlüssel k analysieren Average-Case Durchschnittliche Laufzeit über alle möglichen Schlüsselmengen Durchschnittliche Länge jeder Liste ist = r n/m Datenstrukturen nil

29 LS 2 / Informatik 29 Analyse Wollen Suchzeit für festen Schlüssel k analysieren Average-Case Durchschnittliche Laufzeit über alle möglichen Schlüsselmengen Durchschnittliche Länge jeder Liste ist = r n/m Durchschnittliche Suchzeit O(1+ ) Datenstrukturen nil

30 LS 2 / Informatik 30 Analyse Wollen Suchzeit für festen Schlüssel k analysieren Average-Case Durchschnittliche Laufzeit über alle möglichen Schlüsselmengen Durchschnittliche Länge jeder Liste ist = r n/m Durchschnittliche Suchzeit O(1+ ) Speicherplatz O(m/r) Datenstrukturen nil

31 LS 2 / Informatik 31 Analyse Wollen Suchzeit für festen Schlüssel k analysieren Average-Case Durchschnittliche Laufzeit über alle möglichen Schlüsselmengen Durchschnittliche Länge jeder Liste ist = r n/m Durchschnittliche Suchzeit O(1+ ) Speicherplatz O(m/r) Setze r=m/n Datenstrukturen nil

32 LS 2 / Informatik 32 Analyse Wollen Suchzeit für festen Schlüssel k analysieren Average-Case Durchschnittliche Laufzeit über alle möglichen Schlüsselmengen Durchschnittliche Länge jeder Liste ist = r n/m Durchschnittliche Suchzeit O(1+ ) Speicherplatz O(m/r) Setze r=m/n O(1) Suchzeit und O(n) Speicher Datenstrukturen nil

33 LS 2 / Informatik 33 Analyse Wollen Suchzeit für festen Schlüssel k analysieren Average-Case Durchschnittliche Laufzeit über alle möglichen Schlüsselmengen Durchschnittliche Länge jeder Liste ist = r n/m Durchschnittliche Suchzeit O(1+ ) Speicherplatz O(m/r) Setze r=m/n O(1) Suchzeit und O(n) Speicher Datenstrukturen nil

34 LS 2 / Informatik 34 Satz 40 Sei U={0,..,m-1} eine Grundmenge von Schlüsseln (Universum). Sei T ein Feld mit m/r Einträgen und jeder Eintrag von T entspreche einem Block von r Werten aus U. Dann gilt, dass die durchschnittliche Suchzeit nach einem beliebigen, aber festen Schlüssel k durch O(1+ ) beschränkt ist, wobei = r n/m und der Durchschnitt über alle n-elementigen Teilmengen von U gebildet wird. Datenstrukturen

35 LS 2 / Informatik 35 Diskussion Ist Durchschnitt das richtige Maß für eine Laufzeitanalyse? Durchschnitt Durchschnitt (unsere Durchschnittsbildung nimmt an, dass jede Teilmenge gleichwahrscheinlich auftritt; dies ist vermutlich nicht realistisch) Beispiel Universum ist die Menge der long ints Schlüssel sind Kundennummern Häufig starten Kundennummern bei einem bestimmten Wert und steigen von dort an (z.B. 1 bis 5323) Durchschnittsannahme nicht richtig Datenstrukturen

36 LS 2 / Informatik 36 Problem Wir kennen die typische Datenverteilung nicht Diese kann insbesondere von der Anwendung abhängen Um eine gute Vorhersage der Laufzeit zu machen, müssten wir bei der Durchschnittsbildung aber die typische Datenverteilung berücksichtigen Abhilfe Wir werden die Aufteilung zufällig machen Datenstrukturen

37 LS 2 / Informatik 37 Hashing Universum U={0,..,m-1} Hash Tabelle T[0,..,t-1] Hash Funktion h: U {0,..,t-1} Speichere Element mit Schlüssel k in h(k) Datenstrukturen Universum U k k k k k k k k Genutzte Schlüsselmenge nil Feld T h(k )=2 h(k )=5 h(k )=h(k )= k k 10 9

38 LS 2 / Informatik 38 Hashing Universum U={0,..,m-1} Hash Tabelle T[0,..,t-1] Hash Funktion h: U {0,..,t-1} Speichere Element mit Schlüssel k in h(k) Datenstrukturen Universum U k k k k k k k k Genutzte Schlüsselmenge nil Feld T h(k )=2 h(k )=5 h(k )=h(k )=6 Kollision! k k 10 9

39 LS 2 / Informatik 39 Hashing mit Verkettung Universum U={0,..,m-1} Hash Tabelle T[0,..,t-1] Hash Funktion h: U {0,..,t-1} Speichere Element mit Schlüssel k in h(k) Löse Kollisionen durch Listen auf (wie vorhin) Datenstrukturen Universum U k k k k k k k k Genutzte Schlüsselmenge nil Feld T k k k k k k 9 10

40 LS 2 / Informatik 40 Beispiel Wenn wir h: U{0,..,t-1} durch h(x) = x t/m definieren, so haben wir die auf Blockbildung basierende Datenstruktur (mit Blockgröße r=m/t) Dieses ist also ein Spezialfall des Hashing-Szenarios Die Hauptschwierigkeit beim Hashing ist die Frage, wie man h geschickt wählt Datenstrukturen nil Feld T

41 LS 2 / Informatik 41 Operationen Einfügen(k) Füge neuen Schlüssel k am Ende der Liste T[h(k)] ein Löschen(x) Lösche Element x aus Liste T[h(key[x])] Suche(k) Suche nach k in Liste T[h(k)] Datenstrukturen

42 LS 2 / Informatik 42 Wie sieht eine gute Hashfunktion aus? Benutzte Schlüssel sollten möglichst gleichmäßig auf Tabelle verteilt werden Guter Kandidat wäre eine zufällige Funktion (die natürlich nur einmal zu Beginn zufällig gewählt wird und dann fest ist) Sobald h festliegt, gibt es immer eine schlechte Eingabe für h mit Worst-Case Suchzeit O(n) bei n Elementen in der Datenstruktur Wir suchen aber für gegebene Schlüsselmenge eine gute Funktion h Last Faktor Durchschnittliche Länge einer Kollisionsliste, d.h. =n/t Datenstrukturen

43 LS 2 / Informatik 43 Idee Wähle h zufällig (aus einer Menge von geeigneten Kandidaten H) Datenstrukturen

44 LS 2 / Informatik 44 Idee Wähle h zufällig (aus einer Menge von geeigneten Kandidaten H) Annahme(einfaches gleichverteiltes Hashing) Jedes k aus U wird mit Wahrscheinlichkeit 1/t auf i {0,..,t-1} abgebildet Diese Wahrscheinlichkeit ist komplett unabhängig vom Bild aller anderen Elemente Datenstrukturen

45 LS 2 / Informatik 45 Idee Wähle h zufällig (aus einer Menge von geeigneten Kandidaten H) Annahme(einfaches gleichverteiltes Hashing) Jedes k aus U wird mit Wahrscheinlichkeit 1/t auf i {0,..,t-1} abgebildet Diese Wahrscheinlichkeit ist komplett unabhängig vom Bild aller anderen Elemente Auswahlprozess für h Für jede k U würfele einen Wert w zwischen 0 und t-1 und setze h[k]=w H: Menge aller Funktionen von U nach {0,…,t-1} Datenstrukturen

46 LS 2 / Informatik 46 Idee Wähle h zufällig (aus einer Menge von geeigneten Kandidaten H) Annahme(einfaches gleichverteiltes Hashing) Jedes k aus U wird mit Wahrscheinlichkeit 1/t auf i {0,..,t-1} abgebildet Diese Wahrscheinlichkeit ist komplett unabhängig vom Bild aller anderen Elemente Weitere Annahme h(k) kann in O(1) Zeit berechnet werden Datenstrukturen

47 LS 2 / Informatik 47 Satz 41 Sei M U eine beliebige Teilmenge von n Schlüsseln und sei h eine Hashfunktion, die zufällig unter der Annahme des einfachen gleichverteilten Hashings ausgewählt wurde. Werden die Kollisionen die unter h auftreten durch Verkettung aufgelöst, so benötigt eine Suche nach Schlüssel k M eine durchschnittliche Laufzeit von O(1+ ). Datenstrukturen

48 LS 2 / Informatik 48 Satz 41 Sei M U eine beliebige Teilmenge von n Schlüsseln und sei h eine Hashfunktion, die zufällig unter der Annahme des einfachen gleichverteilten Hashings ausgewählt wurde. Werden die Kollisionen die unter h auftreten durch Verkettung aufgelöst, so benötigt eine Suche nach Schlüssel k M eine durchschnittliche Laufzeit von O(1+ ). Beweis Jeder Schlüssel k wird unter der Annahme des einfachen gleichverteilten Hashings auf jede Position in T mit derselben Wahrscheinlichkeit abgebildet. Also ist die durchschnittliche Suchzeit nach k gerade die durchschnittliche Suchzeit bis zum Ende der t Listen. Die durchschnittliche Suchzeit bis Listenende ist aber O(1+ ) ( ist durchschn. Listenlänge). Damit ergibt sich inklusive Berechnung von h(k) eine Suchzeit von O(1+ ). Datenstrukturen

49 LS 2 / Informatik 49 Satz 42 Sei M U eine beliebige Teilmenge von n Schlüsseln und sei h eine Hashfunktion, die zufällig unter der Annahme des einfachen gleichverteilten Hashings ausgewählt wurde. Werden die Kollisionen die unter h auftreten durch Verkettung aufgelöst, so benötigt eine Suche nach Schlüssel k M eine durchschnittliche Laufzeit von O(1+ ). Dabei wird der Durchschnitt über die Auswahl von h und den Schlüssel k M gebildet. Datenstrukturen nil Feld T k k k k

50 LS 2 / Informatik 50 Satz 42 Sei M U eine beliebige Teilmenge von n Schlüsseln und sei h eine Hashfunktion, die zufällig unter der Annahme des einfachen gleichverteilten Hashings ausgewählt wurde. Werden die Kollisionen die unter h auftreten durch Verkettung aufgelöst, so benötigt eine Suche nach Schlüssel k M eine durchschnittliche Laufzeit von O(1+ ). Dabei wird der Durchschnitt über die Auswahl von h und den Schlüssel k M gebildet. Schwierigkeit Die Suchzeit hängt von Position des gesuchten Elements in Kollisionsliste ab Suchzeit hängt von Einfügereihenfolge und Implementierung ab Datenstrukturen nil Feld T k k k k

51 LS 2 / Informatik 51 Datenstrukturen Beweis Annahme: Einfügen am Ende der Listen nil Feld T k k k k

52 LS 2 / Informatik 52 Datenstrukturen Beweis Annahme: Einfügen am Ende der Listen Betrachte Elemente in Einfügereihenfolge nil Feld T k k k k

53 LS 2 / Informatik 53 Datenstrukturen Beweis Annahme: Einfügen am Ende der Listen Betrachte Elemente in Einfügereihenfolge Zunächst: Durchschn. Suchzeit für i-tes Element nil Feld T k k k k

54 LS 2 / Informatik 54 Datenstrukturen Beweis Annahme: Einfügen am Ende der Listen Betrachte Elemente in Einfügereihenfolge Zunächst: Durchschn. Suchzeit für i-tes Element Situation vor Einfügen von i: i-1 Elemente eingefügt nil Feld T k k k k

55 LS 2 / Informatik 55 Datenstrukturen Beweis Annahme: Einfügen am Ende der Listen Betrachte Elemente in Einfügereihenfolge Zunächst: Durchschn. Suchzeit für i-tes Element Situation vor Einfügen von i: i-1 Elemente eingefügt Durchschn. Listenlänge (i-1)/t nil Feld T k k k k

56 LS 2 / Informatik 56 Datenstrukturen Beweis Annahme: Einfügen am Ende der Listen Betrachte Elemente in Einfügereihenfolge Zunächst: Durchschn. Suchzeit für i-tes Element Situation vor Einfügen von i: i-1 Elemente eingefügt Durchschn. Listenlänge (i-1)/t h(i) ist zufällig aus {0,..,t-1} nil Feld T k k k k

57 LS 2 / Informatik 57 Datenstrukturen Beweis Annahme: Einfügen am Ende der Listen Betrachte Elemente in Einfügereihenfolge Zunächst: Durchschn. Suchzeit für i-tes Element Situation vor Einfügen von i: i-1 Elemente eingefügt Durchschn. Listenlänge (i-1)/t h(i) ist zufällig aus {0,..,t-1} Damit durchschn. Länge der Liste, in der i ist: 1+(i-1)/t nil Feld T k k k k

58 LS 2 / Informatik 58 Datenstrukturen Beweis Annahme: Einfügen am Ende der Listen Betrachte Elemente in Einfügereihenfolge Zunächst: Durchschn. Suchzeit für i-tes Element Situation vor Einfügen von i: i-1 Elemente eingefügt Durchschn. Listenlänge (i-1)/t h(i) ist zufällig aus {0,..,t-1} Damit durchschn. Länge der Liste, in der i ist: 1+(i-1)/t Durchschn. Suchzeit für i-tes Element: O(1+ (i-1)/t) nil Feld T k k k k

59 LS 2 / Informatik 59 Datenstrukturen Beweis Wir nehmen an, dass Einfügen immer am Ende der Listen durchgeführt wird. Betrachte nun die n Elemente in der Reihenfolge, in der sie in die Datenstruktur eingefügt wurden. Wir analysiere zunächst die durchschnittliche Laufzeit für die Suche des i-ten Elements. Betrachte dazu die Situation vor dem Einfügen dieses Elements. Dann sind bereits i-1 Elemente in der Datenstruktur und die durchschnittliche Listenlänge ist (i-1)/t. Sei nun k der Schlüssel des i-ten Elements. Es gilt, dass h(k ) zufällig aus {0,..t-1} gewählt wird nach Annahme des einfachen gleichverteilten Hashings. Damit ist die durchschnittliche Länge der Liste, die i enthält gerade 1+(i-1)/t. Somit ergibt sich eine durchschnittliche Suchzeit von O(1+ (i-1)/t). nil Feld T k k k k i i

60 LS 2 / Informatik 60 Datenstrukturen Beweis Durchschnitt über alle n Elemente aus M: nil Feld T k k k k

61 LS 2 / Informatik 61 Datenstrukturen Beweis Durchschnitt über alle n Elemente aus M: nil Feld T k k k k

62 LS 2 / Informatik 62 Datenstrukturen Beweis Wir berechnen den Durchschnitt über alle n Elemente aus M: nil Feld T k k k k

63 LS 2 / Informatik 63 Interpretation Ist die Größe der Hash-Tabelle proportional zur Anzahl gespeicherter Elemente, dann ist die durchschn. Suchzeit O(1) Frage Wie realistisch ist Annahme des einfachen gleichverteilten Hashing Datenstrukturen

64 LS 2 / Informatik 64 Interpretation Ist die Größe der Hash-Tabelle proportional zur Anzahl gespeicherter Elemente, dann ist die durchschn. Suchzeit O(1) Frage Wie realistisch ist Annahme des einfachen gleichverteilten Hashing Die Menge H aller Funktionen von U nach {0,..,t-1} erfüllt Anforderung Datenstrukturen

65 LS 2 / Informatik 65 Interpretation Ist die Größe der Hash-Tabelle proportional zur Anzahl gespeicherter Elemente, dann ist die durchschn. Suchzeit O(1) Frage Wie realistisch ist Annahme des einfachen gleichverteilten Hashing Die Menge H aller Funktionen von U nach {0,..,t-1} erfüllt Anforderung Kann man eine Funktion aus H effizient abspeichern? Datenstrukturen

66 LS 2 / Informatik 66 Kann man eine Funktion aus H effizient abspeichern? Wenn es |H| unterschiedliche Funktionen gibt, dann benötigen wir mindestens log |H| viele Bits, um jede Funktion aus H beschreiben zu können Datenstrukturen

67 LS 2 / Informatik 67 Kann man eine Funktion aus H effizient abspeichern? Wenn es |H| unterschiedliche Funktionen gibt, dann benötigen wir mindestens log |H| viele Bits, um jede Funktion aus H beschreiben zu können Argument: - Man muss mindestens so viele unterschiedliche Bitstrings haben wie Funktionen in H - Die Anzahl unterschiedlicher Bitstrings der Länge k ist 2 Datenstrukturen k

68 LS 2 / Informatik 68 Kann man eine Funktion aus H effizient abspeichern? Wenn es |H| unterschiedliche Funktionen gibt, dann benötigen wir mindestens log |H| viele Bits, um jede Funktion aus H beschreiben zu können Argument: - Man muss mindestens so viele unterschiedliche Bitstrings haben wie Funktionen in H - Die Anzahl unterschiedlicher Bitstrings der Länge k ist 2 Jedes Element von U kann auf t unterschiedliche Werte abgebildet werden Datenstrukturen k

69 LS 2 / Informatik 69 Kann man eine Funktion aus H effizient abspeichern? Wenn es |H| unterschiedliche Funktionen gibt, dann benötigen wir mindestens log |H| viele Bits, um jede Funktion aus H beschreiben zu können Argument: - Man muss mindestens so viele unterschiedliche Bitstrings haben wie Funktionen in H - Die Anzahl unterschiedlicher Bitstrings der Länge k ist 2 Jedes Element von U kann auf t unterschiedliche Werte abgebildet werden Es gibt als t unterschiedliche Funktionen in H Datenstrukturen k |U|

70 LS 2 / Informatik 70 Kann man eine Funktion aus H effizient abspeichern? Wenn es |H| unterschiedliche Funktionen gibt, dann benötigen wir mindestens log |H| viele Bits, um jede Funktion aus H beschreiben zu können Argument: - Man muss mindestens so viele unterschiedliche Bitstrings haben wie Funktionen in H - Die Anzahl unterschiedlicher Bitstrings der Länge k ist 2 Jedes Element von U kann auf t unterschiedliche Werte abgebildet werden Es gibt als t unterschiedliche Funktionen in H Wir benötigen also mindestens |U| log t Bits, um Funktionen aus H abspeichern zu können Datenstrukturen k |U|

71 LS 2 / Informatik 71 Kann man eine Funktion aus H effizient abspeichern? Wenn es |H| unterschiedliche Funktionen gibt, dann benötigen wir mindestens log |H| viele Bits, um jede Funktion aus H beschreiben zu können Argument: - Man muss mindestens so viele unterschiedliche Bitstrings haben wie Funktionen in H - Die Anzahl unterschiedlicher Bitstrings der Länge k ist 2 Jedes Element von U kann auf t unterschiedliche Werte abgebildet werden Es gibt als t unterschiedliche Funktionen in H Wir benötigen also mindestens |U| log t Bits, um Funktionen aus H abspeichern zu können Datenstrukturen k |U|

72 LS 2 / Informatik 72 Kurzes Fazit: Was ist eine gute Hashfunktion? Eine Funktion die eine gute Verteilung der Daten auf die Tabelle gewährleistet Problem: Wir kennen die Daten a priori nicht Oft kennen wir auch die Verteilung der Daten nicht Eine zufällige Funktion wäre gut, aber die können wir nicht speichern Datenstrukturen

73 LS 2 / Informatik 73 Die Divisionsmethode k wird abgebildet auf den Rest von k durch t Es gilt also h(k) = k mod t Beispiel t=12 und k=100 Dann gilt 8t+4 = 100 und somit h(100) = 4 Datenstrukturen

74 LS 2 / Informatik 74 Die Divisionsmethode k wird abgebildet auf den Rest von k durch t Es gilt also h(k) = k mod t Was sind gute Werte für m (ohne Beweis bzw. empirisch)? Ist m Zweierpotenz, dann zählen nur die niedrigwertigen Bits (meistens schlecht) Gute Wert sind normalerweise Primzahlen, die nicht zu nah an Zweierpotenzen liegen Datenstrukturen


Herunterladen ppt "LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)"

Ähnliche Präsentationen


Google-Anzeigen