Estoy tratando de descubrir cómo funciona el Gráfico de ruta según el Algoritmo de Eppstein en este documento y cómo puedo reconstruir las rutas más cortas de a con la construcción del montón .
Hasta aquí:
v G G contiene todos los bordes dejando un vértice en un gráfico de que no son parte de un camino más corto en . Están ordenados en montón por la "pérdida de tiempo" llamada δ ( e ) cuando se usa este borde en lugar del que está en los caminos más cortos. Al aplicar Dijkstra, encuentro los caminos más cortos para cada vértice desde t .
Puedo calcular esto tomando la longitud del borde + (el valor del vértice de la cabeza (donde apunta el borde dirigido) - el valor del vértice de la cola (donde comienza el borde dirigido). Si es , no está en la ruta más corta, si es está en la ruta más corta.
Ahora construyo un 2-Min-Heap al heapificar el conjunto de aristas acuerdo con su para cualquier , donde la raíz tiene solo un hijo (= subárbol).
Para construir inserto o u t r o o t ( v ) en H T ( n comenzando en el vértice terminal t . Cada vez que se toca un vértice de alguna manera al insertarlo, se marca con una ∗ .
Ahora puedo construir insertando el resto de H o u t ( w ) en H T ( v ) . Cada vértice en H G ( v ) contiene 2 hijos de H T ( v ) y 1 de H o u t ( w ) o 0 del primero y 2 del segundo y es un montón de 3.
Con puedo construir un DAG llamado D ( G ) que contiene un vértice para cada vértice marcado con ∗ de H T ( v ) y para cada vértice no raíz de H o u t ( v ) .
Las raíces de en D ( G ) se llaman h ( v ) y están conectadas a los vértices a los que pertenecen según o u t ( v ) mediante un "mapeo".
Hasta aquí todo bien.
El documento dice que puedo construir insertando una raíz r = r ( s ) y conectando esto a h ( s ) por un borde inicial con δ ( h ( s ) ) . Los vértices de D ( G ) son los mismos en P ( G ) pero no están ponderados. Los bordes tienen longitudes. Luego, para cada borde dirigido ( u , v ) ∈ D ( G )los bordes correspondientes en se crean y se ponderan con δ ( v ) - δ ( u ) . Se llaman Heap Edges. Luego, para cada vértice v ∈ P ( G ) , que representa un borde que no está en el camino más corto que conecta un par de vértices u y w , se crean "bordes transversales" de v a h ( w ) en P ( G ) que tiene una longitud δ ( h ( w . Cada vértice en P ( G ) solo tiene un grado de salida de 4 máx.
caminos 's a partir de r se supone que son una correspondencia longitud uno-a-uno entre s - t -vías en G .
Al final, se construye un nuevo montón ordenado 4-Heap . Cada vértice corresponde a una ruta en P ( G ) enraizada en r . El padre de cualquier vértice tiene un borde menos. El peso de un vértice es la longitud de la ruta correspondiente.
Para encontrar las rutas más cortas, uso BFS a P ( G ) y "traduzco" el resultado de la búsqueda a rutas usando H ( G ) .
Desafortunadamente, no entiendo cómo puedo "leer" y luego "traducirlo" a través de H ( G ) para recibir las k rutas más cortas.