Théorie des graphes Cheminements dans un graphe ENSIIE Alain Faye 1 Plus courts chemins dans un graphe 2 Cheminement optimal • Soit G=(X,U) un graphe orienté valué • c : U IR poids, distance, coût • Problème : étant donné un sommet s, trouver le plus court chemin de s à tous les sommets du graphe 3 Exemple de chemins 2 4 5 1 s=1 Chemins de 1 à 4 Chemin1, 2, 4 Chemin1, 3, 4 Chemin 1, 3, 2, 4 Chemin 1, 2, 3, 4 valeur 9 valeur 9 valeur 13 valeur 8 optimal 4 2 8 1 3 4 Cheminement optimal – Les différents cas Graphe sans circuit Graphe avec ou sans circuit Algorithme de Bellman Poids 0 Algorithme de Dijkstra Poids quelconques Algorithme de Ford 5 Graphe sans circuits - Algorithme de Bellman • Le graphe est sans circuits donc on peut le mettre en niveaux (tri topologique) • Une fois le graphe en niveaux, un sommet de niveau n a tous ses prédécesseurs dans les niveaux < n • On peut alors calculer les valeurs des plus courts chemins par la formule de récurrence • 𝜋 x = min { 𝜋 𝑦 + 𝑐𝑦𝑥 } 𝑦𝜖 −1 (𝑥) • Quand on applique cette formule, 𝜋 𝑦 𝑦𝜖−1 (𝑥) est déjà calculé car y a été parcouru avant x 6 Valuations négatives • Si le graphe porte sur ses arcs des valuations négatives, il peut y avoir des circuits absorbants c’est-à-dire des circuits dont la somme des valuations est <0 • et donc des plus courts chemins de valeur - 1 1 1 s x -1 -1 Le plus court chemin de s à x vaut - à cause du circuit de valeur -1 On boucle indéfiniment dedans 7 Graphes quelconques – valuations quelconques – Algorithme de Ford • 𝜋 𝑚 (𝑥) = valeur d’un plus court chemin de s à x passant par au plus m arcs • Un chemin élémentaire a au plus n-1 arcs (n nombre de sommets) • Donc 𝜋 𝑛−1 (𝑥) = valeur du plus court chemin de s à x • Si 𝜋 𝑛−1 (𝑥) ≠ 𝜋 absorbant. 𝑛 (𝑥) on a détecté un circuit 8 Algorithme de Ford x s itération m - soit on garde le précédent chemin de m-1 arcs - soit on rajoute un arc pour construire un chemin de m arcs 𝜋 𝑚 𝑥 = min 𝜋 𝑚−1 𝑥 , min 𝜋 𝑦𝜖 −1 (𝑥) 𝑚−1 𝑦 + 𝑐𝑦𝑥 9 Algorithme de Ford 𝜋 0 𝑠 = 0, 𝜋 0 𝑥 = ∀𝑥 ≠ 𝑠 Pour m=1 à n-1 Pour tout sommet x 𝜋 𝑚 𝑥 = min 𝜋 𝑚−1 𝑥 , min 𝜋 𝑦𝜖 −1 (𝑥) 𝑚−1 𝑦 + 𝑐𝑦𝑥 Complexité O(n3) 10 FORD s 2 -2 A n=4 sommets 1 B 3 1 C 11 FORD s 2 -2 A 0 n=4 sommets 1 B 3 1 C chemins de 1 arc 0 2 2 A s 1 1 B C 12 FORD s 2 0 -2 A n=4 sommets 1 B 3 1 C chemins de 1 arc chemins de 2 arc 0 2 2 A s 1 2 1 B 2 A s -2 0 1 0 B 3 C C 4 13 FORD s 2 0 -2 A n=4 sommets 1 B 3 1 C chemins de 1 arc chemins de 2 arcs 0 2 2 A s 1 2 1 B 2 A s -2 chemins de 3 arcs 0 2 1 0 B 2 A 3 C s C 4 -2 0 1 0 B 3 1 C 3 14 Cheminement optimal – Cas des valuations positives (Dijkstra) • Cas fréquent en pratique. Ex : routage dans un réseau de télécommunications • On utilise l’algorithme de Dijkstra. • Plus courts chemins issus de s • A la fin de l’algorithme, on a la valeur des plus courts chemins de s à tous les autres sommets • Complexité algorithmique : O(n²) 15 Cheminement optimal – Cas des valuations positives (Dijkstra) • On note Dist(x) la longueur d’un plus court chemin de sàx • Au fur et à mesure des itérations – On entretient (x) x – On met à jour S ensemble des sommets stabilisés – Les sommets x stabilisés sont tels que (x)=Dist(x) • À la fin de l’algorithme : – S contient tous les sommets du graphe et pour tout sommet x (x)=Dist(x) 16 Dijkstra: plus courts chemins issus de s • X= ensemble des sommets de G • Init: (s)=0, S={s}, (x)=csx si x successeur de s et (x)= sinon • Tant que SX faire – Soit 𝑥 le sommet = arg_minyX\S (y) – S:=S{𝑥 } – Mise à jour des successeurs de 𝑥 : • Pour y(X\S)+(𝑥 ) faire Si (y)> (𝑥 )+ 𝑐𝑥𝑦 alors (y)= (𝑥 )+ 𝑐𝑥𝑦 Fin tant que 17 Dijkstra: initialisation 2 2 4 5 1 s=1 4 2 8 s=1 1=0 4 1 3 3 miniSi 1 2 3 4 0 5 8 précédent - 1 1 - Zone bleue = sommets stabilisés S 18 Dijkstra: itération 1 2 2=5 2 4 5 5 1 s=1 4 2 8 s=1 1=0 4 1 3 3 miniSi 1 2 3 4 0 5 7 9 précédent - 1 2 2 19 Dijkstra: itération 2 2 2=5 2 4 5 5 1 s=1 4 2 8 s=1 1=0 4 2 1 3 3=7 3 miniSi 1 2 3 4 0 5 7 8 précédent - 1 2 3 20 Dijkstra: itération 3 2 2=5 2 4 5 5 1 s=1 4 2 8 s=1 1=0 4 4=8 2 1 1 3 3=7 3 1 2 3 4 0 5 7 8 précédent - 1 2 3 21 Est-il possible de se ramener à des poids positifs ou nuls ? Soit un graphe G avec des longueurs d’arcs c éventuellement <0. Peut-on se ramener à des longueurs c ≥ 0 ? Rajouter une constante ≥ 0 suffisamment grande à tous les arcs n’est pas une bonne idée 1 s -5 a 2 b Plus court chemin de s à b = s—a—b de poids -3 On rajoute 5 pour avoir les longueurs ≥ 0 1+5 s -5+5 a 2+5 Plus court chemin de s à b = s—b de poids 6 , le chemin s—a—b vaut 7 et n’est plus optimal b 22 Est-il possible de se ramener à des poids positifs ou nuls ? Graphe G=(X,U) avec des longueurs d’arcs c quelconques, Soient des poids sur les sommets . Posons c’ij = cij + i - j (i,j) U 1-Montrer qu’un chemin de s à x avec c’ et avec c ne diffèrent que d’une constante s-x Si c’ij ≥ 0 i,j U, on est ramené à un problème avec des arcs de longueurs positives ou nulles. Comment trouver tels que c’ij = cij + i - j ≥ 0 (i,j) U ? 2-Montrer que si sont les valeurs d’un plus court chemin avec c issu d’un sommet s alors c’ij = cij + i - j ≥ 0 (i,j) U. 23 Est-il possible de se ramener à des poids positifs ou nuls ? Valuation c 2 s 2 -2 A 1 0 1 B 0 3 C 3 3-On pose s=0, A=2, B=0, C=3. Calculer c’sA, c’sB, c’AB, c’BC, c’CA. 24 Est-il possible de se ramener à des poids positifs ou nuls ? Valuation c’ s 0 0 A 1 B 0 2 C 4-Calculer le plus court chemin de B à A dans le graphe valué par c’. En déduire le plus court chemin et sa valeur dans le graphe valué par c. 5-Même question pour le plus court chemin de A à C. 25