Próbuję dowiedzieć się, jak działa wykres ścieżki według algorytmu Eppsteina w tym artykule i jak mogę zrekonstruować najkrótszych ścieżek od do z odpowiednią konstrukcją stosu .k s t H ( G )
Jak dotąd:
zawiera wszystkie krawędzie opuszczające wierzchołek na wykresie , które nie są częścią najkrótszej ścieżce . Są one uporządkowane według „straty czasu” zwanej gdy używa się tej krawędzi zamiast krawędzi na najkrótszych ścieżkach. Stosując Dijkstra, znajduję najkrótsze ścieżki do każdego wierzchołka od .G G δ ( e ) t
Mogę to obliczyć, biorąc długość krawędzi + (wartość wierzchołka głowy (gdzie skierowana jest skierowana krawędź) - wartość wierzchołka ogona (gdzie zaczyna się skierowana krawędź). Jeśli jest to to nie znajduje się na najkrótszej ścieżce, jeśli jest , znajduje się na najkrótszej ścieżce.= 0
Teraz buduję 2-Min-Heap poprzez gromadzenie zbioru krawędzi zgodnie z ich dla dowolnego , gdzie root ma tylko jedno dziecko (= poddrzewo).o u t ( v ) δ ( e ) v ∈ V o u t r o o t ( v )
Aby zbudować wstawiam w zaczynając od wierzchołka terminalu . Za każdym razem, gdy wierzchołek jest dotykany podczas wstawiania, jest oznaczony .o u t r o o t ( v ) H T ( n e x t T ( v ) ) t ∗
Teraz mogę zbudować , wstawiając resztę w . Każdy wierzchołek w zawiera albo dzieci z i z lub z pierwszego i z drugiego i jest 3-stertą.H o u t ( w ) H T ( v ) H G ( v ) 2 H T ( v ) 1 H o u t ( w ) 0 2
Za pomocą mogę zbudować DAG o nazwie zawierający wierzchołek dla każdego wierzchołka oznaczonego * z H_T (v) i dla każdego wierzchołka innego niż root z H_ {out} (v) .D ( G ) ∗ H T ( v ) H o u t ( v )
Pierwiastki w są nazywane i są połączone z wierzchołkami, do których należą, zgodnie z poprzez „mapowanie”.
Jak na razie dobrze.
Artykuł mówi, że mogę zbudować , wstawiając pierwiastek i łącząc go z za pomocą początkowej krawędzi za pomocą . Wierzchołki są takie same w ale nie są ważone. Krawędzie mają długości. Następnie dla każdej skierowanej krawędzi odpowiednie krawędzie w są tworzone i ważone przez . Są to tak zwane brzegi sterty. Następnie dla każdego wierzchołka , który reprezentuje krawędź nie w najkrótszej ścieżce łączącej parę wierzchołków i , tworzone są „krawędzie poprzeczne” z do w o długości . Każdy wierzchołek w ma tylko wychodzący stopień maks.
„s drogi już od mają być długość korespondencji jeden-do-jednego między - , ścieżek w .
Na koniec budowana jest nowa sterta 4-sterty . Każdy wierzchołek odpowiada ścieżce w zakorzenionej w . Element nadrzędny dowolnego wierzchołka ma jedną krawędź mniejszą. Ciężar wierzchołka to długość odpowiedniej ścieżki.
Aby znaleźć najkrótszych ścieżek, używam BFS na i „tłumaczę” wynik wyszukiwania na ścieżki za pomocą .
Niestety nie rozumiem, jak mogę „odczytać” a następnie „przetłumaczyć” go przez aby otrzymać najkrótszych ścieżek.