UMLV ã Plus courts chemins Toutes paires d'états algorithme de Floyd 0(|S| 3) Chemins de même origine algorithme de Dijkstra 0 (|S|2) ou 0 (|S|+|Allog|S|) algorithme de Bellman-Ford (|S|.|A|) ~ plus court chemin même destination
3 6 7 2 1 4 5 S UMLV ã Problème : G = (S, A, V) s Î S " t Î S calculer d (s,t) = min V (c) pour c chemin de s à t. Exemple 3 6 7 2 1 4 5 S
UMLV ã d 3 9 5 11 et arbres de plus courts chemins 3 9 11 5
UMLV ã Lemme 1 G=(S,A,V) c plus court chemin de p à r si c = p q ® r alors d (p,r) = d (p,q)+v(q,r) Preuve : car p q est un plus court chemin de p à q Lemme 2 " (q,r) arc d (p,r) £ d (p,q)+v(q,r) d
UMLV ã Relaxation t Î S d(t) estimation de d (s,t) Initialisation Pour chaque t Î S faire d(S)¬ 0 ; Relaxation (p,q) si d(q) > d(p) + v(p,q) alors {d(q) ¬ d(p)+v(p,q) (q) ¬ p ; }
UMLV ã Propriété d(q) ³ d (s,q) invariant de relax Preuve induction sur le nombre d'éxécution de "relax"
ssi pas de circuit de valeur < O UMLV ã Lemme " t d (s,t) > - ¥ ssi pas de circuit de valeur < O
UMLV ã Algorithme de Dijkstra début v ³ o init Q ¬ S ; tant que Q ¹ Æ faire { p ¬ MINd(Q) ; Q ¬ Q - {p} pour chaque q Î A (p) faire relax (p,q) ; } fin.
UMLV ã Implémentation Matrice d'adjacence O (|S|2) Liste d'adjacence Q : file de priorité par "tas" |S| opér.MIN ® |S| log|S| |A| opér relax ® |A|log|S| ®(|S|+|A|) log |S|
UMLV ã Algorithme de Bellman-Ford début v Î R init ; répéter |S| - 1 fois pour chaque (p,q) Î A faire relax (p,q) ; si d(q) + v(p,q) < d (q) alors retour faux retour vrai fin
UMLV ã Exemple 6 - 2 7 2 9 S 5 8 -3 -4 Complexité O (|S|.|A|)
pour chaque p Î S en ordre topologique faire UMLV ã Graphes acycliques plus courts chemins début init ; pour chaque p Î S en ordre topologique faire pour chaque q Î A (u) faire relax (p,q) ; fin 2 4 3 5 7 -1 -2 6 1 S