Offene Adressierung (1) Hashing mit Kollisionsvermeidung weist Objekt mit gegebenen Schlüssel feste Position in Hashtabelle zu. Bei Hashing durch offene Adressierung wird Objekt mit Schlüssel keine feste Position zugewiesen. Position abhängig von Schlüssel und bereits belegten Positionen in Hashtabelle. Für neues Objekt wird erste freie Position gesucht. Dazu wird Hashtabelle nach freier Position durchsucht. Reihenfolge der Suche hängt vom Schlüssel des einzufügenden Objekts ab. SS 2009 Datenstrukturen und Algorithmen 13. Hashing 1 Offene Adressierung (2) Keine Listen zur Kollisionsvermeidung. Wenn Anzahl eingefügter Objekte ist m, dann sind keine weiteren Einfügungen mehr möglich. Listen zur Kollisionsvermeidung möglich, aber Ziel von offener Adressierung ist es, Verfolgen von Verweisen zu vermeiden. Da keine Listen benötigt werden, kann die Hashtabelle vergrößert werden. Suchen von Objekten in der Regel schneller, da keine Listen linear durchsucht werden müssen. SS 2009 Datenstrukturen und Algorithmen 13. Hashing 2 Offene Adressierung (3) Laufzeit für Einfügen nur noch im Durchschnitt (1). Entfernen von Objekten schwierig, deshalb Anwendung von offener Adressierung oft nur, wenn Entfernen nicht benötigt wird. SS 2009 Datenstrukturen und Algorithmen 13. Hashing 3 Hashfunktionen bei offener Adressierung Hashfunktion legt für jeden Schlüssel fest, in welcher Reihenfolge für Objekte mit diesem Schlüssel nach freier Position in Hashtabelle gesucht wird. Hashfunktion h von der Form h : U 0,1, , m 1 0,1, , m 1. m:=Größe der Hashtabelle. Verlangen, dass für alle Schlüssel k die Folge hk ,0, hk ,1, , hk , m 1 eine Permutation der Folge 0,1, , m 1 ist. hk ,0, hk ,1, , hk , m 1 heißt Testfolge bei Schlüssel k. SS 2009 Datenstrukturen und Algorithmen 13. Hashing 4 Offene Adressierung - Illustration 79 69 98 72 50 SS 2009 Datenstrukturen und Algorithmen 13. Hashing 5 Analyse von offener Adressierung (1) Definition 13.4: Nehmen wir an, dass für jeden Schlüssel jede der m! Permutationen der Folge (0,1,...,m-1) mit gleicher Wahrscheinlichkeit die Testfolge ist, so nennen wir dieses uniformes offenes Hashen. Satz 13.5 : Ist der Lastfaktor einer Hashtabelle bei uniformen offenem Hashing , so ist die erwartete Anzahl von Tests bei einer nicht erfolgreichen Suche 1/(1- ). Korollar 13.6: Ist der Lastfaktor einer Hashtabelle bei uniformen offenem Hashing , so ist die erwartete Anzahl von Tests bei einer Einfügung 1/(1- ). SS 2009 Datenstrukturen und Algorithmen 13. Hashing 6 Analyse von offener Adressierung (2) Satz 13.7: Ist der Lastfaktor einer Hashtabelle bei uniformen offenem Hashing , so ist bei einem zufälligen Suchobjekt die erwartete Anzahl von Tests bei einer erfolgreichen Suche höchstens 1 1 ln . α 1 α SS 2009 Datenstrukturen und Algorithmen 13. Hashing 7 Hashing – Zusammenfassung (1) Hashing ist eine einfache Methode Wörterbücher zu implementieren. Hashing unterstützt also Einfügen, Entfernen und Suchen von Objekten. Einfügen benötigen im worst-case konstante Laufzeit. Suchen und Entfernen benötigt bei geeigneten Annahmen im Erwartungswert ebenfalls konstante Zeit. In der Praxis ist Hashing sehr erfolgreich. SS 2009 Datenstrukturen und Algorithmen 13. Hashing 8 Hashing – Zusammenfassung (2) Haben zwei Varianten kennen gelernt: 1. Hashing mit Kollisionsverwaltung durch Listen. 2. Offene Adressierung zur Kollisionsvermeidung. SS 2009 Datenstrukturen und Algorithmen 13. Hashing 9 Universelles Hashen – Idee Bei jeder Hashfunktion gibt es schlechte Eingaben, d.h., eine Folge von Einfügeoperationen, so dass Suche Zeit linear in der Anzahl der gespeicherten Objekte benötigt. Es müssen Objekte und Schlüssel so gewählt werden, dass alle Hashwerte identisch sind. Lösung besteht darin, nicht eine Hashfunktion zu wählen, sondern eine ganze Menge von Hashfunktionen. Unabhängig von Schlüsseln wird dann eine der Hashfunktionen ausgewählt. Führt zu universellem Hashing. SS 2009 Datenstrukturen und Algorithmen 13. Hashing 10 Universelles Hashen - Definition Definition 13.8: Sei H eine endliche Menge von Funktionen von U nach 0,1, , m 1. Die Menge H heisst universell, wenn für je zwei Schlüssel k , l mit k l gilt: Die Anzahl der Funktionen h H mit hk hl ist H höchstens . m SS 2009 Datenstrukturen und Algorithmen 13. Hashing 11 Ausblick – Perfektes Hashen Soll nur Einfügen und Suchen unterstützt werden und werden alle Objekte zu Beginn eingefügt, so kann Hashing verbessert werden. n Objekte werden zu Beginn in Zeit n eingefügt. Jede Suche benötigt danach im worst-case Zeit 1. Idee wie bei Hashing mit Kollisionsverwaltung. Allerdings werden nicht Listen zur Kollisionsverwaltung benutzt, sondern wieder Hashtabellen. Verfahren wird perfektes Hashing genannt. SS 2009 Datenstrukturen und Algorithmen 13. Hashing 12 14. Elementare Graphalgorithmen Graphen sind eine der wichtigsten Modellierungskonzepte der Informatik Graphalgorithmen bilden die Grundlage vieler Algorithmen in der Praxis Zunächst kurze Wiederholung von Graphen. Dann Darstellungen von Graphen Schließlich einfache Graphalgorithmen: Breiten- und Tiefensuche, Zusammenhangskomponenten, Minimalspannende Bäume SS 2009 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 13 Wiederholung Graphen – Gerichtete Graphen Ein gerichteter Graph G ist ein Paar (V,E), wobei V eine endliche Menge ist und E V V . Elemente aus V heißen Knoten, Elemente aus E heißen Kanten. Entsprechend heißt V Knotenmenge und E heißt Kantenmenge von G. Kanten sind geordnete Paare von Knoten. Kanten der Form (u,u), u V , sind zugelassen und heißen Schleifen. Ist u, v E , so sagen wir, dass die Kante von u nach v führt. Sagen auch, dass u und v adjazent sind. Müssen dann aber noch Richtung berücksichtigen. SS 2009 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 14 Illustration gerichteter Graph V 1,2,3,4,5,6 E 1,2, 2,2, 2,4 , 2,5 , 4,1, 4,5 , 5,4 , 6,3 SS 2009 1 2 3 4 5 6 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 15 Wiederholung Graphen – Ungerichtete Graphen Ein ungerichteter Graph G ist ein Paar (V,E), wobei V eine endliche Menge ist und E eine Menge von 2-elementigen Teilmengen von V ist. Elemente aus V heißen Knoten, Elemente aus E heißen Kanten. Entsprechend heißt V Knotenmenge und E heißt Kantenmenge von G. Formal haben Kanten die Form u, v mit u, v V . Schreiben aber wie bei gerichteten Graphen Kanten als Paare (u,v), unterscheiden dabei aber nicht zwischen (u,v) und (v,u). Kanten der Form (u,u) sind nicht zugelassen. Ist u, v E , so sagen wir, dass u und v adjazent sind. SS 2009 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 16 Illustration ungerichteter Graph V 1,2,3,4,5,6 E 1,2, 1,5 , 2,5 , 6,3 SS 2009 1 2 3 4 5 6 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 17 Darstellung von Graphen – Adjazenzlisten (1) Die Adjazenzlisten-Darstellung eines Graphen G=(V,E) besteht aus einem Array Adj von V Listen. Pro Knoten u enthält Adj damit genau eine Liste Adju. Für alle u V enthält Adju alle Knoten, die zu u adjazent sind. Äquivalent, Adju enthält alle Knoten v, so dass u, v E . Knoten in Adju sind in beliebiger Reihenfolge gespeichert. SS 2009 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 18 Darstellung von Graphen – Adjazenzlisten (2) Ist G gerichtet, so enthalten alle Listen in Adj zusammen genau E Einträge. Ist G ungerichete, so enthalten alle Listen in Adj zusammen genau 2 E Einträge, denn eine Kante (u,v) führt zu Eintrag v in Adju und zu Eintrag u in Adjv . SS 2009 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 19 Darstellung von ungerichteten Graphen – Adjazenzlisten 2 1 3 5 1 2 3 4 5 SS 2009 4 2 1 2 2 4 5 5 4 5 1 / 3 4 / / Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 3 2 / / 20 Darstellung von gerichteten Graphen – Adjazenzlisten 1 2 3 4 5 6 1 2 3 4 5 6 SS 2009 2 5 6 2 4 6 4 / 5 / / / / / Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 21 Darstellung von Graphen – Adjazenzmatrix Für die Adjazenzmatrix-Darstellung eines Graphen nehmen wir an, dass die Knoten in V mit den Zahlen von 1, , V nummeriert sind. Die Adjazenzmatrix von G ist dann eine V V Matrix A a ij mit 1, falls i, j E a ij . sonst 0, Ist G ein ungerichteter Graph, so ist die Matrix A symmetrisch, d.h. für alle (i,j) gilt a ij a ji . . Adjazenmatrix benötigt immer Speicher V SS 2009 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 2 22 Darstellung von ungerichteten Graphen Adjazenzmatrix 2 1 3 5 SS 2009 4 1 2 3 4 5 1 0 1 0 0 1 2 1 0 1 1 1 3 0 1 0 1 0 4 0 1 1 0 1 5 1 1 0 1 0 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 23 Darstellung von gerichteten Graphen - Adjazenzmatrix SS 2009 1 2 3 4 5 6 1 2 3 4 5 6 1 0 1 0 1 0 0 2 0 0 0 0 1 0 3 0 0 0 0 1 1 4 0 1 0 0 0 0 5 0 0 0 1 0 0 6 0 0 0 0 0 1 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 24 Vergleich der Darstellungen Die Adjazenzlisten-Darstellung ist besser, wenn E 2 viel kleiner ist als V , also bei dünn besetzten Graphen. Die Adjazenzmatrix-Darstellung ist besser, wenn E 2 etwa so groß ist wie V , also bei dicht besetzten Graphen. Mit Adjazenzmatrix kann bei je zwei Knoten u,v in konstanter Zeit überprüft werden, ob u, v E . Die meisten Graphenalgorithmen in dieser Vorlesung benutzen allerdings Adjazenzlisten. SS 2009 Datenstrukturen und Algorithmen 14. Elementare Graphalgorithmen 25