Algorithmen für Routenplanung 2. Vorlesung, Sommersemester 2014 Andreas Gemsa 20. April 2014

Ähnliche Dokumente
Algorithmen für Routenplanung 4. Vorlesung, Sommersemester 2017 Moritz Baum 15. Mai 2017

Algorithmen für Routenplanung 4. Vorlesung, Sommersemester 2018 Tim Zeitz 30. April 2018

Algorithmen für Routenplanung

Algorithmen für Routenplanung Vorlesung 3

Algorithmen für Routenplanung 4. Sitzung, Sommersemester 2010 Thomas Pajor 3. Mai 2010

Algorithmen für Routenplanung 12. Sitzung, Sommersemester 2011 Reinhard Bauer, Thomas Pajor 6. Juni 2011

Algorithmen für Routenplanung 3. Sitzung, Sommersemester 2010 Thomas Pajor 30. April 2010

Algorithmen für Routenplanung Vorlesung 7

Algorithmen für Routenplanung 8. Sitzung, Sommersemester 2012 Thomas Pajor 21. Mai 2012

Algorithmen für Routenplanung 7. Sitzung, Sommersemester 2010 Thomas Pajor 28. Mai 2010

Algorithmen für Routenplanung 2. Sitzung, Sommersemester 2010 Thomas Pajor 26. April 2010

Algorithmen für Routenplanung 5. Sitzung, Sommersemester 2013 Julian Dibbelt 6. Mai 2013

Algorithmen für Routenplanung Vorlesung 4

Algorithmen für Routenplanung Vorlesung 11

Algorithmen für Routenplanung Vorlesung 2

Algorithmen für Routenplanung 13. Sitzung, Sommersemester 2013 Julian Dibbelt 19. Juni 2013

Viertes Übungsblatt - Musterlösung

Algorithmen für Routenplanung Vorlesung 10

Algorithmen für Routenplanung Vorlesung 6

Algorithmen für Routenplanung 7. Vorlesung, Sommersemester 2012 Daniel Delling 16. Mai 2012

Algorithmen für Routenplanung 15. Vorlesung, Sommersemester 2012 Daniel Delling 20. Juni 2012

Algorithmen für Routenplanung 14. Sitzung, Sommersemester 2011 Thomas Pajor 16. Juni 2011

Algorithmen für Routenplanung 5. Sitzung, Sommersemester 2010 Thomas Pajor 10. Mai 2010

Algorithmen für Routenplanung 8. Sitzung, Sommersemester 2013 Julian Dibbelt 22. Mai 2013

Algorithmen für Routenplanung 9. Sitzung, Sommersemester 2013 Julian Dibbelt 27. Mai 2013

Algorithmen für Routenplanung 9. Sitzung, Sommersemester 2010 Thomas Pajor 7. Juni 2010

Algorithmen für Routenplanung 2. Vorlesung, Sommersemester 2018 Tim Zeitz 23. April 2018

Algorithmen für Routenplanung 2. Sitzung, Sommersemester 2012 Thomas Pajor 23. April 2012

Algorithmen für Routenplanung 12. Sitzung, Sommersemester 2010 Thomas Pajor 28. Juni 2010

Effizienter Planaritätstest Vorlesung am

Algorithmen für Routenplanung

Algorithmen für Routenplanung Vorlesung 12

Algorithmen für Routenplanung 11. Sitzung, Sommersemester 2013 Julian Dibbelt 10. Juni 2013

Algorithmen für Routenplanung 2. Vorlesung, Sommersemester 2016 Tobias Zündorf 25. April 2016

Algorithmen für Routenplanung 12. Sitzung, Sommersemester 2014 Prof. Christos Zaroliagis 26. Mai 2014

Algorithmen für Routenplanung Vorlesung 5

Algorithmen für Routenplanung 13. Vorlesung, Sommersemester 2012 Daniel Delling 13. Juni 2012

Algorithmen für Routenplanung 6. Vorlesung, Sommersemester 2010 Daniel Delling 17. Mai 2010

Algorithmen II Vorlesung am

Vorlesung Datenstrukturen

Algorithmen für Routenplanung 18. Sitzung, Sommersemester 2015 Moritz Baum 13. Juli 2015

Algorithmen für Routenplanung

Algorithmische Methoden zur Netzwerkanalyse

Zweites Theorie-Übungsblatt - Musterlösung

Das Problem des minimalen Steiner-Baumes

Theorie-Übungsblatt 3 Lösungsvorschläge

10. Übung Algorithmen I

Algorithmen für Planare Graphen

Algorithmen I. Prof. Jörn Müller-Quade Institut für Theoretische Informatik Web:

Praktikum Routenplanung Vorbesprechung, Wintersemester 2016/2017 Moritz Baum, Valentin Buchhold, Ben Strasser, Tobias Zündorf 19.

Lernmodul 7 Algorithmus von Dijkstra

Algorithmen für Routenplanung 11. Vorlesung, Sommersemester 2016 Ben Strasser 30. Mai 2016

Algorithmen für Routenplanung 11. Sitzung, Sommersemester 2015 Julian Dibbelt 01. Juni 2015

Praktikum Routenplanung Vorbesprechung, Wintersemester 2013/2014 Moritz Baum, Julian Dibbelt, Ben Strasser 21. Oktober 2013

Maximale s t-flüsse in Planaren Graphen

Informatik II, SS 2014

Informatik II, SS 2014

Algorithmen für Routenplanung 13. Vorlesung, Sommersemester 2017 Tobias Zündorf 26. Juni 2017

Algorithmen für Routenplanung 19. und letzte Sitzung, Sommersemester 2012 Thomas Pajor 16. Juli 2012

Algorithmische Methoden für schwere Optimierungsprobleme

Informatik II, SS 2018

Erinnerung VL

Algorithmen für Routenplanung 10. Sitzung, Sommersemester 2012 Daniel Delling 4. Juni 2012

Vorlesung Datenstrukturen

Algorithmen II Vorlesung am

4.2 Minimale Spannbäume: Der Algorithmus von Jarník/Prim Definition 4.2.1

Untersuchung von Beschleunigungsverfahren für den Dijkstra-Algorithmus im Zusammenhang mit multimodalem Routing

Algorithmen II Vorlesung am

Route Planning in Road Networks

Algorithmen für Routenplanung 1. Sitzung, Sommersemester 2010 Thomas Pajor 12. April 2010

Datenstrukturen und Algorithmen (SS 2013)

Algorithmen für Routenplanung 12. Sitzung, Sommersemester 2013 Julian Dibbelt 17. Juni 2013

Algorithmen für Routenplanung 1. Vorlesung, Sommersemester 2015 Andreas Gemsa 13. April 2015

Algorithmen für Routenplanung 10. Sitzung, Sommersemester 2014 Ben Strasser 21. Mai 2014

Das Steinerbaumproblem

Grundlagen: Algorithmen und Datenstrukturen

Algorithmen für Routenplanung 13. Sitzung, Sommersemester 2011 Reinhard Bauer, Thomas Pajor 9. Juni 2011

Schnelle und genaue Routenplanung

Algorithmen und Datenstrukturen 2

Algorithmen und Datenstrukturen 2

Fortgeschrittene Netzwerk- und Graph-Algorithmen

Algorithmen für Routenplanung 1. Sitzung, Sommersemester 2012 Thomas Pajor 18. April 2012

Schnelle und genaue Routenplanung

Algorithmen für Routenplanung 1. Vorlesung, Sommersemester 2018 Tim Zeitz 17. April 2018

Algorithmentechnik - U bung 3 4. Sitzung Tanja Hartmann 03. Dezember 2009

Algorithmen I - Tutorium 28 Nr. 11

Kürzeste und Schnellste Wege

Algorithmische Methoden zur Netzwerkanalyse Vorlesung 11, Henning Meyerhenke

Datenstrukturen und Algorithmen

Algorithmen und Datenstrukturen

Informatik II, SS 2016

Algorithmen für Routenplanung 7. Vorlesung, Sommersemester 2015 Ben Strasser 18. Mai 2014

Routing A lgorithmen Algorithmen Begriffe, Definitionen Wegewahl Verkehrslenkung

Algorithmen für Routenplanung 15. Vorlesung, Sommersemester 2017 Tobias Zündorf 5. Juli 2017

Fortgeschrittene Netzwerk- und Graph-Algorithmen

Transkript:

Algorithmen für Routenplanung 2. Vorlesung, Sommersemester 2014 Andreas Gemsa 20. April 2014 INSTITUT FÜR THEORETISCHE INFORMATIK ALGORITHMIK PROF. DR. DOROTHEA WAGNER KIT Universität des Landes Baden-Württemberg und nationales Großforschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu

Kürzeste Wege in Straßennetzwerken Beschleunigungstechniken Arc-Flags SHARC Folie 2 20. April 2014

Beschleunigungstechniken Beobachtung: Viele Anfragen in (statischem) Netzwerk Unnötige Berechnungen Folie 3 20. April 2014

Beschleunigungstechniken Beobachtung: Viele Anfragen in (statischem) Netzwerk Unnötige Berechnungen Idee: Zwei Phasen Offline: Generiere Zusatzinformation in Vorberechnung Online: Beschleunige Anfrage mit dieser Information Drei Kriterien: Vorberechnungsplatz, Vorberechnungszeit, Beschleunigung Folie 3 20. April 2014

Ideensammlung Wie Suche zielgerichtet machen? Folie 4 20. April 2014

Ideensammlung Wie Suche zielgerichtet machen? Nichtbeachten von Kanten oder Knoten die in die falsche Richtung führen Reihenfolge in der Knoten besucht werden ändern Jetzt: ersteres Folie 4 20. April 2014

Arc-Flags Folie 5 20. April 2014

Arc-Flags: Idee partitioniere Graphen in k Zellen hänge Label mit k Bits an jede Kante gibt an, ob Kante e für Ziele in Zelle T benötigt wird Folie 6 20. April 2014

Arc-Flags: Idee partitioniere Graphen in k Zellen hänge Label mit k Bits an jede Kante gibt an, ob Kante e für Ziele in Zelle T benötigt wird Folie 6 20. April 2014

Arc-Flags: Idee partitioniere Graphen in k Zellen hänge Label mit k Bits an jede Kante gibt an, ob Kante e für Ziele in Zelle T benötigt wird 1 1 1 1 1 0 0 0 0 1 0 0 0 1 0 0 1 1 1 1 0 1 1 1 1 1 1 1 1 0 0 0 1 1 0 0 1 1 0 1 0 1 1 1 0 1 0 1 1 1 1 1 0 0 1 1 1 1 1 0 0 0 1 1 0 0 0 1 1 1 1 1 0 0 0 1 Folie 6 20. April 2014

Anfragen ARC-FLAG-DIJKSTRA(G = (V, E), s, t, Arc-Flags AF ( )) 1 d[s] = 0 2 Q.clear(), Q.add(s, 0) 3 while!q.empty() do 4 u Q.deleteMin() 5 forall the edges e = (u, v) E do 6 if d[u] + len(e) < d[v] and AF T (e) = true then 7 d[v] d[u] + len(e) 8 if v Q then Q.decreaseKey(v, d[v]) 9 else Q.insert(v, d[v]) Folie 7 20. April 2014

Arc-Flags Vorberechnung Folie 8 20. April 2014

Vorberechnung Zwei Schritte: Partitionierung setze korrekte Flaggen Folie 9 20. April 2014

Vorberechnung Zwei Schritte: Partitionierung setze korrekte Flaggen Folie 9 20. April 2014

Flaggenberechnung Naiv von jedem Knoten: konstruiere Rückwärts KW-Baum setze Flagge der Region der Wurzel für jede Baumkante Berechnung mit all-pairs shortest paths (APSP) Folie 10 20. April 2014

Flaggenberechnung Naiv von jedem Knoten: konstruiere Rückwärts KW-Baum setze Flagge der Region der Wurzel für jede Baumkante Berechnung mit all-pairs shortest paths (APSP) Folie 10 20. April 2014

Flaggenberechnung Naiv von jedem Knoten: konstruiere Rückwärts KW-Baum setze Flagge der Region der Wurzel für jede Baumkante Berechnung mit all-pairs shortest paths (APSP) Folie 10 20. April 2014

1 1 Flaggenberechnung Naiv von jedem Knoten: konstruiere Rückwärts KW-Baum setze Flagge der Region der Wurzel für jede Baumkante Berechnung mit all-pairs shortest paths (APSP) 1 1 1 1 1 1 1 1 Folie 10 20. April 2014

Flaggenberechnung Randknoten Beobachtung: Man muss durch Randknoten in die Zelle Folie 11 20. April 2014

Flaggenberechnung Randknoten Beobachtung: Man muss durch Randknoten in die Zelle setze Intra-Zellen Kanten auf true einen Rückwärts Dijkstra-Baum pro Randknoten b setze Flagge AF region(b) (e) = true wenn e Baumkante des Baums von b ist Folie 11 20. April 2014

Flaggenberechnung: Angehängte Bäume Beobachtung: Für manche Kanten kann man die Flaggen automatisch setzen Angehangene Bäume: 0001 1111 Kanten zur Wurzel hin haben alle Flaggen gesetzt Kanten von Wurzel weg haben nur eine Flagge gesetzt 0001 1111 Also: Entferne Bäume vor Arcs-Flag-Berechnung aus Graph Knotenzahl verringert sich um 1 Drittel 1111 0001 Anmerkung: Alle Knoten eines angehangenen Baumes müssen zur gleichen Zelle wie dessen Wurzel gehören. Folie 12 20. April 2014

Übersicht Vorberechungsarten In aufsteigender Güte: Kürzeste-Wege-Baum von jedem Knoten Kürzeste-Wege-Baum von jedem Randknoten Sogenannte Zentralisierte Bäume (nicht Stoff der Vorlesung, ca. Faktor 4 schneller) Beschleunigte KW-Baum-Berechnung (PHAST, kommt in späterer VL) Folie 13 20. April 2014

Vorberechnung Zwei Schritte: Partitionierung setze korrekte Flaggen Folie 14 20. April 2014

Vorberechnung Zwei Schritte: Partitionierung setze korrekte Flaggen Folie 14 20. April 2014

Partitionierung Wie sollte der Graph partitioniert werden? Arc-Flags Algorithmus ist korrekt für beliebige Partition. wie sieht eine gute Partition aus? Ziel: Möglichst schnelle Anfragen. formal? Definiere ein Maß, um die Güte einer Partition zu bewerten. Annahmen: Kanten sind kürzeste Wege zwischen ihren Endknoten. kürzeste Wege sind eindeutig. Damit bestimmt die Partition eindeutig, welche Flags gesetzt werden. Folie 15 20. April 2014

Optimierungsproblem Definition (Suchraumgröße) Sei G = (V, E) ein Graph (mit einer Gewichtsfunktion ω : E R 0 ), C eine Partition von G, und s, t V zwei Knoten. Dann sei S(s, t) := Anzahl abgearbeiteter Knoten einer s-t-anfrage, mit Arc-Flags induziert durch die Partition C. S max := max s,t V S(s, t). MINWORSTCASEPARTITION Gegeben: Graph G = (V, E, ω), natürliche Zahl k. Gesucht: Partition C, C k, so dass S max minimiert wird. Anmerkung: Ohne festen Parameter k ist die optimale Lösung immer eine Partition C = {{v} v V } dies führt aber zu Speicherverbrauch O(nm). Folie 16 20. April 2014

Eigenschaften von S max Für Graph G = (V, E), Gewichtsfunktion ω, Partition C von G: Lemma Für jedes s V, T C gibt einen Knoten t V, so dass eine s-t-anfrage alle (erreichbaren) Knoten aus T abarbeitet (auch bei aktiviertem Stoppkriterium). Beweis: Voraussetzung: Eindeutiges tie breaking für priority queue für festes s werden alle Knoten aus T in einer festen Reihenfolge abgearbeitet setze t := letzter Knoten in dieser Reihenfolge Folie 17 20. April 2014

S max für Sterne Erster Schritt: Sterne, Kanten von der Wurzel weggerichtet. Wie groß ist S max := max s,t V (für beliebige Partition)? Fallunterscheidung: 1 Knoten s ist Blatt: S(s, t) = 1 für beliebige t. 2 Knoten s ist die Wurzel: für jede Zelle T gibt es eine s-t-query, so dass alle Knoten aus T abgearbeitet werden. S max = 1 + max T C T \ {r} (für Stern mit Wurzel r). Minimal wenn Blätter gleichmäßig auf Zellen der Partition verteilt. Folie 18 20. April 2014

S max für Sterne Erster Schritt: Sterne, Kanten von der Wurzel weggerichtet. Wie groß ist S max := max s,t V (für beliebige Partition)? Fallunterscheidung: 1 Knoten s ist Blatt: S(s, t) = 1 für beliebige t. 2 Knoten s ist die Wurzel: für jede Zelle T gibt es eine s-t-query, so dass alle Knoten aus T abgearbeitet werden. S max = 1 + max T C T \ {r} (für Stern mit Wurzel r). Minimal wenn Blätter gleichmäßig auf Zellen der Partition verteilt. Folie 18 20. April 2014

S max für Sterne Erster Schritt: Sterne, Kanten von der Wurzel weggerichtet. Wie groß ist S max := max s,t V (für beliebige Partition)? Fallunterscheidung: 1 Knoten s ist Blatt: S(s, t) = 1 für beliebige t. 2 Knoten s ist die Wurzel: für jede Zelle T gibt es eine s-t-query, so dass alle Knoten aus T abgearbeitet werden. S max = 1 + max T C T \ {r} (für Stern mit Wurzel r). Minimal wenn Blätter gleichmäßig auf Zellen der Partition verteilt. Folie 18 20. April 2014

Bäume mit Höhe 2 Theorem MINWORSTCASEPARTITION ist N P-schwer für gerichtete Bäume mit Höhe 2, sogar wenn alle Kanten Einheitsgewicht haben. Folie 19 20. April 2014

Beweis Reduktion vom N P-schweren Entscheidungsproblem 3-PARTITION. 3-PARTITION Gegeben: Menge S = {s 1,..., s 3m }, Natürliche Zahl B, Gewichtsfunktion ω : S {0,..., B}, so dass 3m i=1 ω(s i) = mb. Gesucht: Kann S in m Mengen S i partitioniert werden, so dass S i = 3 für alle i und s S i ω(s) = B? Sogar N P-schwer, wenn B 4 < ω(s i) < B 2 für alle s i. Beispielinstanz: m = 2, S = 6, B = 11 und Gewichte 3, 3, 3, 4, 4, 5. Folie 20 20. April 2014

Beweis Reduktion vom N P-schweren Entscheidungsproblem 3-PARTITION. 3-PARTITION Gegeben: Menge S = {s 1,..., s 3m }, Natürliche Zahl B, Gewichtsfunktion ω : S {0,..., B}, so dass 3m i=1 ω(s i) = mb. Gesucht: Kann S in m Mengen S i partitioniert werden, so dass S i = 3 für alle i und s S i ω(s) = B? Sogar N P-schwer, wenn B 4 < ω(s i) < B 2 für alle s i. Beispielinstanz: m = 2, S = 6, B = 11 und Gewichte 3, 3, 3, 4, 4, 5. Folie 20 20. April 2014

Beweis Reduktion: Erzeuge Baum mit Wurzel r, einem Mittelknoten pro Element s i aus S, an jedem Mittelknoten jeweils ω(s i ) 1 Blätter. Beispielinstanz: m = 2, S = 6, B = 11 und Gewichte 3, 3, 3, 4, 4, 5. Ast Behauptung: (S, B) ist erfüllbare 3-PARTITION-Instanz genau dann, wenn S max B + 1 für Partitionen mit m Zellen. Folie 21 20. April 2014

Beweis ) (S, B) erfüllbar. Zu zeigen: S max B + 1. Weise jeder Zelle drei Äste zu, die einem Tripel der Lösung entsprechen. Im Beispiel: {3, 3, 5}, {3, 4, 4}. r Queries mit Startknoten s r : S(s, t) < B 2. Queries mit Startknoten r : Nur r selbst und Knoten innerhalb der Zielzelle werden abgearbeitet. S max B + 1. Folie 22 20. April 2014

Beweis ) Es gilt S max B + 1. Zu zeigen: (S, B) erfüllbar. Wir erhalten eine Lösung für 3-PARTITION, falls... jede Zelle genau B Astknoten enthält. jeder Ast genau einer Zelle zugeordnet ist. r Pro Zelle T gibt es eine Query von r, die T komplett abarbeitet. Wegen S max B + 1 enthält keine Zelle mehr als B Astknoten. Folie 23 20. April 2014

Beweis ) Es gilt S max B + 1. Zu zeigen: (S, B) erfüllbar. Wir erhalten eine Lösung für 3-PARTITION, falls... jede Zelle genau B Astknoten enthält. jeder Ast genau einer Zelle zugeordnet ist. r Annahme: ein Ast enthält Knoten aus verschiedenen Zellen. Blatt, dessen Zelle T nicht der Zelle des Mittelknoten entspricht. Worst-Case Query nach T arbeitet diesen Mittelknoten ab. S max > B + 1. Folie 23 20. April 2014

Übersicht: Worst-Case Sterne Gerichtet: O(n) Sterne Ungerichtet: O(n) Bäume (h 2) N P-schwer Bäume (h 2) N P-schwer Pfade O(n) Pfade O(n) Bäume ( 3) N P-schwer Bäume ( 3) N P-schwer Kreise O(n) Kreise (P) Ähnliche Resultate für andere Graphklassen (beschränkter Grad, ungerichtet). Beweisideen in den meisten Fällen ähnlich. Problem MINWORSTCASEPARTITION ist selbst für stark eingeschränkte Graphklassen N P-schwer. Folie 24 20. April 2014

Übersicht: Average-Case Alternativ: Minimiere erwarteten Suchraum S avg := s,t V S(s, t)/n2. Sterne Bäume (h 2) Pfade Gerichtet: O(n) N P-schwer O(n) Bäume ( 3)? Kreise O(n) Ungerichtet: Sterne O(n) Bäume (h 2) N P-schwer Pfade O(n) Bäume ( 3)? Kreise (P) Beweise analog zum Worst Case. Auch hier Schwereresultate für stark eingeschränkte Graphen. Verwende Heuristiken. Anmerkung: Für die meisten Beschleunigungstechniken, die in der Vorlesung behandelt werden, gibt es vergleichbare Schwereresultate. Folie 25 20. April 2014

Heuristiken Anforderungen: balanciert mögliche Partitionen: Gitter Quad-Baum iterativ in 4 Zellen unterteilen kd-baum Verallgemeinerung von Quad-Baum weitere Anforderungen? Folie 26 20. April 2014

Heuristiken Anforderungen: ausbalanciert wenige Randknoten zusammenhängend Black-Box Partitionierer (METIS,...): benutzen keine Einbettung oft: teilen rekursiv Graphen in k Teile mit kleinem Schnitt bringen gute Lösungen für Arc-Flags Folie 27 20. April 2014

Arc-Flags Eigenschaften Folie 28 20. April 2014

Suchraum Dijkstra Folie 29 20. April 2014

Suchraum Arc-Flags Folie 29 20. April 2014

Korrektheit Korrektheit ArcFlagsDijsktra ist korrekt zu zeigen: für jeden kürzesten s-t-weg P = (s = u 1,..., u k = t) haben alle Kanten (u i, u i+1 ) die Flagge AF T (u i, u i+1 ) gesetzt. für alle (u i, u i+1 ) in T trivial sei u j der letzte Knoten auf P in T u j also Randknoten und somit Rückwärtsbaum gebaut von u j P = (u 1,..., u j ) ist Subpfad von P und somit ein kürzester Weg von u 1 nach u j somit Baumkanten mit gesetzten Flaggen Folie 30 20. April 2014

Diskussion Vorteile: einfacher Anfrage Algorithmus leicht on-top auf bestehende Systeme zu setzen ausreichende Beschleunigung Nachteile: hohe Vorberechnungsdauer weitere? Folie 31 20. April 2014

Coning-Effekt Beobachtung: lange Zeit nur eine Kante wichtig daher nur ein Knoten in der Queue aber: je näher an der Zelle, desto mehr Kanten werden wichtig Suche fächert sich auf in Zelle werden dann alle Kanten relaxiert Zwei Ansätze: bidirektionale Flags multi-level Flags Folie 32 20. April 2014

Bidirektionale Arc-Flags Vorberechung: Vorwärts- und Rückwärtsflaggen Rückwärtsflaggen analog für eingehende Kanten berechnet Vorberechungszeit in gerichteten Graphen: Faktor 2 Anfrage: bidirektional: Vorwärtssuche relaxiert nur Kanten mit Flagge für T Rückwärtssuche nur Kanten mit Flaggen für S normales Stopp-Kriterium von bidirektionalem Dijkstra Folie 33 20. April 2014

Suchraum Arc-Flags Folie 34 20. April 2014

Suchraum Bidirektionale Arc-Flags Folie 34 20. April 2014

Datenstruktur Effizient Flaggen speichern? pro Kante eine Flagge Beobachtung: Anzahl Kombinationen begrenzt 1 0 0 0 1 1 1 1 1 0 0 0 1 1 1 1 0 1 0 0 0 1 1 1 1 1 0 0 1 1 1 1 0 1 0 0 1 1 0 1 0 1 1 1 0 1 0 1 1 1 1 1 0 0 1 1 1 1 1 0 0 0 1 1 0 0 0 1 1 1 1 1 0 0 0 1 Folie 35 20. April 2014

Datenstruktur Effizient Flaggen speichern? pro Kante eine Flagge Beobachtung: Anzahl Kombinationen begrenzt 1 0 0 0 1 1 1 1 1 0 0 0 1 1 1 1 0 1 0 0 0 1 1 1 1 1 0 0 1 1 1 1 0 1 0 0 1 1 0 1 0 1 1 1 0 1 0 1 1 1 1 1 Idee: speichere Flaggen in Matrix Zeiger von Kanten auf die Matrix 0 0 1 1 1 1 1 0 0 0 1 1 0 0 0 1 verringert Speicherverbrauch um einen Faktor 5 1 1 1 1 0 0 0 1 Folie 35 20. April 2014

Datenstruktur Effizient Flaggen speichern? pro Kante eine Flagge Beobachtung: Anzahl Kombinationen begrenzt 1 0 0 0 1 0 0 0 0 1 0 0 0 1 1 1 1 1 0 0 0 1 0 0 1 1 0 1 0 1 1 1 0 1 0 1 Idee: speichere Flaggen in Matrix Zeiger von Kanten auf die Matrix 0 0 1 1 1 1 1 0 0 0 1 1 0 0 0 1 verringert Speicherverbrauch um einen Faktor 5 0 0 0 1 1 1 1 1 Folie 35 20. April 2014

Datenstruktur Effizient Flaggen speichern? pro Kante eine Flagge 1 0 0 0 1 0 0 0 0 1 0 0 0 1 1 1 0 1 0 0 Beobachtung: Anzahl Kombinationen begrenzt 1 1 0 0 1 1 0 1 0 1 1 1 0 1 0 1 Idee: speichere Flaggen in Matrix Zeiger von Kanten auf die Matrix 0 0 1 1 0 0 1 1 0 0 0 1 verringert Speicherverbrauch um einen Faktor 5 0 0 0 1 1 1 1 0 1 1 1 1 Folie 35 20. April 2014

Datenstruktur Effizient Flaggen speichern? pro Kante eine Flagge 1 0 0 0 1 0 0 0 0 1 0 0 0 1 1 1 0 1 0 0 Beobachtung: Anzahl Kombinationen begrenzt 1 1 0 0 0 1 1 1 0 1 0 1 Idee: speichere Flaggen in Matrix Zeiger von Kanten auf die Matrix 0 0 1 1 0 0 1 1 0 0 0 1 verringert Speicherverbrauch um einen Faktor 5 0 0 0 1 1 1 0 1 1 1 1 0 1 1 1 1 Folie 35 20. April 2014

Datenstruktur Effizient Flaggen speichern? pro Kante eine Flagge 1 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 Beobachtung: Anzahl Kombinationen begrenzt 1 1 0 0 0 1 0 1 Idee: speichere Flaggen in Matrix Zeiger von Kanten auf die Matrix 0 0 1 1 0 0 1 1 0 0 0 1 verringert Speicherverbrauch um einen Faktor 5 0 0 0 1 0 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 Folie 35 20. April 2014

Datenstruktur Effizient Flaggen speichern? pro Kante eine Flagge 1 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 Beobachtung: Anzahl Kombinationen begrenzt 0 1 0 1 Idee: speichere Flaggen in Matrix Zeiger von Kanten auf die Matrix 0 0 1 1 0 0 1 1 0 0 0 1 verringert Speicherverbrauch um einen Faktor 5 0 0 0 1 1 1 0 0 0 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 Folie 35 20. April 2014

Datenstruktur Effizient Flaggen speichern? pro Kante eine Flagge 1 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 Beobachtung: Anzahl Kombinationen begrenzt Idee: speichere Flaggen in Matrix Zeiger von Kanten auf die Matrix 0 0 1 1 0 0 1 1 0 0 0 1 verringert Speicherverbrauch um einen Faktor 5 0 0 0 1 0 1 0 1 1 1 0 0 0 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 Folie 35 20. April 2014

Datenstruktur Effizient Flaggen speichern? pro Kante eine Flagge 1 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 Beobachtung: Anzahl Kombinationen begrenzt Idee: speichere Flaggen in Matrix Zeiger von Kanten auf die Matrix 0 0 0 1 verringert Speicherverbrauch um einen Faktor 5 0 0 0 1 0 0 1 1 0 1 0 1 1 1 0 0 0 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 Folie 35 20. April 2014

Datenstruktur Effizient Flaggen speichern? pro Kante eine Flagge Beobachtung: Anzahl Kombinationen begrenzt 0 1 0 0 0 1 0 0 Idee: speichere Flaggen in Matrix Zeiger von Kanten auf die Matrix 0 0 0 1 verringert Speicherverbrauch um einen Faktor 5 0 0 0 1 1 0 0 0 0 0 1 1 0 1 0 1 1 1 0 0 0 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 Folie 35 20. April 2014

Datenstruktur Effizient Flaggen speichern? pro Kante eine Flagge Beobachtung: Anzahl Kombinationen begrenzt Idee: speichere Flaggen in Matrix Zeiger von Kanten auf die Matrix 0 0 0 1 verringert Speicherverbrauch um einen Faktor 5 0 0 0 1 0 1 0 0 1 0 0 0 0 0 1 1 0 1 0 1 1 1 0 0 0 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 Folie 35 20. April 2014

Datenstruktur Effizient Flaggen speichern? Idee: pro Kante eine Flagge Beobachtung: Anzahl Kombinationen begrenzt speichere Flaggen in Matrix Zeiger von Kanten auf die Matrix verringert Speicherverbrauch um einen Faktor 5 0 0 0 1 0 1 0 0 1 0 0 0 0 0 1 1 0 1 0 1 1 1 0 0 0 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 Folie 35 20. April 2014

Datenstruktur Effizient Flaggen speichern? Idee: pro Kante eine Flagge Beobachtung: Anzahl Kombinationen begrenzt speichere Flaggen in Matrix Zeiger von Kanten auf die Matrix verringert Speicherverbrauch um einen Faktor 5 0 0 0 1 0 1 0 0 1 0 0 0 0 0 1 1 0 1 0 1 1 1 0 0 0 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 Folie 35 20. April 2014

Flaggenkompression Beobachtung: Idee: kippen eines Bits von 1 auf 0 verboten kippen eines Bits von 0 auf 1 erlaubt (Anfrage weiterhin korrekt, eventuell langsamer) verringere Anzahl eindeutiger Arc-Flags durch kippen dadurch Kompression der Matrix finde gutes Mapping 0 0 0 1 0 1 0 0 1 0 0 0 0 0 1 1 0 1 0 1 1 1 0 0 0 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 Folie 36 20. April 2014

Flaggenkompression Beobachtung: Idee: kippen eines Bits von 1 auf 0 verboten kippen eines Bits von 0 auf 1 erlaubt (Anfrage weiterhin korrekt, eventuell langsamer) verringere Anzahl eindeutiger Arc-Flags durch kippen dadurch Kompression der Matrix finde gutes Mapping 0 0 0 1 0 1 0 0 1 0 0 0 0 0 1 1 0 1 0 1 1 1 0 0 0 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 Folie 36 20. April 2014

Flaggenkompression Beobachtung: Idee: kippen eines Bits von 1 auf 0 verboten kippen eines Bits von 0 auf 1 erlaubt (Anfrage weiterhin korrekt, eventuell langsamer) verringere Anzahl eindeutiger Arc-Flags durch kippen dadurch Kompression der Matrix finde gutes Mapping 0 0 0 1 0 1 0 0 1 0 0 0 0 0 1 1 1 1 0 0 0 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 Folie 36 20. April 2014

Flaggenkompression Beobachtung: Idee: kippen eines Bits von 1 auf 0 verboten kippen eines Bits von 0 auf 1 erlaubt (Anfrage weiterhin korrekt, eventuell langsamer) verringere Anzahl eindeutiger Arc-Flags durch kippen dadurch Kompression der Matrix finde gutes Mapping 0 0 0 1 0 1 0 0 1 0 0 0 0 0 1 1 1 1 0 0 0 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 Folie 36 20. April 2014

Flaggenkompression Beobachtung: kippen eines Bits von 1 auf 0 verboten kippen eines Bits von 0 auf 1 erlaubt (Anfrage weiterhin korrekt, eventuell langsamer) 0 0 0 1 0 1 0 0 1 0 0 0 0 0 1 1 1 1 0 0 0 1 1 1 1 1 0 1 Idee: verringere Anzahl eindeutiger Arc-Flags durch kippen dadurch Kompression der Matrix finde gutes Mapping 1 1 1 1 Folie 36 20. April 2014

Flaggenkompression Beobachtung: kippen eines Bits von 1 auf 0 verboten kippen eines Bits von 0 auf 1 erlaubt (Anfrage weiterhin korrekt, eventuell langsamer) 0 0 0 1 0 1 0 0 1 0 0 0 0 0 1 1 1 1 0 0 0 1 1 1 1 1 0 1 Idee: verringere Anzahl eindeutiger Arc-Flags durch kippen dadurch Kompression der Matrix finde gutes Mapping 1 1 1 1 Folie 36 20. April 2014

Flaggenkompression Beobachtung: kippen eines Bits von 1 auf 0 verboten kippen eines Bits von 0 auf 1 erlaubt (Anfrage weiterhin korrekt, eventuell langsamer) 0 0 0 1 0 1 0 0 1 0 0 0 0 0 1 1 1 1 0 0 0 1 1 1 Idee: verringere Anzahl eindeutiger Arc-Flags durch kippen dadurch Kompression der Matrix finde gutes Mapping 1 1 1 1 Folie 36 20. April 2014

Flaggenkompression Beobachtung: kippen eines Bits von 1 auf 0 verboten kippen eines Bits von 0 auf 1 erlaubt (Anfrage weiterhin korrekt, eventuell langsamer) 0 0 0 1 0 1 0 0 1 0 0 0 0 0 1 1 1 1 0 0 0 1 1 1 Idee: verringere Anzahl eindeutiger Arc-Flags durch kippen dadurch Kompression der Matrix finde gutes Mapping 1 1 1 1 Folie 36 20. April 2014

Flaggenkompression Beobachtung: kippen eines Bits von 1 auf 0 verboten kippen eines Bits von 0 auf 1 erlaubt (Anfrage weiterhin korrekt, eventuell langsamer) 0 1 0 0 1 0 0 0 0 0 1 1 1 1 0 0 0 1 1 1 Idee: verringere Anzahl eindeutiger Arc-Flags durch kippen dadurch Kompression der Matrix finde gutes Mapping 1 1 1 1 Folie 36 20. April 2014

Flaggenkompression Beobachtung: kippen eines Bits von 1 auf 0 verboten kippen eines Bits von 0 auf 1 erlaubt (Anfrage weiterhin korrekt, eventuell langsamer) 0 1 0 0 1 0 0 0 0 0 1 1 1 1 0 0 0 1 1 1 Idee: verringere Anzahl eindeutiger Arc-Flags durch kippen dadurch Kompression der Matrix finde gutes Mapping 1 1 1 1 Folie 36 20. April 2014

Flaggenkompression Beobachtung: kippen eines Bits von 1 auf 0 verboten kippen eines Bits von 0 auf 1 erlaubt (Anfrage weiterhin korrekt, eventuell langsamer) 1 0 0 0 0 0 1 1 1 1 0 0 0 1 1 1 Idee: verringere Anzahl eindeutiger Arc-Flags durch kippen dadurch Kompression der Matrix finde gutes Mapping 1 1 1 1 Folie 36 20. April 2014

Flaggenkompression Beobachtung: kippen eines Bits von 1 auf 0 verboten kippen eines Bits von 0 auf 1 erlaubt (Anfrage weiterhin korrekt, eventuell langsamer) 1 0 0 0 0 0 1 1 1 1 0 0 0 1 1 1 Idee: verringere Anzahl eindeutiger Arc-Flags durch kippen dadurch Kompression der Matrix finde gutes Mapping 1 1 1 1 Folie 36 20. April 2014

Flaggenkompression Beobachtung: kippen eines Bits von 1 auf 0 verboten kippen eines Bits von 0 auf 1 erlaubt (Anfrage weiterhin korrekt, eventuell langsamer) 0 0 1 1 1 1 0 0 0 1 1 1 Idee: verringere Anzahl eindeutiger Arc-Flags durch kippen dadurch Kompression der Matrix finde gutes Mapping 1 1 1 1 Folie 36 20. April 2014

Flaggenkompression Beobachtung: kippen eines Bits von 1 auf 0 verboten kippen eines Bits von 0 auf 1 erlaubt (Anfrage weiterhin korrekt, eventuell langsamer) 0 0 1 1 1 1 0 0 0 1 1 1 Idee: verringere Anzahl eindeutiger Arc-Flags durch kippen dadurch Kompression der Matrix finde gutes Mapping 1 1 1 1 Folie 36 20. April 2014

Flaggenkompression (Multi-Level, unidirektional) Europagraph, Kostenfkt., Häufigkeitsfakt. 0,5 Laufzeit 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 1_2_4_8_16_32 1_2_4_8_32_64 1_2_4_8_64_128 0.518118 3.90 0e+00 2e+05 4e+05 6e+05 8e+05 #Entfernte Flags Folie 37 20. April 2014

Beobachtungen kaum Verlust bis zu 60% entfernte Flaggen geringer Verlust bis zu 80% entfernte Flaggen kippen von niedrig-leveligen Flaggen billiger Folie 38 20. April 2014

Zufallsanfragen: Anzahl Regionen Prepro Query time space # settled time spd regions [min] [B/n] nodes [ms] up 0 0 0 9 114 385 5 591.6 1.0 200 1 028 19 2 369 1.6 3 494.8 400 1 366 20 1 868 1.2 4 659.7 600 1 723 21 1 700 1.1 5 083.3 800 1 892 23 1 642 1.4 3 994.0 1000 2 156 25 1 593 1.1 5 083.3 Beobachtungen: lange Vorberechnung hohe Beschleunigung geringer Speicherverbrauch mehr als 200 Regionen lohnt sich nicht Folie 39 20. April 2014

Dijkstra Rank ArcFlags Uni- vs Bidir. Dijkstra Rank Query Time [ms] 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 2 10 2 11 2 12 2 13 2 14 2 15 2 16 2 17 2 18 2 19 2 20 2 21 2 22 2 23 2 24 0.01 0.1 1 3 10 100 1000 10000 Dijkstra Arc Flags (128 regions) bidirectional Arc Flags (128 regions) gegenüber Dijkstra nur Beschleunigung für weite Anfragen birektionale Arc-Flags deutlich schneller als unidirektionale Folie 40 20. April 2014

Dijkstra Rank ArcFlags # Regionen Dijkstra Rank Query Time [ms] 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 2 10 2 11 2 12 2 13 2 14 2 15 2 16 2 17 2 18 2 19 2 20 2 21 2 22 2 23 2 24 0.01 0.1 1 3 10 100 1000 10000 bidirectional Dijkstra bidirectional Arc Flags (16 regions) bidirectional Arc Flags (128 regions) gegenüber Dijkstra nur Beschleunigung für weite Anfragen 128 Regionen z.t. deutlich besser 16 (bei 2 24 nahezu gleich auf) Folie 41 20. April 2014

Multi-Level Arc-Flags Problem: Anfragen in einer Zelle ohne Beschleunigung viele Real-Welt Anfragen sind lokal Multi-Level Arc-Flags: Multi-Level Partition berechne partielle Flaggen Folie 42 20. April 2014

Multi-Level Arc-Flags Problem: Anfragen in einer Zelle ohne Beschleunigung viele Real-Welt Anfragen sind lokal Multi-Level Arc-Flags: Multi-Level Partition berechne partielle Flaggen Folie 42 20. April 2014

Multi-Level Arc-Flags Problem: Anfragen in einer Zelle ohne Beschleunigung viele Real-Welt Anfragen sind lokal Multi-Level Arc-Flags: Multi-Level Partition berechne partielle Flaggen Folie 42 20. April 2014

Multi-Level Arc-Flags Problem: Anfragen in einer Zelle ohne Beschleunigung viele Real-Welt Anfragen sind lokal Multi-Level Arc-Flags: Multi-Level Partition berechne partielle Flaggen Folie 42 20. April 2014

Zusammenfassung Arc-Flags Teile Graphen in k Regionen Flaggen zeigen an, ob Kante wichtig für Zielregion ist Einfacher Anfrage-Algorithmus Vorberechnung Kürzeste-Wege-Baum von jedem Randknoten Manche Flaggen können automatisch gesetzt werden Bidirektional und multi-level Erweiterungen Beschleunigung in Größenordnung von 10 3 Nahe Anfragen nicht schneller als Dijkstra Hohe Vorberechnungszeit Folie 43 20. April 2014

SHARC Folie 44 20. April 2014

SHARC Motivation: unidirektional Vorberechnungszeiten von Arc-Flags reduzieren Ideen: Multi-Level Arc-Flags Integration von Kontraktion Verfeinern von Flaggen Folie 45 20. April 2014

Kontraktion Folie 46 20. April 2014

Kontraktion Identifiziere unwichtige Knoten Menge unwichtige Knoten: Component, verbliebene: Core Füge Shortcuts zwischen Core-Knoten hinzu, um Distanz innerhalb Core zu erhalten Generelles Query-Framework: Betrachte ggfs. Component um s und t, nutze sonst nur Core und Shortcuts Wichtiger Baustein, kommt noch mehrmals in Vorlesung Folie 46 20. April 2014

Integration von Kontraktion ---- ---- --0- Idee: sub-optimale flaggen für entfernte Kanten in die Komponente: nur own-cell Flagge, sonst voll Shortcuts: own-cell false Vorberechnung nur auf kontrahierten Graph sub-optimale Flaggen nur am Anfang und Ende der Query Überspringen von Kanten automatisch durch Arc-Flags Query --0-0010 1111 1111 ---- 1111 1111 0010 Folie 47 20. April 2014

SHARC (Kontraktion, Arc-Flags) Vorberechnung: Multi-Level-Partition Folie 48 20. April 2014

SHARC (Kontraktion, Arc-Flags) Vorberechnung: Multi-Level-Partition Folie 48 20. April 2014

SHARC (Kontraktion, Arc-Flags) Vorberechnung: Multi-Level-Partition Folie 48 20. April 2014

SHARC (Kontraktion, Arc-Flags) Vorberechnung: Multi-Level-Partition iterativer Prozess: kontrahiere Subgraphen Folie 48 20. April 2014

SHARC (Kontraktion, Arc-Flags) Vorberechnung: Multi-Level-Partition iterativer Prozess: berechne Flaggen Folie 48 20. April 2014

SHARC (Kontraktion, Arc-Flags) Vorberechnung: Multi-Level-Partition iterativer Prozess: kontrahiere Subgraphen Folie 48 20. April 2014

SHARC (Kontraktion, Arc-Flags) Vorberechnung: Multi-Level-Partition iterativer Prozess: berechne Flaggen Folie 48 20. April 2014

SHARC (Kontraktion, Arc-Flags) Vorberechnung: Multi-Level-Partition iterativer Prozess: kontrahiere Subgraphen Folie 48 20. April 2014

SHARC (Kontraktion, Arc-Flags) Vorberechnung: Multi-Level-Partition iterativer Prozess: kontrahiere Subgraphen berechne Flaggen Folie 48 20. April 2014

SHARC (Kontraktion, Arc-Flags) Vorberechnung: Multi-Level-Partition iterativer Prozess: kontrahiere Subgraphen berechne Flaggen Anfragen: uni- oder bidirektional hierarchisch (Kontraktion) LowestCommonSupercell(u,t) zielgerichtet (Arc-Flags) Folie 48 20. April 2014

Verfeinerung 0011 0011 0010 1100 1111 1111 1100 1111 1111 0010 0001 Beobachtung: Flaggen schlechter als nötig geht es besser? Folie 49 20. April 2014

Verfeinerung 0011 0011 0010 1100 1110 1110 1100 0011 0011 0010 0001 Beobachtung: Flaggen schlechter als nötig geht es besser? Idee: verfeinere Flaggen propagiere Flaggen von wichtigen zu unwichtigen Kanten mittels lokaler Suche sehr gute Flaggen Folie 49 20. April 2014

Zufallsanfragen Europe USA PREPRO QUERY PREPRO QUERY time space #settled time.0 time space #settled time.0 [h:m] [B/n] nodes [µs].0 [h:m] [B/n] nodes [µs].0 generous SHARC 1:21 14.5 654 290.0 0:58 18.1 865 376.0 bidirectional SHARC 2:38 21.0 125 65.0 2:34 23.1 254 118.0 economical SHARC 0:34 13.7 784 355.0 0:38 17.2 1 230 578.0 generous vs economical: unterschiedliche Parametrisierung der Kontraktion und Verfeinerung, Details im Papier Um eine Größenordnung schneller als ArcFlags Folie 50 20. April 2014

Dijkstra Rank SHARC Dijkstra Rank Query Time [ms] 2 6 2 7 2 8 2 9 2 10 2 11 2 12 2 13 2 14 2 15 2 16 2 17 2 18 2 19 2 20 2 21 2 22 2 23 2 24 0.01 0.03 0.1 0.2 0.5 1 2 5 generous SHARC economical SHARC bidirectional SHARC Folie 51 20. April 2014

Suchraum Arc-Flags Folie 52 20. April 2014

Suchraum SHARC Folie 52 20. April 2014

Übersicht bisherige Techniken 1,000 Dijkstras Algorithmus Bidirektionale Suche 100 Anfragezeit [ms] 10 1 0.1 Arc Flags (PHAST) SHARC Arc Flags 0.01 0.001 0.0001 Table Lookup (PHAST) 0.1 1 10 100 1,000 10,000 Vorberechnungszeit [min] Folie 53 20. April 2014

Übersicht bisherige Techniken 1,000 Dijkstras Algorithmus Bidirektionale Suche 100 Anfragezeit [ms] 10 1 0.1 0.01 Arc Flags SHARC 0.001 0.0001 Table Lookup (> 1 000 000 GiB) 100 1,000 10,000 100,000 Platzverbrauch [MiB] Folie 53 20. April 2014

Nächste Termine Montag, 27.4.2015 (Moritz Baum) Folie 54 20. April 2014

Literatur I Reinhard Bauer, Moritz Baum, Ignaz Rutter, and Dorothea Wagner. On the complexity of partitioning graphs for arc-flags. Journal of Graph Algorithms and Applications, 17(3):265 299, 2013. Reinhard Bauer and Daniel Delling. SHARC: Fast and robust unidirectional routing. ACM Journal of Experimental Algorithmics, 14(2.4):1 29, August 2009. Special Section on Selected Papers from ALENEX 2008. Moritz Hilger, Ekkehard Köhler, Rolf H. Möhring, and Heiko Schilling. Fast point-to-point shortest path computations with arc-flags. In The Shortest Path Problem: Ninth DIMACS Implementation Challenge, volume 74 of DIMACS Book, pages 41 72. American Mathematical Society, 2009. Folie 55 20. April 2014