이 백서 의 Eppstein 알고리즘에 따른 경로 그래프 P ( G )P(G) 의 작동 방식과 해당 힙 구성 H ( G )를 사용하여 s 에서 t 까지 k 개의 최단 경로를 재구성하는 방법을 알아 내려고 노력 중 입니다.kstH(G)
지금까지:
O U t ( V )out(v) 정점 떠나는 모든 모서리 포함 Vv 그래프에서 GG 의 최단 경로에 포함되지 않은 G를G . 이 경로는 가장 짧은 경로의 가장자리 대신이 가장자리를 사용할 때 δ ( e ) 라는 "시간 낭비"에 따라 힙 순서가 지정됩니다δ(e). Dijkstra를 적용하여 t 에서 모든 꼭지점까지의 최단 경로를 찾습니다t.
모서리의 길이 + (헤드 정점의 값 (직접 에지가 가리키는 위치)-꼬리 정점의 값 (직접 에지가 시작되는 위치)을 취하여이를 계산할 수 있습니다. > 0 인 경우) 최단 경로에 있지 않은 경우 = 0이면 최단 경로에 있습니다.>0=0
이제 2 최소 힙 구축 H O U t ( V ) 에지들의 집합을 heapifying 의해 O를 U t ( V ) 자신에있어서 δ ( E ) 임의의 용 V ∈ V 루트, O u는 t는 r에 O O t ( v ) 에는 하위 항목이 하나만 있습니다 (= 하위 트리).Hout(v)out(v)δ(e)v∈Voutroot(v)
H T ( v ) 를 만들기 위해 터미널 정점 t 에서 시작하는 H T ( n e x t T ( v ) )에 o u t r o o t ( v ) 를 삽입 합니다. 삽입하는 동안 정점을 만질 때마다 * 로 표시됩니다 .HT(v)outroot(v)HT(nextT(v))t∗
Now I can build HG(v)HG(v) by inserting the rest of Hout(w)Hout(w) in HT(v)HT(v). Every vertex in HG(v)HG(v) contains either 22 children from HT(v)HT(v) and 11 from Hout(w)Hout(w) or 00 from the first and 22 from the second and is a 3-heap.
With HG(v)HG(v) I can build a DAG called D(G)D(G) containing a vertex for each ∗∗-marked vertex from HT(v)HT(v) and for each non-root vertex from Hout(v)Hout(v).
The roots of HG(v)HG(v) in D(G)D(G) are called h(v)h(v) and they are connected to the vertices they belong to according to out(v)out(v) by a "mapping".
So far, so good.
이 논문은 I 구축 수 있다고 P ( G를 ) 루트 삽입하여 R = R ( S )을 하고,이 연결 H ( S ) 과 함께 inital 가장자리 δ ( H ( S ) ) . D ( G ) 의 꼭짓점은 P ( G ) 에서 동일 하지만 가중치는 없습니다. 가장자리 길이가 있습니다. 그런 다음 각 방향 모서리 ( u , v ) ∈ D ( G )P(G)r=r(s)h(s)δ(h(s))D(G)P(G)(u,v)∈D(G) the corresponding edges in P(G)P(G) are created and weighted by δ(v)−δ(u)δ(v)−δ(u). They are called Heap Edges. Then for each vertex v∈P(G)v∈P(G), which represents an edge not in a shortest path connecting a pair of vertices uu and ww, "cross edges" are created from vv to h(w)h(w) in P(G)P(G) having a length δ(h(w))δ(h(w)). Every vertex in P(G)P(G) only has a out going degree of 44 max.
P(G)P(G)'s paths starting from rr are supposed to be a one-to-one length correspondence between ss-tt-paths in GG.
In the end a new heap ordered 4-Heap H(G)H(G) is build. Each vertex corresponds to a path in P(G)P(G) rooted at rr. The parent of any vertex has one fewer edge. The weight of a vertex is the lenght of the corresponding path.
To find the kk shortest paths I use BFS to P(G)P(G) and "translate" the search result to paths by using H(G)H(G).
Unfortunately, I don't understand how I can "read" P(G)P(G) and then "translate" it through H(G)H(G) to receive the kk shortest paths.