Ich versuche herauszufinden, wie der Pfadgraph nach Eppsteins Algorithmus in dieser Arbeit funktioniert und wie ich die kürzesten Pfade von nach mit der entsprechenden Heapkonstruktion rekonstruieren kann .s t H ( G )
Bisher:
enthält alle Kanten, die einen Eckpunkt in einem Graphen hinterlassen und nicht Teil eines kürzesten Pfades in . Sie sind durch die "Zeitverschwendung", die als wird, haufenweise geordnet, wenn diese Kante anstelle der Kante auf kürzesten Wegen verwendet wird. Durch Anwenden von Dijkstra finde ich die kürzesten Pfade zu jedem Scheitelpunkt von .G G δ ( e ) t
Ich kann dies berechnen, indem ich die Länge der Kante + (den Wert des Kopfscheitelpunkts (auf den die gerichtete Kante zeigt) - den Wert des Schwanzscheitelpunkts (auf den die gerichtete Kante beginnt) nehme. Wenn dies es ist nicht auf dem kürzesten Weg, wenn es , ist es auf dem kürzesten Weg.= 0
Jetzt baue ich einen 2-Min-Heap indem ich die Menge der Kanten entsprechend ihrem für ein beliebiges , wobei die Wurzel nur hat ein Kind (= Teilbaum).o u t ( v ) δ ( e ) v ∈ V o u t r o o t ( v )
Um zu bilden, ich in beginnend am . Jedes Mal, wenn ein Scheitelpunkt beim Einfügen berührt wird, wird er mit einem markiert .o u t r o o t ( v ) H T ( n e x t T ( v ) ) t *
Jetzt kann ich indem ich den Rest von in . Jeder Eckpunkt in enthält entweder Kinder aus und aus oder aus dem ersten und aus dem zweiten und ist ein 3-Haufen.H o u t ( w ) H T ( v ) H G ( v ) 2 H T ( v ) 1 H o u t ( w ) 0 2
Mit kann ich eine DAG mit dem Namen erstellen, die einen Vertex für jeden mit markierten Vertex aus und für jeden Nicht-Wurzel-Vertex aus .D ( G ) ∗ H T ( v ) H o u t ( v )
Die Wurzeln von in heißen und sind durch eine "Abbildung" mit den Scheitelpunkten verbunden, zu denen sie gemäß gehören .D ( G ) h ( v ) o u t ( v )
So weit, ist es gut.
Das Papier sagt I bauen kann durch Einführen eine Wurzel und Verbinden dies zu durch eine Kante mit inital . Die Eckpunkte von sind die gleichen wie in , sie werden jedoch nicht gewichtet. Die Kanten haben Längen. Dann werden für jede gerichtete Kante die entsprechenden Kanten in erzeugt und mit gewichtet . Sie heißen Heap Edges. Dann werden für jeden Scheitelpunkt , der eine Kante darstellt, die sich nicht auf dem kürzesten Weg befindet und ein Paar von Scheitelpunkten und , "Kreuzkanten" aus erzeugtr = r ( s ) h ( s ) δ ( h ( s ) ) D ( G ) P ( G ) ( u , v ) ∈ D ( G ) P ( G ) δ ( v ) - δ ( u ) v ∈ P ( G ) u w v bis in mit einer Länge . Jeder Eckpunkt in nur einen Ausgangsgrad von max. .
‚s Pfade von Ausgang sollen eine Eins-zu-Eins - Entsprechung zwischen Länge seiner - -paths in .
Am Ende wird ein neuer, bestellter 4-Heap gebaut. Jeder Eckpunkt entspricht einem Pfad in , der bei verwurzelt ist . Das übergeordnete Element eines beliebigen Scheitelpunkts hat eine Kante weniger. Das Gewicht eines Scheitelpunkts ist die Länge des entsprechenden Pfades.
Um die kürzesten Pfade zu finden, verwende ich BFS zu und "übersetze" das Suchergebnis mit in Pfade .
Leider verstehe ich nicht, wie ich "lesen" und dann durch "übersetzen" kann , um die kürzesten Wege zu erhalten.
Antworten:
Es ist lange genug her, dass ich geschrieben habe, dass meine Interpretation dessen, was darin enthalten ist, wahrscheinlich nicht viel informierter ist als die anderer Leser. Dennoch:
Ich glaube, dass die Beschreibung, nach der Sie suchen, der letzte Absatz des Beweises von Lemma 5 ist. Grundsätzlich entsprechen einige der Kanten in P (G) (die "Querkanten") Ablenkungsspuren in G (dh Kanten, die vom Baum des kürzesten Pfades abweichen). Der Pfad in G wird gebildet, indem dem Baum mit dem kürzesten Pfad zum Startknoten des ersten Nebengleises gefolgt wird, der Kante des Nebengleises selbst gefolgt wird, dem Baum mit dem kürzesten Pfad erneut zum Startknoten des nächsten Nebengleises gefolgt wird usw.
quelle
Pseudocode für Eppsteins Algorithmus (und die Lazy-Version der Autoren) finden Sie in: VM Jiménez, A. Marzal, Eine Lazy-Version von Eppsteins Algorithmus für kürzeste Wege, in: 2. Internationaler Workshop zu experimentellen und effizienten Algorithmen (WEA '03), in: Lecture Notes in Computer Science, vol. 2647, Springer, 2003, S. 179–190. https://pdfs.semanticscholar.org/3a31/5a14a2fc773d2d800186121905016de31705.pdf
quelle