J'étudie actuellement les chemins les plus courts dans les graphiques dirigés. Il existe de nombreux algorithmes efficaces pour trouver le chemin le plus court dans un réseau, comme celui de dijkstra ou celui de bellman-ford. Mais que faire si le graphique est dynamique? En disant dynamique, je veux dire que nous pouvons insérer ou supprimer des sommets lors de l'exécution du programme. J'essaie de trouver un algorithme efficace pour mettre à jour les chemins les plus courts d'un sommet à tous les autres sommets u , après avoir inséré une arête e , sans avoir à exécuter à nouveau l'algorithme du chemin le plus court dans le nouveau graphique. Comment puis-je faire ceci? Merci d'avance.
- Remarque: les modifications peuvent être effectuées après la première itération de l'algorithme
- Remarque [2]: deux nœuds sont donnés, la source et t la cible. J'ai besoin de trouver le chemin le plus court entre ces nœuds. Lorsque le graphique est mis à jour, je n'ai qu'à mettre à jour π ( s , t ) , qui est le chemin le plus court entre s et t .
- Remarque [3]: Je ne suis intéressé que par le cas d'insertion de bord.
Une définition formelle : étant donné un graphique . Définissez une opération de mise à jour comme 1) une insertion d'une arête e dans E ou 2) aa suppression d'un bord de E . L'objectif est de trouver efficacement le coût de toutes les paires de chemins les plus courts après une opération de mise à jour. Par efficace, nous entendons au moins mieux que d'exécuter un algorithme All-Pairs-Shortest-Path, tel que l'algorithme Bellman-Ford, après chaque opération de mise à jour.
Edit: Ci - dessous, il existe une version simplifiée du problème:
Un graphe pondéré est donné, composé d'arêtes unidirectionnelles et de deux sommets critiques s et t . Un ensemble C de bords bidirectionnels candidats est également donné. Je dois construire une arête ( u , v ) ∈ C pour minimiser la distance de s à t .