1 / 74

Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

Datenstrukturen, Algorithmen und Programmierung 2 (DAP2). Organisatorisches. Test Sie dürfen wieder einen handbeschriebenen DIN A4 Zettel mitnehmen. Datenstrukturen. Problem Gegeben sind n Objekte O ,.., O mit zugehörigen Schlüsseln s(O ) Operationen

Download Presentation

Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

  2. Organisatorisches Test • Sie dürfen wieder einen handbeschriebenen DIN A4 Zettel mitnehmen

  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 i n

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

  5. Datenstrukturen Frage • Gibt es effizientere Datenstruktur für das Datenbank Problem alsAVL-Bäume?

  6. Datenstrukturen 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 Das zum Schlüssel gehörigeObjekt Feld T 0 1 2 Universum U 7 0 1 3 2 5 4 6 Genutzte Schlüsselmenge 7

  7. Datenstrukturen Operationen DirectAddressSearch(k) • return T[k] DirectAddressInsert(x) • T[key[x]]  x DirectAddressDelete(k) • T[k]  nil

  8. Datenstrukturen Laufzeiten: O(1) Operationen DirectAddressSearch(k) • return T[k] DirectAddressInsert(x) • T[key[x]]  x DirectAddressDelete(k) • T[k]  nil

  9. Datenstrukturen 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)

  10. Datenstrukturen 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

  11. Datenstrukturen Erste Idee • Fasse Blöcke von r Elementen zusammen und bilde sie auf dieselbe Addresse ab Feld T 0-9 10-19 20-29 30-39 40-49 50-59 60-69

  12. Datenstrukturen 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 Feld T 0-9 10-19 20-29 30-39 40-49 50-59 60-69

  13. Datenstrukturen 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 Feld T 0-9 10-19 20-29 30-39 40-49 50-59 60-69

  14. Datenstrukturen 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 Feld T 0-9 10-19 20-29 30-39 40-49 50-59 60-69

  15. Datenstrukturen Insert(x) • p key[x]/r • ListInsert(T[p],x) Laufzeit • O(1) Feld T 0-9 10-19 20-29 30-39 40-49 50-59 60-69

  16. Datenstrukturen y ist Referenz auf das zu löschende Listenelemente Delete(y) • ListDelete(y) Laufzeit • O(1) Feld T 0-9 10-19 20-29 30-39 40-49 50-59 60-69

  17. Datenstrukturen Blocksuche(k) • p k/r • ListItem  head[T[p]] • while ListItem nil and key[ListItem]k do • ListItem  next[ListItem] • return ListItem Feld T 0-9 10-19 20-29 30-39 40-49 50-59 60-69

  18. Datenstrukturen Blocksuche(k) • p k/r • ListItem  head[T[p]] • while ListItem nil and key[ListItem]k do • ListItem  next[ListItem] • return ListItem Beispiel • Blocksuche(15) Feld T 0-9 10-19 20-29 30-39 40-49 50-59 60-69

  19. Datenstrukturen Blocksuche(k) • p k/r • ListItem  head[T[p]] • while ListItem nil and key[ListItem]k do • ListItem  next[ListItem] • return ListItem Beispiel • Blocksuche(15) Feld T 0-9 10-19 20-29 30-39 40-49 50-59 60-69

  20. Datenstrukturen Blocksuche(k) • p k/r • ListItem  head[T[p]] • while ListItem nil and key[ListItem]k do • ListItem  next[ListItem] • return ListItem Beispiel • Blocksuche(15) Feld T 0-9 10-19 20-29 30-39 40-49 50-59 60-69

  21. Datenstrukturen Blocksuche(k) • p k/r • ListItem  head[T[p]] • while ListItem nil and key[ListItem]k do • ListItem  next[ListItem] • return ListItem Beispiel • Blocksuche(15) Feld T 0-9 10-19 20-29 30-39 40-49 50-59 60-69

  22. Datenstrukturen Blocksuche(k) • p k/r • ListItem  head[T[p]] • while ListItem nil and key[ListItem]k do • ListItem  next[ListItem] • return ListItem Beispiel • Blocksuche(15) Feld T 0-9 10-19 20-29 30-39 40-49 50-59 60-69

  23. Datenstrukturen Blocksuche(k) • p k/r • ListItem  head[T[p]] • while ListItem nil and key[ListItem]k do • ListItem  next[ListItem] • return ListItem Beispiel • Blocksuche(15) Feld T 0-9 10-19 20-29 30-39 40-49 50-59 60-69

  24. Datenstrukturen Blocksuche(k) • p k/r • ListItem  head[T[p]] • while ListItem nil and key[ListItem]k do • ListItem  next[ListItem] • return ListItem Beispiel • Blocksuche(15) Feld T 0-9 10-19 20-29 30-39 40-49 50-59 60-69

  25. Datenstrukturen Analyse • Wollen Suchzeit für festen Schlüssel k analysieren Worst-Case • Alle Schlüssel aus demselben Block sindin Schlüsselmenge • Suchzeit: O(min{r,n}) • Ist r>n, so ist dies O(n) 0-9 10-19 20-29 30-39 40-49 50-59 60-69

  26. Datenstrukturen Analyse • Wollen Suchzeit für festen Schlüssel k analysieren Worst-Case • Alle Schlüssel aus demselben Block sindin 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 0-9 10-19 20-29 30-39 40-49 50-59 60-69

  27. Datenstrukturen Analyse • Wollen Suchzeit für festen Schlüssel k analysieren Average-Case • Durchschnittliche Laufzeit über alle möglichen Schlüsselmengen 0-9 10-19 20-29 30-39 40-49 50-59 60-69

  28. Datenstrukturen Analyse • Wollen Suchzeit für festen Schlüssel k analysieren Average-Case • Durchschnittliche Laufzeit über alle möglichen Schlüsselmengen • Durchschnittliche Länge b jeder Liste istb = r∙n/m 0-9 10-19 20-29 30-39 40-49 50-59 60-69

  29. Datenstrukturen Analyse • Wollen Suchzeit für festen Schlüssel k analysieren Average-Case • Durchschnittliche Laufzeit über alle möglichen Schlüsselmengen • Durchschnittliche Länge b jeder Liste istb = r∙n/m • Durchschnittliche Suchzeit O(1+b) 0-9 10-19 20-29 30-39 40-49 50-59 60-69

  30. Datenstrukturen Analyse • Wollen Suchzeit für festen Schlüssel k analysieren Average-Case • Durchschnittliche Laufzeit über alle möglichen Schlüsselmengen • Durchschnittliche Länge b jeder Liste istb = r∙n/m • Durchschnittliche Suchzeit O(1+b) • Speicherplatz O(m/r) 0-9 10-19 20-29 30-39 40-49 50-59 60-69

  31. Datenstrukturen Analyse • Wollen Suchzeit für festen Schlüssel k analysieren Average-Case • Durchschnittliche Laufzeit über alle möglichen Schlüsselmengen • Durchschnittliche Länge b jeder Liste istb = r∙n/m • Durchschnittliche Suchzeit O(1+b) • Speicherplatz O(m/r) • Setze r=m/n 0-9 10-19 20-29 30-39 40-49 50-59 60-69

  32. Datenstrukturen Analyse • Wollen Suchzeit für festen Schlüssel k analysieren Average-Case • Durchschnittliche Laufzeit über alle möglichen Schlüsselmengen • Durchschnittliche Länge b jeder Liste istb = r∙n/m • Durchschnittliche Suchzeit O(1+b) • Speicherplatz O(m/r) • Setze r=m/n •  O(1) Suchzeit und O(n) Speicher 0-9 10-19 20-29 30-39 40-49 50-59 60-69

  33. Datenstrukturen Analyse • Wollen Suchzeit für festen Schlüssel k analysieren Average-Case • Durchschnittliche Laufzeit über alle möglichen Schlüsselmengen • Durchschnittliche Länge b jeder Liste istb = r∙n/m • Durchschnittliche Suchzeit O(1+b) • Speicherplatz O(m/r) • Setze r=m/n •  O(1) Suchzeit und O(n) Speicher 0-9 10-19 20-29 30-39 40-49 50-59 60-69

  34. Datenstrukturen 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+b) beschränkt ist, wobei b= r∙n/m und der Durchschnitt über alle n-elementigen Teilmengen von U gebildet wird.

  35. Datenstrukturen 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

  36. Datenstrukturen 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

  37. Datenstrukturen 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) Feld T 0 1 2 Universum U h(k )=2 6 k k k 10 7 9 k 1 k 5 k h(k )=5 2 3 k k k 4 6 3 h(k )=h(k )=6 k 4 8 8 Genutzte Schlüsselmenge 7

  38. Datenstrukturen 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) Feld T 0 1 2 Universum U h(k )=2 6 k k k 10 7 9 k 1 k 5 k h(k )=5 2 3 k k k 4 6 3 h(k )=h(k )=6 Kollision! k 4 8 8 Genutzte Schlüsselmenge 7

  39. Datenstrukturen 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) Feld T 0 1 2 Universum U 6 k k k 10 7 9 k 1 k 5 k 2 3 k k k 4 6 3 k 8 8 4 Genutzte Schlüsselmenge 7

  40. Datenstrukturen 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 desHashing-Szenarios • Die Hauptschwierigkeit beim Hashingist die Frage, wie man h geschickt wählt Feld T 0-9 10-19 20-29 30-39 40-49 50-59 60-69

  41. Datenstrukturen 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)]

  42. Datenstrukturen 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 a • Durchschnittliche Länge einer Kollisionsliste, d.h. a=n/t

  43. Datenstrukturen Idee • Wähle h zufällig (aus einer Menge von geeigneten Kandidaten H)

  44. Datenstrukturen 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

  45. Datenstrukturen 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}

  46. Datenstrukturen 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

  47. Datenstrukturen 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Meine durchschnittliche Laufzeit von O(1+a).

  48. Datenstrukturen 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Meine durchschnittliche Laufzeit von O(1+a). 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+a) (a ist durchschn. Listenlänge). Damit ergibt sichinklusive Berechnung von h(k) eine Suchzeit von O(1+a) .

  49. Datenstrukturen 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+a). Dabei wird der Durchschnitt über die Auswahl von h undden Schlüssel kM gebildet. Feld T 0 1 2 6 3 8 4 7

  50. Datenstrukturen 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+a). Dabei wird der Durchschnitt über die Auswahl von h undden Schlüssel kM gebildet. Schwierigkeit • Die Suchzeit hängt von Position des gesuchten Elements in Kollisionsliste ab • Suchzeit hängt von Einfügereihenfolge undImplementierung ab Feld T 0 1 2 6 3 8 4 7

More Related