Skip to main content

Graphe - Plus Court Chemin

Le problème du plus court chemin considéré ici porte sur des graphes orientés à arcs pondérés. Le plus court chemin d'un sommet ss à un sommet tt est alorsun chemin de ss à tt, la somme des poids des arcs qu'il contient, est minimale.

Bellman-Ford

Le premier algorithme étudié est une algorithme que garantit que pour tout chemin (s1,...,sl)(s_1,...,s_l) avec lnl \leq n les arcs (s1,s2),...,(sl1,sl)(s_1,s_2),...,(s_{l-1},s_l) seront relachés dans cet ordre. L'intéret de cet algorithme est double

  • sa définition est très simple
  • il retourne un résultat correct pour des graphes possédant des arcs de poids négatifs
  • il détecte un cycle de poids négatif si il en existe

bellman-ford

fonction Bellman-Ford(G : graphe à arcs pondérés, s : sommet de G) : (booléen, tableau V_G -> R, tableau V_G -> V_G)
(d,pere) = relacherInit(G,s)

faire |V_G| - 1 fois
pour chaque arc (u,v) de G
relacher(u,v,G,d,pere)
retourner (d,pere)

procédure relacher(u:sommet, v:sommet, G:graphe à arcs pondérés, d: tableau, V_G -> R, père : tableau V_G -> V_G)
si d(v) > d(u) + poids(u,v)
d[v] = d(u) + poids(u,v)
père[v] = u

Dijkstra

dijkstra Le second algorithme étudié a pour principales propriétés

  • sa correction établie que pour des graphes sans arcs de poids négatif
  • la simplicité de sa définition
  • une faible complexité en temps
fonction Dijkstra(G: graphe à arcs pondérés, s: sommet):(fonction V_G -> R, fonction V_G -> V_G)
(d,père) = relacherInit(G,s)
Y = V_G

tant que Y n'est pas l'ensemble vide faire
extraire un élément u de Y de valeur d minimale
pour chaque successeur v de u faire
si v appartient à Y faire
relacher(u,v,G,d,père)
retourner(d,père)

procédure relacherInit(G: graphe à arcs pondérés, s: sommet):(tableau V_G -> R, tableau V_G -> V_G)
d = tableau indicé par V_G initialisé à l'infini
père = tableau indicé par V_G initialisé à NULL
d[s] = 0
retourner (d,père)