L' algorithme de Bellman-Ford détermine le chemin le plus court d'une source à tous les autres sommets. Initialement, la distance entre et tous les autres sommets est définie sur . Ensuite, le chemin le plus court de à chaque sommet est calculé; cela continue pour les itérations . Mes questions sont:s ∞ s | V | - 1
- Pourquoi faut-il des itérations ?
- Serait-il important que je vérifie les bords dans un ordre différent?
Disons, si je vérifie d'abord les bords 1,2,3, mais à la deuxième itération, je vérifie 2,3,1.
MIT Professeur Eric a dit l'ordre n'a pas d' importance, mais cette embrouille me: ne l'algorithme mettre à jour correctement un nœud basé sur le bord si sa valeur dépendait du bord mais est mis à jour après ?x 1 x 1 x 2
algorithms
shortest-path
user1675999
la source
la source
Réponses:
Considérez le chemin le plus court de à , . Ce chemin se compose d'au plus arêtes, car répéter un sommet dans un chemin le plus court est toujours une mauvaise idée (ou au moins il y a un chemin le plus court qui ne répète pas les sommets), si nous n'avons pas de cycles de poids négatifs .t s , v 1 , v 2 , … , v k , t | V | - 1s t s , v1, v2, … , Vk, t | V| -1
Au premier tour, nous savons que le bord sera détendu, donc l'estimation de la distance pour sera correcte après ce tour. Notez que nous n'avons aucune idée de ce qu'est à ce stade, mais comme nous avons assoupli tous les bords, nous devons également avoir assoupli celui-ci. Au deuxième tour, nous nous détendons à un moment donné. Nous n'avons toujours aucune idée de ce que sont ou , mais nous savons que leurs estimations de distance sont correctes.v 1 v 1( s , v1) v1 v1 v 1 v 2( v1, v2) v1 v2
En répétant cela, après quelques tours , nous avons relâché , après quoi l'estimation de la distance pour est correcte. Nous n'avons aucune idée de ce que est jusqu'à ce que l'algorithme entier soit terminé, mais nous savons qu'il se produira à un moment donné (en supposant qu'il n'y ait pas de cycles de poids négatifs).k + 1 ( vk, t ) t k
Ainsi, l'observation cruciale est qu'après le tour , le ème nœud du chemin le plus court doit avoir son estimation de distance réglée à la valeur correcte. Comme le chemin est au maximum long, les suffisent pour trouver ce chemin le plus court. Si unLe cycle change encore quelque chose, puis quelque chose d'étrange se passe: tous les chemins doivent déjà être «réglés» à leurs valeurs finales, nous devons donc avoir la situation où un cycle de poids négatif existe.je je | V| -1 | V| -1 | V|
la source
Le plus long chemin peut être sans cycles
|V|
. Nous commençons avec une source, nous avons donc déjà un chemin de longueur 1, nous avons donc besoin de|V| - 1
plus de nœuds pour obtenir le chemin le plus long.L'ordre n'a pas d'importance car chaque commande maintiendra l'invariant: après les
n
itérations, la valeur de chaque nœud est inférieure ou égale au coût du chemin de coût minimums
du nœud contenant le plus den
bords.Si, au début d'une itération, le coût est correct jusqu'aux
n
nœuds, alors à la fin de l'itération, il est correct jusqu'auxn+1
nœuds. Une réorganisation peut entraîner un moindre coût pour certains nœuds avant qu'ils ne soient normalement mis à jour, mais ils seront finalement mis à jour de toute façon.la source