Cheminements optimaux dans les graphes

publicité
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 SX faire
– Soit 𝑥 le sommet = arg_minyX\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
miniSi
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
miniSi
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
miniSi
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
Téléchargement