Attualmente sto studiando i percorsi più brevi nei grafici diretti. Esistono molti algoritmi efficienti per trovare il percorso più breve in una rete, come Dijkstra o Bellman-Ford. E se il grafico fosse dinamico? Dicendo dinamico intendo che possiamo inserire o rimuovere vertici durante l'esecuzione del programma. Sto cercando di trovare un algoritmo efficiente per aggiornare i percorsi più brevi da un vertice ad ogni altro vertice u , dopo aver inserito un bordo e , senza dover eseguire di nuovo l'algoritmo del percorso più breve nel nuovo grafico. Come posso fare questo? Grazie in anticipo.
- Nota: le modifiche possono essere apportate dopo la prima iterazione dell'algoritmo
- Nota [2]: vengono indicati due nodi, l'origine e t l'obiettivo. Devo trovare il percorso più breve tra questi nodi. Quando il grafico viene aggiornato, devo solo aggiornare π ( s , t ) , che è il percorso più breve tra s e t .
- Nota [3]: sono interessato solo al caso di inserimento del bordo.
Una definizione formale : dato un grafico . Definire un'operazione di aggiornamento come 1) un inserimento di un bordo e di E o 2) aa delezione di un bordo e da E . L'obiettivo è trovare in modo efficiente il costo di tutte le coppie percorsi più brevi dopo un'operazione di aggiornamento. Con efficienza, intendiamo almeno meglio dell'esecuzione di un algoritmo All-Pairs-Shortest-Path, come l'algoritmo Bellman-Ford, dopo ogni operazione di aggiornamento.
Modifica: sotto c'è una versione semplificata del problema:
Viene fornito un grafico ponderato , costituito da bordi unidirezionali e due vertici critici s e t . Viene inoltre fornito un set C di bordi bidirezionali candidati . Devo costruire un bordo ( u , v ) ∈ C per ridurre al minimo la distanza da s a t .