Sto cercando di capire come funziona il grafico del percorso secondo l'algoritmo di Eppstein in questo documento e come posso ricostruire i k percorsi più brevi da s a t con la corrispondente costruzione di heap H ( G ) .
Finora:
contiene tutti i bordi lasciando un vertice v in un grafo G che non fanno parte di un cammino minimo in G . Sono ordinati in base allo "spreco di tempo" chiamato δ ( e ) quando si utilizza questo bordo anziché quello su percorsi più brevi. Applicando Dijkstra trovo i percorsi più brevi per ogni vertice da t .
Posso calcolarlo prendendo la lunghezza del bordo + (il valore del vertice della testa (dove punta il bordo diretto) - il valore del vertice della coda (dove inizia il bordo diretto). Se questo è esso non è su un percorso più breve, se è = 0 è su un percorso più breve.
Ora a costruire un 2-Min-Heap dal heapifying l'insieme dei bordi o u t ( v ) in base alla loro δ ( e ) per ogni v ∈ V , dove la radice o u t r o o t ( v ) ha un solo figlio (= sottostruttura).
Per costruire I inserto o u t r o o t ( v ) in H T ( n e x t T ( v ) ) che inizia in corrispondenza del vertice terminale t . Ogni volta che un vertice viene in qualche modo toccato durante l'inserimento è contrassegnato da un ∗ .
Ora posso costruire inserendo il resto H o u t ( w ) in H T ( v ) . Ogni vertice in H G ( v ) contiene sia 2 bambini da H T ( v ) e 1 da H o u t ( w ) o 0 dal primo e 2 dal secondo ed è un 3-mucchio.
Con che può costruire un DAG denominato D ( G ) contenente un vertice per ogni * vertice segnata con da H T ( v ) e per ogni vertice non radice da H o u t ( v ) .
Le radici di in D ( G ) sono chiamate h ( v ) e sono collegate ai vertici a cui appartengono secondo o u t ( v ) da una "mappatura".
Fin qui tutto bene.
Il documento dice che posso costruire inserendo una radice r = r ( s ) e collegandola a h ( s ) da un bordo iniziale con δ ( h ( s ) ) . I vertici di D ( G ) sono gli stessi in P ( G ) ma non sono ponderati. I bordi hanno lunghezze. Quindi per ogni fronte diretto ( u , v ) ∈ D ( G )i bordi corrispondenti in vengono creati e ponderati da δ ( v ) - δ ( u ) . Si chiamano Heap Edges. Poi per ogni vertice v ∈ P ( G ) , che rappresenta un vantaggio non in un percorso più breve che collega una coppia di vertici u e w , "bordi trasversali" sono creati da v a h ( w ) a P ( G ) avente una lunghezza δ ( h ( w . Ogni vertice in P ( G ) ha solo un grado uscente di 4 max.
's percorsi partire da r dovrebbero essere una lunghezza corrispondenza uno-a-uno tra s - t -paths in G .
Alla fine viene costruito un nuovo heap ordinato 4-Heap . Ogni vertice corrisponde a un percorso in P ( G ) radicato in r . Il genitore di qualsiasi vertice ha un margine in meno. Il peso di un vertice è la lunghezza del percorso corrispondente.
Per trovare i percorsi più brevi uso BFS in P ( G ) e "traduco" il risultato della ricerca in percorsi usando H ( G ) .
Sfortunatamente, non capisco come posso "leggere" e poi "tradurlo" attraverso H ( G ) per ricevere i k percorsi più brevi.