5. Übung – Algorithmen II Johannes Singler Institut für Theoretische Informatik, Prof. Sanders Singler: 1 KITJohannes – Universität des Landes Baden-Württemberg und nationales Forschungszentrum in der Helmholtz-Gemeinschaft 5. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik www.kit.edu Organisatorisches Übungsblätter Das dritte Übungsblatt steht seit Dienstag online. Die Musterlösung des dritten Übungsblatts erscheint am 2.12. Veranstaltungen Heute zuerst Vorlesung durch Übungsleiter. Am 2.12. keine Übung, sondern nur Vorlesung. 2 Johannes Singler: 5. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Inhalt heute 1 2 3 4 5 Wiederholung Kostenminimale Flüsse Beispiellauf des Algorithmus Demo Beispiel zu Matchings Wiederholung Randomisierte Algorithmen Beispiel zu Cuckoo Hashing Perfektes Hashing konkret 3 Johannes Singler: 5. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Wiederholung Kostenminimale Flüsse Problemdefinition: Folie 235 der Vorlesung „Bewege Gut unter Einschränkungen möglichst billig von Angebot (Quellen) zu Nachfrage (Senken).“ „Transportproblem“: keine Beschränkung der Kapazität Modellierung mit s und t wie bei Maximalen Flüssen wäre auch möglich, ist in der Literatur aber nicht üblich. Von s führen Kanten zu allen Quellen. Von allen Senken führen Kanten zu t Algorithmus mittels Zyklenaugmentierung: Folie 236 der Vorlesung basierend auf Optimalitätskriterium inkrementelle Kostenreduzierung, Fluss bleibt immer zulässig konzeptuell ähnlich zu Ford-Fulkerson „genauso“ langsame Laufzeit: pseudo-polynomiell (Folie 411 der Vorlesung) 4 Johannes Singler: 5. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Kostenminimale Flüsse: Residualgraph costf : Residualgraph der Kosten Kante in Gegenrichtung: negative Kosten der eigentlichen Kante. Fluss über diese Gegenkante zu schicken reduziert Fluss, spart also Kosten Fluss f über Zyklus mit negativen Kosten c im Kreis schieben: Mengen an Knoten ändern sich nicht, aber wir sparen f · c Kosten Fluss geht quantitativ nicht ein, wir sparen so oder so 3 · −6 2·6 (3/5) · 6 a b (1/2) · 4 5 Johannes Singler: 5. Übung – Algorithmen II a b 1·4 1 · −4 Fakultät für Informatik Institut für Theoretische Informatik Kostenminimale Flüsse: Negative Zyklen Wie findet man einen negativen Zyklus? Bellman-Ford-Algorithmus zum Finden kürzester Wege in jeder starken Zusammenhangskomponente (SCC) extra, von beliebigem Knoten in SCC Algorithmus terminiert mit inkonsistenten Kosten. Finde negativen Zyklus mit wiederholter Tiefensuche (ist ein Baum, wenn kein negativer Zyklus vorhanden ist). -1 a b −100 -1 6 Johannes Singler: 5. Übung – Algorithmen II c −101 -1 d −102 Fakultät für Informatik Institut für Theoretische Informatik Kostenminimaler Fluss Beispiel Eingabegraph G, noch kein (konsistenter) Fluss 0·4 10 d -5 0· 6 20 c 0 2 0· 20 0·2 25 0·1 20 0· a 25 0·5 25 7 30 b 0 e -20 Fluss Kosten Kapazität 7 Johannes Singler: 5. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Kostenminimaler Fluss Beispiel Hinzufügen von s und t b 0 25 a 0 20 5 20 20 t 0 0 0 0 20 s d 30 0 25 0 0 10 c 0 25 e Fluss Kosten Kapazität 7 Johannes Singler: 5. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Kostenminimaler Fluss Beispiel Finden eines Maximalen Flusses zwischen s und t b 20 t 20 10 5 20 20 0 5 15 20 s 25 25 a d 30 15 25 25 10 10 c 5 25 e alle Kanten ausgehend s voll ausgelastet ⇒ zulässiger Fluss Fluss Kosten Kapazität 7 Johannes Singler: 5. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Kostenminimaler Fluss Beispiel Initialer zulässiger Fluss, Kosten 335 a 0· 6 d 20 30 15·5 25 ·7 25 10·4 10 15·1 20 b 2 0· 1 20 c 5·2 25 e Fluss Kosten Kapazität 7 Johannes Singler: 5. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Kostenminimaler Fluss Beispiel Residualgraph, Zyklus mit Gesamtkosten -6 d -1 -2 2 1 5 a -4 7 -5 -7 b 6 c -2 2 e Fluss Kosten Kapazität 7 Johannes Singler: 5. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Kostenminimaler Fluss Beispiel Augmentieren mit 15 ⇒ Kosten 245 a 15 · 6 d 20 30 0·5 25 ·7 10 10·4 10 15·1 20 b 2 0· 1 20 c 5·2 25 e Fluss Kosten Kapazität 7 Johannes Singler: 5. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Kostenminimaler Fluss Beispiel Residualgraph, Zyklus mit Gesamtkosten -4 -4 d 2 1 5 a -1 7 -2 -7 b -6 6 c -2 2 e Fluss Kosten Kapazität 7 Johannes Singler: 5. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Kostenminimaler Fluss Beispiel Augmentieren mit 5 ⇒ Kosten 225 b 6 2 0· 20 1 10·1 20 a 20 · d 30 0·5 25 7 5· 5·4 10 20 c 10·2 25 e Fluss Kosten Kapazität 7 Johannes Singler: 5. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Kostenminimaler Fluss Beispiel Residualgraph, Zyklus mit Gesamtkosten -1 -4 4 d 2 1 5 a -1 7 -2 -7 b -6 c -2 2 e Fluss Kosten Kapazität 7 Johannes Singler: 5. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Kostenminimaler Fluss Beispiel Augmentieren mit 10 ⇒ Kosten 215 b 6 2 0· 20 0·1 20 a 20 · d 30 0·5 25 7 5· 5·4 10 20 c 20·2 25 e Fluss Kosten Kapazität 7 Johannes Singler: 5. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Kostenminimaler Fluss Beispiel Residualgraph, keine Zyklen mit negativen Gesamtkosten mehr -7 b -4 4 d 7 2 1 5 a -6 c -2 2 e Kostenminimaler Fluss gefunden! Fluss Kosten Kapazität 7 Johannes Singler: 5. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Kostenminimale Flüsse: Demo CATBox http://biomaps.rutgers.edu/~schliep/CATBox/ 8 Johannes Singler: 5. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Integralitätsgarantie Für Maximalen Fluss und Kostenminimalen Fluss gilt: Sind die Kapazitäten (und ggf. die Angebote/Nachfragen) ganzzahlig, so gibt es einen ganzzahligen Maximalen/Kostenminimalen Fluss, und die Flüsse auf den einzelnen Kanten sind ebenfalls ganzzahlig. Es kann natürlich zusätzlich auch nichtganzzahlige Flüsse geben. Die Algorithmen ergeben ganzzahlige Flüsse, auf Grund von Augmentierung/Push, die von ganzzahliger Residualkapazität beschränkt wird. Wird für viele Anwendungen benötigt (siehe auch Übungsblatt). 9 Johannes Singler: 5. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Wiederholung Matchings Folien 184, 240 der Vorlesung: Cardinality bzw. Weighted Anwendung Graphkontraktion in ungerichteten Graphen Reduziere Anzahl Knoten um konstanten Faktor mittels Kontraktion von Maximal (nicht Maximum) Matching ⇒ logarithmische Anzahl Phasen hierarchische Graphpartitionierung Boruvka-Algorithmus für Minimale Spannbäume Ausgangsgraph e h c a b i f 10 Johannes Singler: 5. Übung – Algorithmen II g d Fakultät für Informatik Institut für Theoretische Informatik Wiederholung Matchings Folien 184, 240 der Vorlesung: Cardinality bzw. Weighted Anwendung Graphkontraktion in ungerichteten Graphen Reduziere Anzahl Knoten um konstanten Faktor mittels Kontraktion von Maximal (nicht Maximum) Matching ⇒ logarithmische Anzahl Phasen hierarchische Graphpartitionierung Boruvka-Algorithmus für Minimale Spannbäume Matching (eventuell gewichtet) e h c a b i f 10 Johannes Singler: 5. Übung – Algorithmen II g d Fakultät für Informatik Institut für Theoretische Informatik Wiederholung Matchings Folien 184, 240 der Vorlesung: Cardinality bzw. Weighted Anwendung Graphkontraktion in ungerichteten Graphen Reduziere Anzahl Knoten um konstanten Faktor mittels Kontraktion von Maximal (nicht Maximum) Matching ⇒ logarithmische Anzahl Phasen hierarchische Graphpartitionierung Boruvka-Algorithmus für Minimale Spannbäume Kantenkontraktion h eg ab cf 10 Johannes Singler: 5. Übung – Algorithmen II di Fakultät für Informatik Institut für Theoretische Informatik Wiederholung Randomisierte Algorithmen 1 2 3 Las Vegas: richtig, aber manchmal langsam Monte Carlo: (immer gleich) schnell, aber manchmal falsch Monte-Carlo-Simulation: zufallsverteilte numerischer Abweichung von korrekter Lösung unserer Meinung nach etwas anderes als ein Monte-Carlo-Algorithmus 11 Johannes Singler: 5. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Wiederholung Cuckoo Hashing Folie 251 der Vorlesung O(1) Zugriff auch im schlechtesten Fall erwartete Laufzeit wird voll auf insert abgeschoben 12 Johannes Singler: 5. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Cuckoo Hashing Beispiel neu einfügen a 13 Johannes Singler: 5. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Cuckoo Hashing Beispiel a 13 Johannes Singler: 5. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Cuckoo Hashing Beispiel neu einfügen b a 13 Johannes Singler: 5. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Cuckoo Hashing Beispiel a 13 Johannes Singler: 5. Übung – Algorithmen II b Fakultät für Informatik Institut für Theoretische Informatik Cuckoo Hashing Beispiel neu einfügen c a 13 Johannes Singler: 5. Übung – Algorithmen II b Fakultät für Informatik Institut für Theoretische Informatik Cuckoo Hashing Beispiel c 13 Johannes Singler: 5. Übung – Algorithmen II a b Fakultät für Informatik Institut für Theoretische Informatik Cuckoo Hashing Beispiel neu einfügen d c 13 Johannes Singler: 5. Übung – Algorithmen II a b Fakultät für Informatik Institut für Theoretische Informatik Cuckoo Hashing Beispiel c 13 Johannes Singler: 5. Übung – Algorithmen II a b d Fakultät für Informatik Institut für Theoretische Informatik Cuckoo Hashing Beispiel neu einfügen e c 13 Johannes Singler: 5. Übung – Algorithmen II a b d Fakultät für Informatik Institut für Theoretische Informatik Cuckoo Hashing Beispiel c a b e d 13 Johannes Singler: 5. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Cuckoo Hashing Beispiel d a b e c 13 Johannes Singler: 5. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Cuckoo Hashing Beispiel d 13 Johannes Singler: 5. Übung – Algorithmen II a b e c Fakultät für Informatik Institut für Theoretische Informatik Cuckoo Hashing Beispiel d 13 Johannes Singler: 5. Übung – Algorithmen II a b e c Fakultät für Informatik Institut für Theoretische Informatik Cuckoo Hashing Beispiel neu einfügen f d 13 Johannes Singler: 5. Übung – Algorithmen II a b e c Fakultät für Informatik Institut für Theoretische Informatik Cuckoo Hashing Beispiel d a f e c b 13 Johannes Singler: 5. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Cuckoo Hashing Beispiel d b f e c a 13 Johannes Singler: 5. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Cuckoo Hashing Beispiel a 13 Johannes Singler: 5. Übung – Algorithmen II d b f e c Fakultät für Informatik Institut für Theoretische Informatik Cuckoo Hashing Beispiel a 13 Johannes Singler: 5. Übung – Algorithmen II d b f e c Fakultät für Informatik Institut für Theoretische Informatik Cuckoo Hashing Beispiel neu einfügen g a 13 Johannes Singler: 5. Übung – Algorithmen II d b f e c Fakultät für Informatik Institut für Theoretische Informatik Cuckoo Hashing Beispiel a d b f g c e 13 Johannes Singler: 5. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Cuckoo Hashing Beispiel a d e f g c b 13 Johannes Singler: 5. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Cuckoo Hashing Beispiel a d e b g c f 13 Johannes Singler: 5. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Cuckoo Hashing Beispiel a d e b g f c 13 Johannes Singler: 5. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Cuckoo Hashing Beispiel a c e b g f d 13 Johannes Singler: 5. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Cuckoo Hashing Beispiel a c e b d f g 13 Johannes Singler: 5. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Cuckoo Hashing Beispiel 5 Knoten, 6 Kanten ⇒ Konflikt a c e b d f g 13 Johannes Singler: 5. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Perfektes Hashing Wie groß ist eine Hashfunktion? bisher intuitiv: konstante bzw. logarithmische Größe, z. B. Linearkombination mit zwei Koeffizienten: h(x ) := (ax + b ) mod p für perfekte Hashfunktion: Ω(n) Platz Tabellen, Offsets, usw., keine einfache geschlossene mathematischer Formel mehr Anwendung: Schlüsselwörter von Sprachen für Compiler, usw. Software-Pakete zur (Offline-)Berechnung existieren: gperf, . . . 14 Johannes Singler: 5. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Perfektes Hashing konkret: Zweistufige Hashtabelle 1 2 3 4 Wähle h zufällig. Berechne h(x ) für alle x ∈ S. Falls ∑i |Bi |2 ≥ 4n, wiederhole 1. Konstruiere die Mengen Bi . Für alle Bi (a) Wähle hi zufällig. (b) Falls hi auf Bi nicht injektiv, wiederhole (a). Copyright Christoph Scheideler Man kann zeigen: erwartet lineare Laufzeit linearer Platz für alles zusammen (Tabelle und Funktion) (Hashfunktionen sind Linearkombinationen) geht noch deutlich platzeffizienter dynamisch noch komplizierter 15 Johannes Singler: 5. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik