J'ai étudié les trois et j'énonce mes inférences ci-dessous. Quelqu'un pourrait-il me dire si je les ai suffisamment compris ou non? Je vous remercie.
L'algorithme de Dijkstra est utilisé uniquement lorsque vous avez une seule source et que vous souhaitez connaître le plus petit chemin d'un nœud à un autre, mais échoue dans des cas comme celui-ci .
L'algorithme Floyd-Warshall est utilisé lorsque tous les nœuds peuvent être une source, vous voulez donc que la distance la plus courte atteigne n'importe quel nœud de destination à partir de n'importe quel nœud source. Cela échoue uniquement lorsqu'il y a des cycles négatifs.
Bellman-Ford est utilisé comme Dijkstra, quand il n'y a qu'une seule source. Cela peut gérer des poids négatifs et son fonctionnement est le même que Floyd-Warshall, sauf pour une seule source, non? (C'est celui dont je suis le moins sûr.)
la source
Réponses:
previous[v]
Le comportement de l'algorithme de Dijkstra dans les graphiques à bords négatifs dépend de la variante précise en discussion. Certaines variantes de l'algorithme, comme celle de Wikipedia, s'exécutent toujours rapidement mais ne calculent pas correctement les chemins les plus courts lorsqu'il y a des bords négatifs. D'autres variantes, comme celle de ces notes de cours, calculent toujours les chemins les plus courts correctement (sauf s'il y a un cycle négatif accessible depuis la source) mais peuvent nécessiter un temps exponentiel dans le pire des cas s'il y a des bords négatifs.
C'est correct. Floyd-Warshall est un exemple d' algorithme de chemin le plus court toutes paires , ce qui signifie qu'il calcule les chemins les plus courts entre chaque paire de nœuds. Un autre exemple est "pour chaque nœud v, exécutez Dijkstra avec v comme nœud source". Il y en a plusieurs autres.
Bellman-Ford est un autre exemple d'un algorithme à chemin unique à source unique , comme Dijkstra. Bellman-Ford et Floyd-Warshall sont similaires - par exemple, ce sont tous deux des algorithmes de programmation dynamique - mais Floyd-Warshall n'est pasO ( V3) O ( V2E) O ( VE)
Pour plus de détails, consultez votre manuel d'algorithmes préféré. (Vous avez un manuel d'algorithmes préféré, n'est-ce pas?)
la source
Les trois algorithmes sont couverts dans les diapositives de la conférence par le professeur Jaehyun Park (Stanford University). Voici le lien Algorithmes de chemin le plus court
la source
La page Wikipedia sur le problème du chemin le plus court décrit deux problèmes différents: SSSP et APSP.
Chemin le plus court à source unique (SSSP):
Algorithme Bellman-Ford: résout le problème à source unique si les poids des bords peuvent être négatifs. Il s'agit d'une amélioration sur Dijkstra où il est désormais capable de gérer également les poids négatifs.
Chemin le plus court pour toutes les paires (APSP):
Par conséquent, Floyd – Warshall n'est pas la même chose que BFS, bien que la méthodologie sous-jacente soit la même, la programmation dynamique.
la source
Peut-être que cela devrait être un commentaire plutôt qu'une réponse, mais c'est une distinction entre ces algorithmes que les autres réponses ne mentionnent pas.
Les gens ont tendance à appeler l'algorithme de Floyd Floyd-Warshall , mais les algorithmes de Floyd et Warshall ne sont pas les mêmes.
la source