Datenstrukturen und Algorithmen. Vorlesung 9
|
|
|
- Sofia Zimmermann
- vor 7 Jahren
- Abrufe
Transkript
1 Datenstrukturen und Algorithmen Vorlesung 9
2 Inhaltsverzeichnis Vorige Woche: ADT Deque ADT Prioritätsschlange Binomial-Heap Heute betrachten wir: Aufgaben Hashtabellen
3 Aufgabe I Rot-Schwarz Kartenspiel: Zwei Spieler bekommen je n Karten (rot und schwarz). Die zwei Spieler legen 2 der Reihe nach je eine Karte (die oberste Karte aus ihrem Stapel) auf den Ablagestapel. Falls ein Spieler eine rote Karte gelegt hat, dann nimmt der andere Spieler alle Karten von dem Ablagestapel und legt diese am Ende seines Stapels. Das Spiel ist beendet, wenn einer der Spieler alle n Karten in der Hand hat. Simuliere das Spiel für n Karten. Tipp: benutze Stack(s) oder Schlange(n)
4 Aufgabe II Roboter in dem Labyrinth: In einem rechteckigen Labyrinth gibt es besetzte (X) und leere Zellen (*). Der Roboter kann sich in vier Richtungen bewegen: Nord, Süd, Ost, West Bestimme ob es einen Pfad gibt, sodass der Roboter aus dem Labyrinth rauskommt (d.h. zu der ersten oder letzten Spalte oder zu der ersten oder letzten Zeile gelangen). Bestimme den Pfad, falls es einen gibt.
5 Aufgabe II Tipp Version 1: Sei T die Menge von Positionen, wohin der Roboter vom Startpunkt gelangen kann Sei S die Menge der Positionen zu welchem der Roboter bis zu einem Zeitpunkt gelangen kann und von welchem er weiter zu anderen Positionen gehen kann Eine Möglichkeit um T und S zu bestimmen wäre folgende:
6 Aufgabe II T {Ausgangsposition} S {Ausgangsposition} while S execute Sei p ein Element aus S S S \ {p} for jede gültige Position q wohin man aus p gelangen kann und welche nicht in T ist do T T {q} S S {q} end-for end-while T kann eine Liste, ein Vektor oder eine Matrix entsprechend zu dem Labyrinth sein S kann ein Stack oder eine Schlange sein (sogar eine Prioritätsschlange)
7 Aufgabe II Tipp Version 2: Die Lösung ist ähnlich der vorigen Lösung Falls S eine Schlange ist, und T ein Stack, dann kann man am Ende im umgekehrter Reihenfolge den Pfad rekonstruieren
8 Hashtabellen
9 Direkt adressierbare Tabellen Sei die folgende Aufgabe: Es gibt Daten, für welche jedes Element einen Schlüssel hat (eine natürliche Zahl) Die Universalmenge der Schlüsseln (alle mögliche Werte) ist relativ klein, U = {0, 1,..., m 1} Es gibt keine zwei Elemente mit demselben Schlüssel Man muss die Wörterbuchoperationen unterstützen: INSERT, DELETE, SEARCH
10 Direkt adressierbare Tabellen Beispiel 1: man speichert Daten über die Buslininen aus einer Stadt: Man kann die Nummer der Buslinie als Schlüssel betrachten, da die Buslinie eindeutig ist Die Buslinie gehört zu einem relativ kleinen Intervall in Cluj- Napoca ungefähr bis 100 Beispiel 2: man speichert Daten über die Angestellte einer Firma basierend auf die Angestelltenummer (eine Zahl zwischen 1 und 1000 zum Beispiel)
11 Direkt adressierbare Tabellen Lösung: Die direkte Adressierung ist eine einfache Methode, die gut funktioniert, wenn die Universalmenge U der Schlüssel relativ klein ist. Um die dynamische Menge darzustellen, verwenden wir ein Feld, das auch direkt adressierbare Tabelle genannt wird und das wir mit T[0...m 1] bezeichnen und in der jede Position/Slot einem Schlüssel der Universalmenge U entspricht Die Daten für das Element mit Schlüssel k werden in dem Slot T[k] gespeichert Wenn die Menge kein Element mit dem Schlüssel k enthält, dann gilt T[k] = NIL
12 Direkt adressierbare Tabellen In einer direkt adressierbaren Tabellen gibt es unterschiedliche Möglichkeiten die Elemente zu speichern: Man kann in der Tabelle Pointers zu den Elementen speichern Man kann in der Tabelle die eigentlichen Elemente speichern (sowohl der Schlüssel als auch der entsprechende Wert) Man kann in der Tabelle nur den Wert speichern (der Schlüssel entspricht der Position) man muss aber irgendwie wissen ob eine Position leer ist oder nicht
13 Direkt adressierbare Tabellen Operationen function search(t, k) is: //pre: T ist ein Array (die direkt adressierbare Tabelle), k ist ein Schlüssel search T[k] end-function subalgorithm insert(t, x) is: //pre: T ist ein Array (die direkt adressierbare Tabelle), x ist ein Element T[key(x)] x //key(x) gibt den Schlüssel des Elementes x zurück end-subalgorithm subalgorithm delete(t, x) is: //pre: T ist ein Array (die direkt adressierbare Tabelle), x ist ein Element T[key(x)] NIL end-subalgorithm
14 Direkt adressierbare Tabellen Vorteile der direkten Adressierung: Einfach Effizient alle Operationen haben Θ(1) Komplexität Nachteil der direkten Adressierung: Die Schlüsseln müssen natürliche Zahlen sein Wenn die Universalmenge U groß ist, kann die Speicherung einer Tabelle T der Größe U unpraktikabel sein Die Menge K der Schlüssel, die tatsächlich gespeichert werden, kann im Vergleich zu U so klein sein, dass der größte Teil des zugewiesenes Speicherplatzes verschwendet wäre
15 Hashtabellen Hashtabellen sind eine Verallgemeinerung der direkt adressierbaren Tabellen Eine Hashtabelle erfordert wesentlich weniger Speicherplatz als eine direkt adressierbare Tabelle Ein Element in einer Hashtabelle suchen braucht auch O(1) Zeit, aber im durchschnittlicher Fall und nicht mehr im schlimmsten Fall
16 Hashtabellen Es gibt immer noch eine Tabelle T von Größe m (aber m ist nicht die Anzahl der möglichen Schlüsselwerte) - Hashtabelle Wir verwenden eine Hashfunktion h, um den Slot für den Schlüssel k zu berechnen Hierbei bildet h die Universalmenge U der Schlüssel in die Menge der Slots einer Hashtabelle T[0...m 1] ab: h : U {0, 1,..., m 1} Bemerkung: Bei der direkten Adressierung wird ein Element mit dem Schlüssel k im Slot k gespeichert Beim Hashing wird dieses Element am Platz h(k) gespeichert
17 Hashtabellen Die Idee der Hashfunktion ist den Intervall der Indexe für den Array zu verkleinern anstatt U Werte gibt es nur m Werte für die Indexe Folglich, kann es passieren, dass zwei Schlüssel auf den gleichen Slot abgebildet werden Kollision Es gibt unterschiedliche Verfahren zur Behandlung der durch die Kollisionen verursachten Konflikte
18 Hashfunktion Eine gute Hashfunktion: Kann die Anzahl der Kollisionen minimieren (gar keine Kollisionen ist aber nicht möglich) Ist deterministisch Kann in Θ(1) Zeit ausgewertet werden Idealerweise Annahme des einfachen, gleichmaßigen Hashens erfüllt jeder Schlüssel ist ungefähr gleichermaßen wahrscheinlich zu einem der m Slots gehashed, unabhängig davon wo andere Schlüssel gehashed werden: P h k = j = 1, j = 0,, m 1, k U m
19 Hashfunktion Beispiele von schlechten Hashfunktionen: h(k) = konstante Zahl h(k) = zufällige Zahl h(k) = k mod 10, wenn m > 10 usw.
20 Hashfunktion Die ideale Eigenschaften einer Hashfunktion sind im Praxis nicht möglich, da die Wahrscheinlichkeitsverteilung der auftretenden Schlüssel nicht im Voraus bekannt ist; ferner sind diese möglicherweise nicht unabhängig In der Praxis können wir häufig heuristische Verfahren (basierend auf der Grundmenge der Schlüssel) anwenden, um eine Hashfunktion mit guter Performanz zu erzeugen. Hashfunktionen sind für natürliche Zahlen definiert Es gibt unterschiedliche Verfahren um Hashfunktionen zu definieren: Die Divisionsmethode Die Multiplikationsmethode Universelles Hashing
21 Divisionsmethode Divisionsmethode: h(k) = k mod m Zum Beispiel: m = 13 k = 63 h(k) = 11 k = 52 h(k) = 0 k = 131 h(k) = 1 Auswertung schnell, da nur eine Division erforderlich Gute Wahl für m: Primzahl nicht allzu nahe an einer Zweierpotenz
22 Multiplikationsmethode Multiplikationsmethode : h(k) = m(ka mod 1), wobei m die Größe der Hash-Tabelle ist Hier wird die Hashfunktion wie folgt konstruiert: 1. Wahl einer Konstanten A im Intervall (0,1) 2. Multiplikation des Schlüssels k mit A 3. Bestimmung des gebrochennen (nichganzzahligen) Anteils von ka 4. Multiplikation des gebrochnenen Anteils mit m 5. Ergebnis nach unten abrunden
23 Multiplikationsmethode Zum Beispiel: m = 23, A = k = 63 h(k) = 23((63 A) mod 1) = = 12 k = 52 h(k) = 23((52 A) mod 1) = = 1 k = 129 h(k) = 23((129 A) mod 1) = = 9 Vorteile: Wahl von m nicht kritisch Nachteil: Auswertung langsamer als bei Divisionsmethode Manche Werte für A funktionieren besser; Knuth schlägt den Wert = vor
24 Universelles Hashing Wenn die Hashfunktion, die bei der Hashtabelle benutzt wird, bekannt ist, dann kann man immer eine Menge von Schlüsseln generieren, welche alle zu derselben Position gehasht werden (Kollision) Das kann die Leistung der Hashtabelle reduzieren Zum Beispiel: m = 13 h(k) = k mod m k = 11, 24, 37, 50, 63, 76, usw.
25 Universelles Hashing Anstatt eine einzige Hashfunktion kann man eine Sammlung von Hashfunktionen H benutzen, welche die Universalmenge U der Schlüssel in die Menge {0, 1,..., m 1} abbildet H heißt universell, falls für jedes Schlüsselpaar k, l G, k l, gilt: h H h k = h l H m H ist universell, falls für jede zufällig ausgewählte Hashfunktion h H die Kollisionswahrscheinlichkeit für zwei verschiedene Schlüssel höchstens 1/m beträgt, also nicht größer ist als in dem Fall, dass die Hash-Werte für k und l gleichverteilt zufällig aus {0, 1,...,m 1} gewählt werden.
26 Universelles Hashing Beispiel 1: Sei p eine Primzahl > der maximale Wert für einen Schlüssel aus U Für jede a {1,..., p 1} und b {1,..., p 1} kann man eine Hashfunktion definieren: h a,b (k) = (( a k + b) mod p) mod m Zum Beispiel: h 3,7 (k) = (( 3 k + 7) mod p) mod m h 4,1 (k) = (( 4 k + 1) mod p) mod m h 8,0 (k) = (( 8 k ) mod p) mod m Es gibt p (p 1) mögliche Hashfunktionen
27 Universelles Hashing Beispiel 2: Wenn der Schlüssel k ein Array ist < k 1, k 2,..., k r > sodas k i < m (oder es kann in einem Array umgewandelt werden) Sei < x 1, x 2,..., x r > eine Sequenz von zufälligen Zahlen, sodass x i {0,..., m 1} h k = σr i=1 k i x i mod m
28 Universelles Hashing Beispiel 3: Nehmen wir an, dass die Schlüssel u Bits enthalten und m = 2 b Man wählt eine zufällige b u Matrix h mit den Werten 0 und 1. Man wählt h k = h k, wo die Multiplikation mit Hilfe der Addition mod 2 berechnet wird: = 1 1 0
29 Schlüssel, die nicht natürliche Zahlen sind Die vorigen Hashfunktionen arbeiten mit Schlüsseln, die natürliche Zahlen sind Falls das nicht der Fall ist, dann gibt es zwei Möglichkeiten: Man definiert eine spezielle Hashfunktion, die mit den Schlüsseln arbeitet (z.b. h(k) = [k m] für reele Zahlen aus dem Intervall [0, 1) ) Man benutzt eine Funktion, welche die Schlüssel in natürliche Zahlen umwandelt (dann kann man eine der vorigen Hashfunktionen auf das Ergebnis anwenden) - Hashcode
30 Schlüssel, die nicht natürliche Zahlen sind Falls der Schlüssel ein String ist, dann kann man: Die ASCII-Codes für jede Buchstabe betrachten Die Buchstaben nummerieren 1 für a, 2 für b, usw. Mögliche Implementierungen für Hashcode: s[0] + s[1] s[n-1] Anagramme haben dieselbe Summe (AMPEL und LAMPE) DATES hat zum Beispiel dieselbe Summe mit CAUSE (D = C + 1, T = U 1) Nehmen wir an, dass die maximale Länge eines Wortes 10 ist. Dann nimmt der Hashcode Werte zwischen 1 und 260. Für ein Wörterbuch mit Wörter, hat man im Durchschnitt 192 Wörter pro Hashcode-Wert.
31 Schlüssel, die nicht natürliche Zahlen sind Mögliche Implementierungen für Hashcode: s[0] * 26 n-1 + s[1] * 26 n s[n-1] wobei n die Länge des Strings ist Erzeugt ein viel größeres Intervall von Hashcode-Werte Anstatt 26 (die Anzahl der Buchstaben) kann man eine Primzahl auswählen (z.b. Java benutzt 31)
32 Kollisionen Wenn es zwei Schlüssel, x und y, gibt mit demselben Hashwert h(x) = h(y) dann gibt es eine Kollision Eine gute Hashfunktion kann die Anzahl der Kollisionen minimieren, aber nicht vollständig elimieren: Versuche m + 1 Schlüssel in einer Tablle von Größe m zu verteilen Es gibt unterschiedliche Strategien für Kollisionsauflösung: Unabhängige Verkettung (separate chaining) Coalesced/Verzahnte Verkettung (coalesced chaining) Offene Adressierung
33 Geburtstag Paradox Wie viele zufällig ausgewählten Personen müssen sich in einem Raum befinden, damit die Wahrscheinlichkeit, dass zwei oder mehr dieser Personen am gleichen Tag (ohne Beachtung des Jahrganges) Geburtstag haben, größer als 50 % ist? Offensichtlich, wenn sich in dem Raum 367 Personen befinden, dann gibt es bestimmt zwei, die am gleichen Tag Geburtstag haben Damit die Wahrscheinlichkeit 99.9% ist, braucht man 70 Personen Damit die Wahrscheinlichkeit 50% ist, genügen 23 Personen
34 Unabhängige Verkettung Bei der Verkettung speichert man alle Elemente, die auf den gleichen Slot abgebildet werden, in einer verketteten Liste Slot j enthält einen Zeiger auf den Kopf der Liste aller gespeicherten Elemente, die auf j abgebildet werden, oder NIL falls es keine solche Elemente gibt Wörterbuchoperationen werden als Operationen auf der Liste implementiert: insert(t, x) Füge einen neuen Knoten am Anfang der Liste T[h(key[x])] search(t, k) Suche in der Liste T[h(k)] nach einem Element mit dem Schlüssel k delete(t, x) Entferne x aus der Liste T[h(key[x])]
35 Hashtabellen mit unabhängige Verkettung - Repräsentierung Als Vereinfachung speichern wir nur die Schlüssel in den Knoten Eine Hashtabelle mit unabhängige Verkettung kann folgendermaßen repräsentiert werden: Node: key: TKey next: Node HashTable: T: Node[] //ein Array von Pointers zu den Knoten m: Integer h: TFunction //die Hashfunktion
36 Hashtabellen mit unabhängige Verkettung insert subalgorithm insert(ht, k) is: //pre: ht ist ein HashTable, k ist ein TKey //post: k wurde in ht eingefügt position ht.h(k) //man berechnet den Hashwert allocate(newnode) [newnode].next NIL [newnode].key k if ht.t[position] = NIL then ht.t[position] newnode else [newnode].next ht.t[position] ht.t[position] newnode end-if end-subalgorithm
37 Hashtabellen mit unabhängige Verkettung search function search(ht, k) is: //pre: ht ist ein HashTable, k ist ein TKey //post: gibt True zurück falls k in ht enthalten ist, False ansonsten position ht.h(k) currentn ht.t[position] while currentn NIL and [currentn].key k execute currentn [currentn].next end-while if currentn NIL then search True else search False end-if end-function Normalerweise sollte die Suchfunktion den Wert entsprechend zu dem Schlüssel zurückgeben anstatt wahr oder falsch, aber jetzt arbeiten wir nur mit den Schlüsseln
38 Analyse des Hashings mit Verkettung Die mittlere Laufzeit des Hashings hängt davon ab, wie gut die Hashfunktion h die Menge der zu speichernden Schlüssel auf die m Slots verteilt Einfaches gleichmäßiges Hashing Annahme: jedes beliebige gegebene Element wird mit gleicher Wahrscheinlichkeit und unabhängig von den anderen Elementen auf einer der m Slots abgebildet Zu einer gegebenen Hashtabelle T mit m Slots, die n Elemente speichert, definieren wir den Belegungsfaktor α als n/m, d.h. als die mittlere Anzahl der Elemente, die in einer Kette der Hashtabelle gespeichert sind Der Belegungsfaktor für Hashing mit unabhängige Verkettung kann kleiner, gleich oder größer als 1 sein
39 Analyse des Hashings mit Verkettung insert Der Slot, wo man das Element einfügen muss, kann: leer sein dann erstellt man einen neuen Knoten und man fügt ihn zu dem leeren Slot ein besetzt dann erstellt man einen neuen Knoten und man fügt ihn am Anfang der Liste ein Die Laufzeit für das Einfügen ist für beide Fälle im schlechtesten Fall Θ(1) Wenn man überprüfen muss, ob das Element schon in der Tabelle existiert, dann kommen noch die Kosten der Suchoperation dazu
40 Analyse des Hashings mit Verkettung search Es gibt zwei Fälle: Erfolglose Suche Erfolgreiche Suche Wir setzen voraus: der Hashwert kann in Θ(1) berechnet werden die Zeit,die für das Suchen eines Elementes mit dem Schlüssel k benötigt wird, hängt linear von der Länge der Liste T[h(k)] ab
41 Analyse des Hashings mit Verkettung search Theorem: In einer Hashtabelle, in der Kollision durch Verkettung aufgelöst wird, benötigt eine erfolglose Suche unter der Annahme des einfachen gleichmäßigen Hashings eine Laufzeit im Mittel von Θ(1 + α). Theorem: In einer Hashtabelle, in der Kollision durch Verkettung aufgelöst wird, benötigt eine erfolgreiche Suche unter der Annahme des einfachen gleichmäßigen Hashings eine Laufzeit im Mittel von Θ(1 + α). Beweis Idee: Θ(1) wird gebraucht um den Wert der Hashfunktion zu berechnen und α ist die Durchschnittszeit, die gebraucht wird, um eine der m Listen zu durchsuchen
42 Analyse des Hashings mit Verkettung search Falls n = O(m) (die Anzahl der Slots in der Hashtabelle ist proportional zur Anzahl der Elemente in der Tabelle) α = n m = O m m = O 1 Die Suche benötigt im Mittel konstante Zeit Die Komplexität im schlimmsten Fall ist Θ(n) Alle n Schlüssel könnten auf denselben Slot abgebildet werden, wodurch eine Liste der Länge n erzeugt werden würde (dann durchsucht man die ganze Liste) Im Praxis sind Hashtabellen effizient
43 Analyse des Hashings mit Verkettung delete Löschen: Falls die Liste doppelt verkettet ist und man kennt die Adresse des Knotens: Θ(1) Falls die Liste einfach verkettet ist: Zeit ist linear mit der Länge der Liste Alle Wörterbuchoperationen können im Mittel in Zeit O(1) ausgeführt werden Theoretisch kann man eine beliebige Anzahl von Elementen in einer Hashtabelle mit unabhängige Verkettung speichern, aber die Komplexität ist proportional zu α. Falls α zu groß ist resize und rehash
44 Unabhängige Verkettung Beispiel Sei eine Hashtabelle von Größe m = 11 mit unabhängige Verkettung als Kollisionsbehandlung und eine Hashfunktion mit der Divisionsmethode Füge in die Tabelle folgende Buchstaben ein (ohne den Leerzeichen): A SEARCHING EXAMPLE Für jede Buchstabe ist der Hashcode der Index der Buchstabe in dem Alphabet Buchstabe A S E R C H I N G X M P L Hashcode h(buchstabe)
45 Unabhängige Verkettung Beispiel Nachdem alle Buchstaben in der Hashtabelle eingefügt wurden: Belegungsfaktor α: 17/11 = 1.54 die durchschnittliche Länge einer Liste
46 Iterator Wie kann man einen Iterator für eine Hashtabelle mit unabhängige Verkettung definieren? Da die Reihenfolge der Elemente nicht wichtig ist, kann der Iterator die Elemente in einer beliebigen Reihenfolge iterieren Für die Hashtabelle auf der vorigen Folie ist die einfachste Reihenfolge für das Iterieren: LAAAMXNCEPEEGRHSI
47 Iterator Der Iterator für eine Hashtabelle mit unabhängige Verkettung ist eine Mischung zwischen dem Iterator für ein Array und dem Iterator für eine verkettete Liste Man braucht eine aktuelle Position für die Hashtabelle und einen aktuellen Knoten für die verkettete Liste IteratorHT: h: HashTable currentpos: Integer currentnode: Node
48 Iterator - init subalgorithm init(ith, ht) is: //pre: ith ist ein IteratorHT, ht ist ein HashTable ith.ht ht ith.currentpos 0 while ith.currentpos < ht.m and ht.t[ith.currentpos] = NIL execute ith.currentpos ith.currentpos + 1 end-while if ith.currentpos < ht.m then ith.currentnode ht.t[ith.currentpos] else //die Hashtabelle ist leer ith.currentnode NIL end-if end-subalgorithm Komplexität: O(m)
49 Iterator - getcurrent subalgorithm getcurrent(ith, elem) is: elem [ith.currentnode].key end-subalgorithm Komplexität: Θ(1)
50 Iterator - next subalgorithm next(ith) is: if [ith.currentnode].next NIL then ith.currentnode [iht.currentnode].next else ith.currentpos ith.currentpos + 1 while ith.currentpos < ith.ht.m and ith.ht.t[ith.currentpos]=nil execute ith.currentpos ith.currentpos + 1 end-while if ith.currentpos NIL then ith.currentnode ith.ht.t[ith.currentpos] else ith.currentnode NIL end-if end-if end-subalgorithm Komplexität: O(m)
51 Iterator - valid function valid(ith) is: if ith.currentnode = NIL then valid false else valid true end-if end-function Komplexität: Θ(1)
Datenstrukturen und Algorithmen. Vorlesung 10
Datenstrukturen und Algorithmen Vorlesung 10 Hashtabelle als Erinnerung Hashtabellen sind Tabellen (Arrays), wo aber die Elemente nicht von links nach rechts eingefügt werden, wie bei typischen Arrays
12. Hashing. Hashing einfache Methode um Wörtebücher zu implementieren, d.h. Hashing unterstützt die Operationen Search, Insert, Delete.
Hashing einfache Methode um Wörtebücher zu implementieren, d.h. Hashing unterstützt die Operationen Search, Insert, Delete. Worst-case Zeit für Search: Θ(n). In der Praxis jedoch sehr gut. Unter gewissen
13. Hashing. AVL-Bäume: Frage: Suche, Minimum, Maximum, Nachfolger in O(log n) Einfügen, Löschen in O(log n)
AVL-Bäume: Ausgabe aller Elemente in O(n) Suche, Minimum, Maximum, Nachfolger in O(log n) Einfügen, Löschen in O(log n) Frage: Kann man Einfügen, Löschen und Suchen in O(1) Zeit? 1 Hashing einfache Methode
Informatik II, SS 2016
Informatik II - SS 2016 (Algorithmen & Datenstrukturen) Vorlesung 8 (13.5.2016) Hashtabellen I Algorithmen und Komplexität Dictionary mit sortiertem Array Laufzeiten: create: O(1) insert: O(n) find: O(log
Teil VII. Hashverfahren
Teil VII Hashverfahren Überblick 1 Hashverfahren: Prinzip 2 Hashfunktionen 3 Kollisionsstrategien 4 Aufwand 5 Hashen in Java Prof. G. Stumme Algorithmen & Datenstrukturen Sommersemester 2009 7 1 Hashverfahren:
Datenstrukturen und Algorithmen. Vorlesung 8
Datenstrukturen und Algorithmen Vorlesung 8 Inhaltsverzeichnis Vorige Woche: ADT Stack ADT Queue Heute betrachten wir: ADT Deque ADT Prioritätsschlange Binomial-Heap Schriftliche Prüfung Informationen
Datenstrukturen und Algorithmen. Vorlesung 5
Datenstrukturen und Algorithmen Vorlesung 5 Inhaltsverzeichnis Vorige Woche: Sortierte Listen Zyrkuläre Listen Verkettete Listen auf Arrays Heute betrachten wir: Skip Listen ADT Set ADT Map Iterator ADT
Verbund/Struktur (record/struct)
Arrays. Iteratoren. Verbund/Struktur (record/struct) Ein Verbund oder Struktur ist eine statische Datenstruktur Ein Verbund ist eine Menge von Elementen (meistens von unterschiedlichen Typen), die eine
Hashing II. Übersicht. 1 Hashing und Verkettung. 2 Offene Adressierung
Übersicht Datenstrukturen und Algorithmen Vorlesung 13: 1 Joost-Pieter Katoen Lehrstuhl für Informatik 2 Software Modeling and Verification Group http://moves.rwth-aachen.de/teaching/ss-15/dsal/ 2 Effizienz
Algorithmen und Datenstrukturen
Algorithmen und Datenstrukturen Prof. Martin Lercher Institut für Informatik Heinrich-Heine-Universität Düsseldorf Teil Hash-Verfahren Version vom: 18. November 2016 1 / 28 Vorlesung 9 18. November 2016
Dictionary Definition
Kapitel ADS:IV IV. Datenstrukturen Record Linear List Linked List Stack Queue Priority Queue Dictionary Direct-address Table Hash Function ADS:IV-60 Datenstrukturen POTTHAST 2018 Dictionary Definition
Vorlesung Informatik 2 Algorithmen und Datenstrukturen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (12 Hashverfahren: Verkettung der Überläufer) Prof. Dr. Susanne Albers Möglichkeiten der Kollisionsbehandlung Kollisionsbehandlung: Die Behandlung
Algorithmen und Datenstrukturen (für ET/IT) Programm heute. Sommersemester Dr. Tobias Lasser
Algorithmen und Datenstrukturen (für ET/IT) Sommersemester 06 Dr. Tobias Lasser Computer Aided Medical Procedures Technische Universität München Programm heute 7 Fortgeschrittene Datenstrukturen 8 Such-Algorithmen
Hashing. Überblick Aufgabe Realisierung
Überblick Aufgabe Realisierung Aufgabe Realisierung Anforderungen Wahl einer Hashfunktion mit Verkettung der Überläufer Offene Universelles 2/33 Überblick Aufgabe Realisierung Aufgabe Dynamische Verwaltung
Algorithmen und Datenstrukturen
Universität Innsbruck Institut für Informatik Zweite Prüfung 16. Oktober 2008 Algorithmen und Datenstrukturen Name: Matrikelnr: Die Prüfung besteht aus 8 Aufgaben. Die verfügbaren Punkte für jede Aufgabe
Informatik II, SS 2014
Informatik II SS 2014 (Algorithmen & Datenstrukturen) Vorlesung 9 (28.5.2014) Hashtabellen III Algorithmen und Komplexität Offene Adressierung : Zusammenfassung Offene Adressierung: Alle Schlüssel/Werte
Hashing I. 1 Direkte Adressierung. 2 Grundlagen des Hashings. 3 Kollisionsauflösung durch Verkettung. 4 Hashfunktionen. 5 Offene Adressierung
Übersicht Datenstrukturen und Algorithmen Vorlesung 2: Hashing Prof. Dr. Erika Ábrahám Theorie Hybrider Systeme Informatik 2 http://ths.rwth-aachen.de/teaching/ss-4/ datenstrukturen-und-algorithmen/ Diese
Themen. Hashverfahren. Stefan Szalowski Programmierung II Hashverfahren
Themen Hashverfahren Einleitung Bisher: Suchen in logarithmischer Zeit --> Binärsuche Frage: Geht es eventuell noch schneller/effektiver? Finden von Schlüsseln in weniger als logarithmischer Zeit Wichtig
Vorlesung Informatik 2 Algorithmen und Datenstrukturen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (11 Hashverfahren: Allgemeiner Rahmen) Prof. Dr. Susanne Albers Das Wörterbuch-Problem (1) Das Wörterbuch-Problem (WBP) kann wie folgt beschrieben
P ( Mindestens zwei Personen haben am gleichen Tag Geb. ) (1) = 1 P ( Alle Personen haben an verschiedenen Tagen Geb. ) (2)
1 Hashing Einleitung Eine sehr naive Herangehensweise zur Implementierung eines Wörterbuchs ist die Benutzung eines hinreichend grossen unsortierten Arrays, in dem jeweils an eine freie Position eingefügt
Informatik II, SS 2014
Informatik II SS 2014 (Algorithmen & Datenstrukturen) Vorlesung 7 (21.5.2014) Binäre Suche, Hashtabellen I Algorithmen und Komplexität Abstrakte Datentypen : Dictionary Dictionary: (auch: Maps, assoziative
Übungsklausur Algorithmen I
Jun.-Prof. Hofheinz, Jun.-Prof. Meyerhenke (ITI, KIT) 08.06.2015 Übungsklausur Algorithmen I Aufgabe 1. (Algorithm Engineering) Nennen Sie zwei Konzepte, die Algorithm Engineering im Gegensatz zu theoretischer
14. Hashing. Motivation. Naive Ideen. Bessere Idee? k(s) = s i b i
Motivation 14. Hashing Hash Tabellen, Geburtstagsparadoxon, Hashfunktionen, Perfektes und universelles Hashing, Kollisionsauflösung durch Verketten, offenes Hashing, Sondieren [Ottan/Widayer, Kap. 4.1-4.3.2,
Die mittlere Zeit zum Auffinden eines Elements in einer Hash-Tabelle beträgt, unter realistischen Annahmen, O(1).
Algorithmen und Datenstrukturen 213 9 Hash-Tabellen Viele Anwendungen erfordern dynamische Mengen, für welche die sog. Wörterbuch-Operationen INSERT, SEARCH und DELETE verfügbar sind. Beispiel: Symboltabelle
17. Hashing. Hash Tabellen, Geburtstagsparadoxon, Hashfunktionen, Kollisionsauflösung durch Verketten, offenes Hashing, Sondieren
336 17. Hashing Hash Tabellen, Geburtstagsparadoxon, Hashfunktionen, Kollisionsauflösung durch Verketten, offenes Hashing, Sondieren Motivation 337 Ziel: Tabelle aller n Studenten dieser Vorlesung Anforderung:
Grundlagen: Algorithmen und Datenstrukturen
Grundlagen: Algorithmen und Datenstrukturen Prof. Dr. Hanjo Täubig Lehrstuhl für Effiziente Algorithmen (Prof. Dr. Ernst W. Mayr) Institut für Informatik Technische Universität München Sommersemester 2010
Beweis: Die obere Schranke ist klar, da ein Binärbaum der Höhe h höchstens
Beweis: Die obere Schranke ist klar, da ein Binärbaum der Höhe h höchstens h 1 2 j = 2 h 1 j=0 interne Knoten enthalten kann. EADS 86/600 Beweis: Induktionsanfang: 1 ein AVL-Baum der Höhe h = 1 enthält
Informatik II, SS 2018
Informatik II - SS 2018 (Algorithmen & Datenstrukturen) Vorlesung 8 (14.5.2018) Hashtabellen III Algorithmen und Komplexität Hashtabellen mit Chaining Jede Stelle in der Hashtabelle zeigt auf eine verkette
Hashing Hashfunktionen Kollisionen Ausblick. Hashverfahren. Dank an: Beate Bollig, TU Dortmund! 1/42. Hashverfahren
Dank an: Beate Bollig, TU Dortmund! 1/42 Hashing Überblick Aufgabe Realisierung Aufgabe Realisierung Anforderungen Wahl einer Hashfunktion mit Verkettung der Überläufer Offene Universelles Hashing 2/42
Übung Algorithmen und Datenstrukturen
Übung Algorithmen und Datenstrukturen Sommersemester 2017 Patrick Schäfer, Humboldt-Universität zu Berlin Agenda: Kürzeste Wege, Heaps, Hashing Heute: Kürzeste Wege: Dijkstra Heaps: Binäre Min-Heaps Hashing:
Übersicht. Datenstrukturen und Algorithmen. Einführung (II) Einführung (I) Vorlesung 12: Hashing I (K11) Counting Sort. Joost-Pieter Katoen
Übersicht Datenstrukturen und Algorithen Vorlesung 2: (K) Joost-Pieter Katoen Lehrstuhl für Inforatik 2 Software Modeling and Verification Group https://oves.rwth-aachen.de/teaching/ss-8/dsal/ 4. Juni
Untersuchen Sie, inwiefern sich die folgenden Funktionen für die Verwendung als Hashfunktion eignen. Begründen Sie Ihre Antwort.
Prof. aa Dr. Ir. Joost-Pieter Katoen Christian Dehnert, Friedrich Gretz, Benjamin Kaminski, Thomas Ströder Tutoraufgabe 1 (Güte von Hashfunktionen): Untersuchen Sie, inwiefern sich die folgenden Funktionen
INSTITUT FÜR THEORETISCHE INFORMATIK, PROF. SANDERS
Julian Arz, Timo Bingmann, Sebastian Schlag INSTITUT FÜR THEORETISCHE INFORMATIK, PROF. SANDERS 1 KIT Julian Universität Arz, des Timo LandesBingmann, Baden-Württemberg Sebastian und Schlag nationales
3. Übung Algorithmen I
INSTITUT FÜR THEORETISCHE INFORMATIK 1 KIT Universität des Landes Baden-Württemberg und nationales Forschungszentrum in der Helmholtz-Gemeinschaft Institut für Theoretische www.kit.edu Informatik Hashtabellen:
Grundlagen: Algorithmen und Datenstrukturen
Grundlagen: Algorithmen und Datenstrukturen Prof. Dr. Hanjo Täubig Lehrstuhl für Effiziente Algorithmen (Prof. Dr. Ernst W. Mayr) Institut für Informatik Technische Universität München Sommersemester 2010
4. Übung zu Algorithmen I 17. Mai 2017
4. Übung zu Algorithmen I 17. Mai 2017 Björn Kaidel [email protected] (mit Folien von Julian Arz, Timo Bingmann, Lisa Kohl, Christian Schulz, Sebastian Schlag und Christoph Striecks) Organisatorisches
Eine universelle Klasse von Hash-Funktionen
Eine universelle Klasse von Hash-Funktionen Annahmen: U = p, mit Primzahl p und U = {0,, p-1} Seien a {1,, p-1} und b {0,, p-1} Definiere wie folgt Satz: Die Menge ist eine universelle Klasse von Hash-Funktionen..
Hashing. Überblick Aufgabe Realisierung
Überblick Aufgabe Realisierung Aufgabe Realisierung Anforderungen Wahl einer Hashfunktion it Verkettung der Überläufer Offene Universelles 2/33 Überblick Aufgabe Realisierung Aufgabe Dynaische Verwaltung
Humboldt-Universität zu Berlin Berlin, den Institut für Informatik
Humboldt-Universität zu Berlin Berlin, den 15.06.2015 Institut für Informatik Prof. Dr. Ulf Leser Übungen zur Vorlesung M. Bux, B. Grußien, J. Sürmeli, S. Wandelt Algorithmen und Datenstrukturen Übungsblatt
Fibonacci-Suche. Informatik I. Fibonacci-Suche. Fibonacci-Suche. Einführung. Rainer Schrader. 24. Mai 2005
Fibonacci-Suche Informatik I Einführung Rainer Schrader Zentrum für Angewandte Informatik Köln 4. Mai 005 Grundidee wie bei der Binärsuche, aber andere Aufteilung Fibonacci-Zahlen: F 0 = 0 F 1 = 1 F m
11. Elementare Datenstrukturen
11. Elementare Datenstrukturen Definition 11.1: Eine dynamische Menge ist gegeben durch eine oder mehrer Mengen von Objekten sowie Operationen auf diesen Mengen und den Objekten der Mengen. Dynamische
Übungsklausur Algorithmen I
Name: Vorname: Matrikelnr.: Tutorium: Jun.-Prof. Hofheinz, Jun.-Prof. Meyerhenke (ITI, KIT) 08.06.2015 Übungsklausur Algorithmen I Aufgabe 1. (Algorithm Engineering) [2 Punkte] Nennen Sie zwei Konzepte,
Counting - Sort [ [ ] [ [ ] 1. SS 2008 Datenstrukturen und Algorithmen Sortieren in linearer Zeit
Counting-Sort Counting - Sort ( A,B,k ). for i to k. do C[ i]. for j to length[ A]. do C[ A[ j ] C[ A[ j ] +. > C[ i] enthält Anzahl der Elemente in 6. for i to k. do C[ i] C[ i] + C[ i ]. > C[ i] enthält
Kapitel 6 HASHING. Algorithmen & Datenstrukturen Prof. Dr. Wolfgang Schramm
Kapitel 6 HASHING Algorithmen & Datenstrukturen Prof. Dr. Wolfgang Schramm Übersicht 1 1. Einführung 2. Algorithmen 3. Eigenscha?en von Programmiersprachen 4. Algorithmenparadigmen 5. Suchen & SorGeren
Algorithmen und Datenstrukturen
1 Algorithmen und Datenstrukturen Wintersemester 2015/16 12. Vorlesung Hashing Prof. Dr. Alexander Wolff Lehrstuhl für Informatik I 2 Übungen Begründen Sie grundsätzlich alle Behauptungen außer die Aufgabe
Hashtabellen. Hashverfahren, was ist das eigentlich?
Hashverfahren, was ist das eigentlich? Das Hashverfahren ist ein Algorithmus zum Suchen von Datenobjekten in großen Datenmengen. Es basiert auf der Idee, dass eine mathematische Funktion die Position eines
Algorithmen und Datenstrukturen Hashverfahren
Algorithmen und Datenstrukturen Hashverfahren Matthias Teschner Graphische Datenverarbeitung Institut für Informatik Universität Freiburg SS 12 Überblick Prinzip Details Anwendungen Motivation Hashverfahren
U h(k 1 ) h(k 4 ) k 1 h(k 3 )
92 Kapitel 8 Hashing Hashing ist ein anderes Vorgehen, das auch ohne Baumstrukturen ein effizientes Suchen ermöglicht. Wie bei Bucketsort ist auch hier eine der grundsätzlichen Eigenschaften, dass Hashing
Implementierung von Mengen (und Wörterbücher): Alternative zu Suchbäumen
5.8 HashVerfahren und Anwendungen Implementierung von Mengen (und Wörterbücher): Alternative zu Suchbäumen hash: zerhacken, Hackfleisch Grundidee: Indexierung der Tabelle mit geeignet transformierten Schlüsselwerten
Algorithmen und Datenstrukturen II: Hashverfahren
Algorithmen und Datenstrukturen II: Hashverfahren Prof. Dr. Oliver Braun Letzte Änderung: 10.05.2017 16:21 Algorithmen und Datenstrukturen II: Hashverfahren 1/28 Hashverfahren bisher jeder Datensatz durch
8. Hashing Lernziele. 8. Hashing
8. Hashing Lernziele 8. Hashing Lernziele: Hashverfahren verstehen und einsetzen können, Vor- und Nachteile von Hashing gegenüber Suchbäumen benennen können, verschiedene Verfahren zur Auflösung von Kollisionen
Es sei a 2 und b 2a 1. Definition Ein (a, b)-baum ist ein Baum mit folgenden Eigenschaften:
Binäre Suchbäume (a, b)-bäume (Folie 173, Seite 56 im Skript) Es sei a 2 und b 2a 1. Definition Ein (a, b)-baum ist ein Baum mit folgenden Eigenschaften: 1 Jeder Knoten hat höchstens b Kinder. 2 Jeder
Informatik I 5. Kapitel. Hashverfahren. Hashverfahren. Hashverfahren. Rainer Schrader. 3. Juni Gliederung
Informatik I 5. Kapitel Rainer Schrader Zentrum für Angewandte Informatik Köln 3. Juni 2008 1 / 86 2 / 86 Gliederung Adressberechnung durch Hashing Hashfunktionen Kollisionsbehandlung Anwendung von Hashfunktionen
Hashing. Algorithmen und Datenstrukturen II 1
Hashing Algorithmen und Datenstrukturen II 1 Einführendes Beispiel Ein Pizza-Lieferservice in Bielefeld speichert die Daten seiner Kunden: Name, Vorname, Adresse und Telefonnummer Wenn ein Kunde seine
17. Hashing. Motivation. Naive Ideen. Bessere Idee? k(s) = s i b i
Motivation 17. Hashing Hash Tabellen, Geburtstagsparadoxon, Hashfunktionen, Kollisionsauflösung durch Verketten, offenes Hashing, Sondieren Ziel: Tabelle aller n Studenten dieser Vorlesung Anforderung:
Algorithmen und Datenstrukturen II: Hashverfahren
Algorithmen und Datenstrukturen II: Hashverfahren Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 10.05.2017 16:21 Inhaltsverzeichnis Hashverfahren....................................
Kollision Hashfunktion Verkettung Offenes Hashing Perfektes Hashing Universelles Hashing Dynamisches Hashing. 4. Hashverfahren
4. Hashverfahren geg.: Wertebereich D, Schlüsselmenge S = {s 1,..., s n } D Menge A von Speicheradressen; oft: A = {0,..., m 1} jedes Speicherverfahren realisiert h : D A mögliche Implementierungen von
5.8.2 Erweiterungen Dynamische Hash-Funktionen (mit variabler Tabellengröße)?
5.8.2 Erweiterungen Dynamische Hash-Funktionen (mit variabler Tabellengröße)? Ladefaktor: α, n aktuelle Anzahl gespeicherter Werte m Tabellengröße. Einfacher Ansatz: rehash() a z c h s r b s h a z Wenn
4.4.1 Statisches perfektes Hashing. des Bildbereichs {0, 1,..., n 1} der Hashfunktionen und S U, S = m n, eine Menge von Schlüsseln.
4.4 Perfektes Hashing Das Ziel des perfekten Hashings ist es, für eine Schlüsselmenge eine Hashfunktion zu finden, so dass keine Kollisionen auftreten. Die Größe der Hashtabelle soll dabei natürlich möglichst
NAME, VORNAME: Studiennummer: Matrikel:
TU Ilmenau, Fakultat IA Institut für Theoretische Informatik FG Komplexitätstheorie und Effiziente Algorithmen Prof. Dr. (USA) M. Dietzfelbinger Klausur Algorithmen und Datenstrukturen SS08, Ing.-Inf.
Datenstrukturen und Algorithmen
Datenstrukturen und Algorithmen VO 708.031 29.11.2012 [email protected] 1 WH: Untere Schranke für SorGeren Die bisher betrachteten schnellen Sor$eralgorithmen (MergeSort, HeapSort, QuickSort)
