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.