algr 4 pcc origine unique - laboratoire d'informatique de...
TRANSCRIPT
Plus courts chemin
Théorie des graphes Cours de Lélia Blin3eme année de Licence
1
Lélia Blin Algorithmique des graphes
Plus court chemin
❖ Graphes valués (Pondérés) ❖ Chaque arête e est associée à une
valeur, appelée souvent son poids❖ Notation: w(e).
2
Lélia Blin Algorithmique des graphes
Modélisation
❖ La valuation des arêtes peut représenter ❖ Des coûts de transit, ❖ Des distances kilométriques,❖ Des temps de transit,❖ ...
3
Lélia Blin Algorithmique des graphes
Généralisation
❖ Le graphe ci-contre peut être valué avec les temps de voyage en voitures entre 2 villes.
4
Lélia Blin Algorithmique des graphes
Définition: Graphe valué
❖ On note G=(V,A,w) un graphe simple non orienté valué. V est l’ensemble des sommets du graphe, A l’ensemble des arcs et w une fonction de pondération A→R qui fait correspondre à chaque arc un poids à valeur réelle.
5
Lélia Blin Algorithmique des graphes
Longueur d’un chemin
❖La longueur du chemin p = ⟨v0, v1, . . . , vk⟩ est la somme des poids (longueurs) des arcs qui le constituent
Chapitre 24
Plus courts cheminsà origine unique
Un automobiliste souhaite trouver le plus court chemin possible entre Strasbourg etBordeaux. Étant donnée une carte routière de France, avec les distances de chaqueportion de route, comment peut-il déterminer la route la plus courte ?
Un possibilité consiste à énumérer toutes les routes de Strasbourg à Bordeaux, ad-ditionner les distances de chacune puis choisir la plus courte. Toutefois, on s’aperçoitrapidement que, même en n’autorisant pas les routes qui contiennent des cycles, ilexiste des millions de possibilités, dont la plupart ne valent même pas la peine d’êtreconsidérées. Par exemple, une route allant de Strasbourg à Bordeaux en passant parLille est manifestement une mauvaise option, Lille faisant faire un détour de plusieurscentaines de kilomètres.
Dans ce chapitre, ainsi que dans le chapitre 25, nous allons montrer comment ré-soudre efficacement ce type de problèmes. Dans un problème de plus courts che-mins, on possède en entrée un graphe orienté pondéré G = (S, A), avec une fonctionde pondération w : A → R qui fait correspondre à chaque arc un poids à valeur réelle.La longueur du chemin p = ⟨v0, v1, . . . , vk⟩ est la somme des poids (longueurs) desarcs qui le constituent :
w(p) =k!
i=1
w(vi−1, vi) .
On définit la longueur du plus court chemin entre u et v par
d(u, v) ="
min{w(p) : up! v} s’il existe un chemin de u à v ,
∞ sinon .
c ⃝D
unod
–L
aph
otoc
opie
non
auto
risé
ees
tun
délit
Dans ce qui suit nous appellerons le poids d'un chemin sa longueur.
6
Lélia Blin Algorithmique des graphes
Plus court chemin
❖ Le plus court chemin entre 2 sommets u et v est défini comme le chemin de plus faible poids reliant u et v.
Chapitre 24
Plus courts cheminsà origine unique
Un automobiliste souhaite trouver le plus court chemin possible entre Strasbourg etBordeaux. Étant donnée une carte routière de France, avec les distances de chaqueportion de route, comment peut-il déterminer la route la plus courte ?
Un possibilité consiste à énumérer toutes les routes de Strasbourg à Bordeaux, ad-ditionner les distances de chacune puis choisir la plus courte. Toutefois, on s’aperçoitrapidement que, même en n’autorisant pas les routes qui contiennent des cycles, ilexiste des millions de possibilités, dont la plupart ne valent même pas la peine d’êtreconsidérées. Par exemple, une route allant de Strasbourg à Bordeaux en passant parLille est manifestement une mauvaise option, Lille faisant faire un détour de plusieurscentaines de kilomètres.
Dans ce chapitre, ainsi que dans le chapitre 25, nous allons montrer comment ré-soudre efficacement ce type de problèmes. Dans un problème de plus courts che-mins, on possède en entrée un graphe orienté pondéré G = (S, A), avec une fonctionde pondération w : A → R qui fait correspondre à chaque arc un poids à valeur réelle.La longueur du chemin p = ⟨v0, v1, . . . , vk⟩ est la somme des poids (longueurs) desarcs qui le constituent :
w(p) =k!
i=1
w(vi−1, vi) .
On définit la longueur du plus court chemin entre u et v par
d(u, v) ="
min{w(p) : up! v} s’il existe un chemin de u à v ,
∞ sinon .
c ⃝D
unod
–L
aph
otoc
opie
non
auto
risé
ees
tun
délit
7
Lélia Blin Algorithmique des graphes
Formalisation
❖ Soit G=(V,A,w) un graphe orienté avec des coûts (poids) sur ses arcs.
❖ On note wij le coût de l’arc (i,j)
❖ Définition:
❖ Le coût ou longueur d’un chemin est la somme du coût de ses arcs
❖ Définition:
❖ Un chemin est dit élémentaire s’il ne passe pas deux fois par le même sommet
8
Lélia Blin Algorithmique des graphes
Problèmes
A.Etant donné deux sommets s et t, trouver un plus court chemin (chemin de coût minimal) de s à t.
B.Etant donné un sommet de départ s, trouver un plus court chemin de s vers tout autre sommet
C.Trouver un plus court chemin entre tout couple de sommets
9
Lélia Blin Algorithmique des graphes
Remarques
❖ Un algorithme pour le problème A peut servir à résoudre
❖ le problème B et le problème C
❖ le problème B peut servir à résoudre
❖ le problème A et le problème C
10
Lélia Blin
Plus courts chemin à origine unique
Théorie des graphes Cours de Lélia Blin3eme année de Licence
11
Lélia Blin Algorithmique des graphes
Circuit absorbant
❖ Définition:
❖ On appelle circuit absorbant un circuit de coût strictement négatif
❖ Proposition:
❖ Il existe un plus court chemin depuis un sommet s jusqu’à tout sommet k si et seulement si il n’existe pas de circuits absorbants dans le graphe.
12
Lélia Blin Algorithmique des graphes
Circuit absorbant exemple
s 1 2 t3
-6
2
4
d(1)=∞ d(2)=∞ d(t)=∞d(s)=0
13
Lélia Blin Algorithmique des graphes
Circuit absorbant: Exemple
s 1 2 t3
-6
2
4
d(1)=3 d(2)=∞ d(t)=∞d(s)=0
14
Lélia Blin Algorithmique des graphes
Circuit absorbant: Exemple
s 1 2 t3
-6
2
4
d(1)=3 d(2)=5 d(t)=∞d(s)=0
15
Lélia Blin Algorithmique des graphes
Circuit absorbant: Exemple
s 1 2 t3
-6
2
4
d(1)=-1 d(2)=5 d(t)=9d(s)=0
16
Lélia Blin Algorithmique des graphes
Circuit absorbant: Exemple
s 1 2 t3
-6
2
4
d(1)=-1 d(2)=1 d(t)=9d(s)=0
17
Lélia Blin Algorithmique des graphes
Circuit absorbant: Exemple
s 1 2 t3
-6
2
4
d(1)=-5 d(2)=1 d(t)=5d(s)=0
18
Lélia Blin Algorithmique des graphes
Circuit absorbant: Exemple
s 1 2 t3
-6
2
4
d(1)=-5 d(2)=-3 d(t)=5d(s)=0
19
Lélia Blin Algorithmique des graphes
Circuit absorbant: Exemple
s 1 2 t3
-6
2
4
d(1)=-5 d(2)=-3 d(t)=1d(s)=0
20
Lélia Blin Algorithmique des graphes
Représentation des plus courts chemins
❖On souhaite:❖ Calculer les poids des plus courts chemins, ❖Donner les sommets présents sur ces plus courts
chemins❖ Étant donné un graphe G = (S, A,w), ❖ On gère pour chaque sommet v ∈ S un prédécesseur π[v]
❖π[v] est soit un autre sommet, soit NIL. ❖On utilisera la fonction IMPRIMER-CHEMIN pour
afficher tout les sommets:
21
Lélia Blin Algorithmique des graphes
Représentation des plus courts chemins
524 22 • Algorithmes élémentaires pour les graphes
IMPRIMER-CHEMIN(G, s, v)1 si v = s2 alors imprimer s3 sinon si p[v] = NIL
4 alors imprimer " il n’existe aucun chemin de " s " à " v5 sinon IMPRIMER-CHEMIN(G, s, p[v])6 imprimer v
Le temps d’exécution de cette procédure est linéaire par rapport au nombre de som-mets du chemin imprimés, puisque chaque appel récursif s’applique à un chemin pluscourt d’un sommet.
Exercices
22.2.1 Donner les valeurs d et p d’un parcours en largeur sur le graphe orienté de la fi-gure 22.2(a), en prenant pour origine le sommet 3.
22.2.2 Donner les valeurs d et p qui résultent d’un parcours en largeur du graphe non orientéde la figure 22.3, en prenant pour origine le sommet u.
22.2.3 Quel est le temps d’exécution de PL si son graphe d’entrée est représenté par unematrice d’adjacences et que l’algorithme est modifié pour gérer ce type d’entrée ?
22.2.4 Montrer que, dans un parcours en largeur, la valeur d[u] affectée à un sommet u estindépendante de l’ordre dans lequel les sommets apparaissent dans chaque liste d’adjacences.En prenant comme exemple la figure 22.3, montrer que l’arborescence de parcours en largeurcalculée par PL peut dépendre de l’ordre au sein des listes d’adjacences.
22.2.5 Donner un exemple de graphe orienté G = (S, A), de sommet origine s ∈ S et d’en-semble de trois arcs Ap ⊆ A tels que, pour chaque sommet v ∈ S, le chemin unique dans Ap
de s à v soit un plus court chemin dans G, sans que l’ensemble d’arcs Ap puisse être obtenuen exécutant PL sur G, quel que soit l’ordre des sommets dans chaque liste d’adjacences.
22.2.6 Il existe deux types de catcheurs : les « bons » et les « méchants ». Entre deux cat-cheurs donnés, il peut ou non y avoir une rivalité. Supposez que l’on ait n catcheurs et uneliste de r paires de catcheurs telle qu’il y ait rivalité entre les deux membres de chaque paire.Donner un algorithme à temps (n + r) qui détermine s’il est possible de désigner certains cat-cheurs comme étant les bons et les autres comme étant les méchants, de telle sorte que chaquerivalité oppose un bon à un méchant. S’il est possible de faire ce genre de classification, votrealgorithme doit la calculer.
22.2.7 ⋆ Le diamètre d’une arborescence T = (S, A) est donné par
maxu,v∈S
d(u, v) ;
autrement dit, le diamètre est la plus grande de toutes les distances de plus court chemindans l’arborescence. Donner un algorithme efficace permettant de calculer le diamètre d’unearborescence, et analyser son temps d’exécution.
22
Lélia Blin Algorithmique des graphes
Relâchement
❖ Pour chaque sommet v ∈ S, on gère un attribut d[v] ❖ d[v] est un majorant de la longueur d’un plus court
chemin entre l’origine s et v. ❖ On appelle d[v] une estimation de plus court chemin. ❖ On initialise les estimations et les prédécesseurs via la
procédure SOURCE-UNIQUE-INITIALISATION(G, s) Procédure en temps Θ(S).
23
Lélia Blin Algorithmique des graphes
Relâchement
568 24 • Plus courts chemins à origine unique
depuis s. Une arborescence de plus courts chemins ressemble aux arborescences deparcours en largeur vus à la section 22.2, mais les plus courts chemins à partir deson origine sont exprimés non pas en fonction du nombre d’arcs, mais du poids desarcs. Plus précisément, soit G = (S, A) un graphe orienté pondéré, et une fonctionde pondération associée w : A → R. On suppose que G ne contient aucun circuit delongueur strictement négative accessible depuis le sommet origine s ∈ S, de sorte queles plus courts chemins sont bien définis. Une arborescence de plus courts cheminsde racine s est un sous-graphe orienté G′ = (S′, A′), où S′ ⊆ S et A′ ⊆ A, tel que
1) S′ est l’ensemble des sommets accessibles à partir de s dans G,
2) G′ forme une arborescence de racine s, et
3) pour tout v ∈ S′, le chemin unique de s à v dans G′ est un plus court chemin de svers v dans G.
Les plus courts chemins ne sont pas forcément uniques, pas plus que les arbores-cences de plus courts chemins. Par exemple, la figure 24.2 montre un graphe orientépondéré et deux arborescences de plus courts chemins ayant la même racine.
(a) (b) (c)
0
6
6
7212 43
5 3
s
t x
y z
3 9
5 11
0
6
6
7212 43
5 3
s
t x
y z
3 9
5 11
0
6
6
7212 43
5 3
s
t x
y z
3 9
5 11
Figure 24.2 (a) Un graphe orienté pondéré avec des poids des plus courts chemins à partir del’origine s. (b) Les arcs en gris forment une arborescence de plus courts chemins de racine s.(c) Une autre arborescence de plus courts chemins de même racine.
f) Relâchement
Les algorithmes de ce chapitre emploient la technique du relâchement. Pour chaquesommet v ∈ S, on gère un attribut d[v] qui est un majorant de la longueur d’un pluscourt chemin entre l’origine s et v. On appelle d[v] une estimation de plus courtchemin. On initialise les estimations et les prédécesseurs via la procédure en tempsQ(S) que voici.
SOURCE-UNIQUE-INITIALISATION(G, s)1 pour chaque sommet v ∈ S[G]2 faire d[v] ← ∞3 p[v] ← NIL
4 d[s] ← 0
Après initialisation, p[v] = NIL pour tout v ∈ S, d[s] = 0 et d[v] = ∞ pourv ∈ S − {s}.
24
Lélia Blin Algorithmique des graphes
Relâchement
❖ Le processus de relâchement d’un arc (u, v) consiste à ❖ Tester si l’on peut améliorer le plus court chemin vers
v trouvé jusqu’ici en passant par u, ❖ Si tel est le cas, actualisé d[v] et π[v].
❖ Une étape de relâchement peut ❖ Diminuer la valeur de l’estimation de plus court
chemin d[v] ❖ Mettre à jour le champ prédécesseur π[v] de v.
25
Lélia Blin Algorithmique des graphes
Relâchement
Plus courts chemins à origine unique 569
Le processus de relâchement (1) d’un arc (u, v) consiste à tester si l’on peut amé-liorer le plus court chemin vers v trouvé jusqu’ici en passant par u et, si tel est lecas, en actualisant d[v] et p[v]. Une étape de relâchement peut diminuer la valeur del’estimation de plus court chemin d[v] et mettre à jour le champ prédécesseur p[v] dev. Le code suivant effectue une étape de relâchement sur l’arc (u, v).
RELÂCHER(u, v, w)1 si d[v] > d[u] + w(u, v)2 alors d[v] ← d[u] + w(u, v)3 p[v] ← u
La figure 24.3 montre deux exemples de relâchement d’arc, un dans lequel l’estima-tion de plus court chemin diminue et un autre dans lequel il n’y a pas modification del’estimation.
u v
5 92
u v
5 72
RELÂCHER(u,v,w)
(a) (b)
u v
5 62
u v
5 62
(u,v,w)RELÂCHER
Figure 24.3 Relâchement d’un arc (u, v) de poids w(u, v) = 2. L’estimation de plus court cheminde chaque sommet est affichée dans le sommet. (a) Comme d[v] > d[u] + w(u, v) avant relâche-ment, la valeur de d[v] décroît. (b) Ici, d[v] d[u] + w(u, v) avant l’étape de relâchement, de sorteque d[v] ne change pas avec le relâchement.
Chaque algorithme de ce chapitre appelle SOURCE-UNIQUE-INITIALISATION,puis relâche les arcs de manière réitérée. En outre, le relâchement est la seule façon demodifier les estimations de plus court chemin et les prédécesseurs. Les algorithmesde ce chapitre diffèrent par le nombre de fois qu’ils relâchent chaque arc et par l’ordredans lequel ils relâchent les arcs. Dans l’algorithme de Dijkstra et dans l’algorithmede plus court chemin pour graphe sans circuit orienté, chaque arc est relâché une foiset une seule. Dans l’algorithme de Bellman-Ford, chaque arc est relâché plusieursfois.
g) Propriétés de plus courts chemins et relâchement
Pour prouver la conformité des algorithmes de ce chapitre, nous ferons appel à plu-sieurs propriétés des plus courts chemins et au relâchement. Nous énoncerons ces
(1) Il peut paraître étrange que le terme « relâchement » désigne une opération qui affine un majorant. Celatient à des raisons historiques. Le résultat d’une étape de relâchement peut être vu comme un relâchement dela contrainte d[v] d[u] + w(u, v), ce qui, d’après l’inégalité triangulaire (lemme 24.10), est forcément vraisi d[u] = d(s, u) et d[v] = d(s, v). En d’autres termes, si d[v] d[u] + w(u, v), il n’y a pas de « pression » poursatisfaire à cette contrainte, de sorte que la contrainte est « relâchée ».c ⃝
Dun
od–
La
phot
ocop
ieno
nau
tori
sée
estu
ndé
lit
26
Lélia Blin
L’algorithme de Bellman-Ford
Théorie des graphes Cours de Lélia Blin3eme année de Licence
27
Lélia Blin Algorithmique des graphes
Algorithme de Bellman-Ford❖ L’algorithme de Bellman-Ford résout le problème des plus
courts chemins à origine unique dans le cas général où les poids d’arc peuvent avoir des valeurs négatives.
❖ Étant donné un graphe orienté pondéré G = (S, A,w), et une origine s.
❖ L’algorithme de Bellman-Ford retourne une valeur booléenne indiquant s’il existe ou non un circuit de longueur strictement négative accessible à partir de s.
❖ Si un tel circuit n’existe pas, l’algorithme donne les plus courts chemins ainsi que leurs poids.
28
Lélia Blin Algorithmique des graphes
Algorithme de Ford-Bellman
24.1 Algorithme de Bellman-Ford 571
Notre analyse reposera sur quelques conventions permettant d’effectuer desopérations arithmétiques avec les infinis. On supposera que, pour un nombre réela fi −∞ quelconque, on a a + (+∞) = (+∞) + a = +∞. D’autre part, pour queles démonstrations restent valables en présence de circuits de longueur strictementnégative, on fera l’hypothèse que, pour un nombre réel a fi +∞ quelconque,a + (−∞) = (−∞) + a = −∞.
Tous les algorithmes de ce chapitre supposent que le graphe orienté G est repré-senté par des listes d’adjacences. En outre, le poids d’un arc est stocké avec l’arc ;ainsi, quand on parcourt chaque liste d’adjacences, on peut déterminer les poids d’arcavec un temps de O(1) par arc.
24.1 ALGORITHME DE BELLMAN-FORD
L’algorithme de Bellman-Ford résout le problème des plus courts chemins à ori-gine unique dans le cas général où les poids d’arc peuvent avoir des valeurs néga-tives. Étant donné un graphe orienté pondéré G = (S, A), de fonction de pondérationw : A → R, et une origine s, l’algorithme de Bellman-Ford retourne une valeurbooléenne indiquant s’il existe ou non un circuit de longueur strictement négative ac-cessible à partir de s. Si un tel circuit n’existe pas, l’algorithme donne les plus courtschemins ainsi que leurs poids.
L’algorithme utilise la technique du relâchement, diminuant progressivement uneestimation d[v] du poids d’un plus court chemin depuis l’origine s vers chaque som-met v ∈ S jusqu’à atteindre la valeur réelle du poids de plus court chemin, d(s, v).L’algorithme retourne VRAI si et seulement si le graphe ne contient aucun circuit delongueur strictement négative accessible depuis l’origine.
BELLMAN-FORD(G, w, s)1 SOURCE-UNIQUE-INITIALISATION(G, s)2 pour i ← 1 à |S[G]|− 13 faire pour chaque arc (u, v) ∈ A[G]4 faire RELÂCHER(u, v, w)5 pour chaque arc (u, v) ∈ A[G]6 faire si d[v] > d[u] + w(u, v)7 alors retourner FAUX
8 retourner VRAI
La figure 24.4 montre comment l’exécution de l’algorithme de Bellman-Ford fonc-tionne sur un graphe de 5 sommets. Après l’initialisation des valeurs d et p detous les sommets en ligne 1, l’algorithme effectue |S| − 1 passages sur les arcs dugraphe. Chaque passage correspond à une itération de la boucle pour des lignes 2–4et consiste à relâcher chaque arc du graphe une seule fois. Les figures 24.4(b)–(e)montrent l’état de l’algorithme après chacun des quatre passages. Après les |S| − 1c ⃝
Dun
od–
La
phot
ocop
ieno
nau
tori
sée
estu
ndé
lit
29
Lélia Blin Algorithmique des graphes
Exemple
24.1 Algorithme de Bellman-Ford 571
Notre analyse reposera sur quelques conventions permettant d’effectuer desopérations arithmétiques avec les infinis. On supposera que, pour un nombre réela fi −∞ quelconque, on a a + (+∞) = (+∞) + a = +∞. D’autre part, pour queles démonstrations restent valables en présence de circuits de longueur strictementnégative, on fera l’hypothèse que, pour un nombre réel a fi +∞ quelconque,a + (−∞) = (−∞) + a = −∞.
Tous les algorithmes de ce chapitre supposent que le graphe orienté G est repré-senté par des listes d’adjacences. En outre, le poids d’un arc est stocké avec l’arc ;ainsi, quand on parcourt chaque liste d’adjacences, on peut déterminer les poids d’arcavec un temps de O(1) par arc.
24.1 ALGORITHME DE BELLMAN-FORD
L’algorithme de Bellman-Ford résout le problème des plus courts chemins à ori-gine unique dans le cas général où les poids d’arc peuvent avoir des valeurs néga-tives. Étant donné un graphe orienté pondéré G = (S, A), de fonction de pondérationw : A → R, et une origine s, l’algorithme de Bellman-Ford retourne une valeurbooléenne indiquant s’il existe ou non un circuit de longueur strictement négative ac-cessible à partir de s. Si un tel circuit n’existe pas, l’algorithme donne les plus courtschemins ainsi que leurs poids.
L’algorithme utilise la technique du relâchement, diminuant progressivement uneestimation d[v] du poids d’un plus court chemin depuis l’origine s vers chaque som-met v ∈ S jusqu’à atteindre la valeur réelle du poids de plus court chemin, d(s, v).L’algorithme retourne VRAI si et seulement si le graphe ne contient aucun circuit delongueur strictement négative accessible depuis l’origine.
BELLMAN-FORD(G, w, s)1 SOURCE-UNIQUE-INITIALISATION(G, s)2 pour i ← 1 à |S[G]|− 13 faire pour chaque arc (u, v) ∈ A[G]4 faire RELÂCHER(u, v, w)5 pour chaque arc (u, v) ∈ A[G]6 faire si d[v] > d[u] + w(u, v)7 alors retourner FAUX
8 retourner VRAI
La figure 24.4 montre comment l’exécution de l’algorithme de Bellman-Ford fonc-tionne sur un graphe de 5 sommets. Après l’initialisation des valeurs d et p detous les sommets en ligne 1, l’algorithme effectue |S| − 1 passages sur les arcs dugraphe. Chaque passage correspond à une itération de la boucle pour des lignes 2–4et consiste à relâcher chaque arc du graphe une seule fois. Les figures 24.4(b)–(e)montrent l’état de l’algorithme après chacun des quatre passages. Après les |S| − 1c ⃝
Dun
od–
La
phot
ocop
ieno
nau
tori
sée
estu
ndé
lit
A B C D E
0 ∞ ∞ ∞ ∞
#1 0 ∞ ∞ ∞ ∞
#2
#3
#4
#5
#6
#7
#8
i=1
A
B
E
C D
-1
4
31
2
5
-3
2#4 #1
#2
#6
#5
#7
#8
#3
30
Lélia Blin Algorithmique des graphes
Exemple
A B C D E
0 ∞ ∞ ∞ ∞
#1 0 ∞ ∞ ∞ ∞
#2 0 ∞ ∞ ∞ ∞
#3
#4
#5
#6
#7
#8
i=1
A
B
E
C D
-1
4
31
2
5
-3
2#4 #1
#2
#6
#5
#7
#8
#3
24.1 Algorithme de Bellman-Ford 571
Notre analyse reposera sur quelques conventions permettant d’effectuer desopérations arithmétiques avec les infinis. On supposera que, pour un nombre réela fi −∞ quelconque, on a a + (+∞) = (+∞) + a = +∞. D’autre part, pour queles démonstrations restent valables en présence de circuits de longueur strictementnégative, on fera l’hypothèse que, pour un nombre réel a fi +∞ quelconque,a + (−∞) = (−∞) + a = −∞.
Tous les algorithmes de ce chapitre supposent que le graphe orienté G est repré-senté par des listes d’adjacences. En outre, le poids d’un arc est stocké avec l’arc ;ainsi, quand on parcourt chaque liste d’adjacences, on peut déterminer les poids d’arcavec un temps de O(1) par arc.
24.1 ALGORITHME DE BELLMAN-FORD
L’algorithme de Bellman-Ford résout le problème des plus courts chemins à ori-gine unique dans le cas général où les poids d’arc peuvent avoir des valeurs néga-tives. Étant donné un graphe orienté pondéré G = (S, A), de fonction de pondérationw : A → R, et une origine s, l’algorithme de Bellman-Ford retourne une valeurbooléenne indiquant s’il existe ou non un circuit de longueur strictement négative ac-cessible à partir de s. Si un tel circuit n’existe pas, l’algorithme donne les plus courtschemins ainsi que leurs poids.
L’algorithme utilise la technique du relâchement, diminuant progressivement uneestimation d[v] du poids d’un plus court chemin depuis l’origine s vers chaque som-met v ∈ S jusqu’à atteindre la valeur réelle du poids de plus court chemin, d(s, v).L’algorithme retourne VRAI si et seulement si le graphe ne contient aucun circuit delongueur strictement négative accessible depuis l’origine.
BELLMAN-FORD(G, w, s)1 SOURCE-UNIQUE-INITIALISATION(G, s)2 pour i ← 1 à |S[G]|− 13 faire pour chaque arc (u, v) ∈ A[G]4 faire RELÂCHER(u, v, w)5 pour chaque arc (u, v) ∈ A[G]6 faire si d[v] > d[u] + w(u, v)7 alors retourner FAUX
8 retourner VRAI
La figure 24.4 montre comment l’exécution de l’algorithme de Bellman-Ford fonc-tionne sur un graphe de 5 sommets. Après l’initialisation des valeurs d et p detous les sommets en ligne 1, l’algorithme effectue |S| − 1 passages sur les arcs dugraphe. Chaque passage correspond à une itération de la boucle pour des lignes 2–4et consiste à relâcher chaque arc du graphe une seule fois. Les figures 24.4(b)–(e)montrent l’état de l’algorithme après chacun des quatre passages. Après les |S| − 1c ⃝
Dun
od–
La
phot
ocop
ieno
nau
tori
sée
estu
ndé
lit
31
Lélia Blin Algorithmique des graphes
Exemple
A B C D E
0 ∞ ∞ ∞ ∞
#1 0 ∞ ∞ ∞ ∞
#2 0 ∞ ∞ ∞ ∞
#3 0 ∞ ∞ ∞ ∞
#4
#5
#6
#7
#8
i=1
A
B
E
C D
-1
4
31
2
5
-3
2#4 #1
#2
#6
#5
#7
#8
#3
24.1 Algorithme de Bellman-Ford 571
Notre analyse reposera sur quelques conventions permettant d’effectuer desopérations arithmétiques avec les infinis. On supposera que, pour un nombre réela fi −∞ quelconque, on a a + (+∞) = (+∞) + a = +∞. D’autre part, pour queles démonstrations restent valables en présence de circuits de longueur strictementnégative, on fera l’hypothèse que, pour un nombre réel a fi +∞ quelconque,a + (−∞) = (−∞) + a = −∞.
Tous les algorithmes de ce chapitre supposent que le graphe orienté G est repré-senté par des listes d’adjacences. En outre, le poids d’un arc est stocké avec l’arc ;ainsi, quand on parcourt chaque liste d’adjacences, on peut déterminer les poids d’arcavec un temps de O(1) par arc.
24.1 ALGORITHME DE BELLMAN-FORD
L’algorithme de Bellman-Ford résout le problème des plus courts chemins à ori-gine unique dans le cas général où les poids d’arc peuvent avoir des valeurs néga-tives. Étant donné un graphe orienté pondéré G = (S, A), de fonction de pondérationw : A → R, et une origine s, l’algorithme de Bellman-Ford retourne une valeurbooléenne indiquant s’il existe ou non un circuit de longueur strictement négative ac-cessible à partir de s. Si un tel circuit n’existe pas, l’algorithme donne les plus courtschemins ainsi que leurs poids.
L’algorithme utilise la technique du relâchement, diminuant progressivement uneestimation d[v] du poids d’un plus court chemin depuis l’origine s vers chaque som-met v ∈ S jusqu’à atteindre la valeur réelle du poids de plus court chemin, d(s, v).L’algorithme retourne VRAI si et seulement si le graphe ne contient aucun circuit delongueur strictement négative accessible depuis l’origine.
BELLMAN-FORD(G, w, s)1 SOURCE-UNIQUE-INITIALISATION(G, s)2 pour i ← 1 à |S[G]|− 13 faire pour chaque arc (u, v) ∈ A[G]4 faire RELÂCHER(u, v, w)5 pour chaque arc (u, v) ∈ A[G]6 faire si d[v] > d[u] + w(u, v)7 alors retourner FAUX
8 retourner VRAI
La figure 24.4 montre comment l’exécution de l’algorithme de Bellman-Ford fonc-tionne sur un graphe de 5 sommets. Après l’initialisation des valeurs d et p detous les sommets en ligne 1, l’algorithme effectue |S| − 1 passages sur les arcs dugraphe. Chaque passage correspond à une itération de la boucle pour des lignes 2–4et consiste à relâcher chaque arc du graphe une seule fois. Les figures 24.4(b)–(e)montrent l’état de l’algorithme après chacun des quatre passages. Après les |S| − 1c ⃝
Dun
od–
La
phot
ocop
ieno
nau
tori
sée
estu
ndé
lit
32
Lélia Blin Algorithmique des graphes
Exemple
A B C D E
0 ∞ ∞ ∞ ∞
#1 0 ∞ ∞ ∞ ∞
#2 0 ∞ ∞ ∞ ∞
#3 0 ∞ ∞ ∞ ∞
#4 0 -1 ∞ ∞ ∞
#5
#6
#7
#8
-1
i=1
A
B
E
C D
-1
4
31
2
5
-3
2#4 #1
#2
#6
#5
#7
#8
#3
24.1 Algorithme de Bellman-Ford 571
Notre analyse reposera sur quelques conventions permettant d’effectuer desopérations arithmétiques avec les infinis. On supposera que, pour un nombre réela fi −∞ quelconque, on a a + (+∞) = (+∞) + a = +∞. D’autre part, pour queles démonstrations restent valables en présence de circuits de longueur strictementnégative, on fera l’hypothèse que, pour un nombre réel a fi +∞ quelconque,a + (−∞) = (−∞) + a = −∞.
Tous les algorithmes de ce chapitre supposent que le graphe orienté G est repré-senté par des listes d’adjacences. En outre, le poids d’un arc est stocké avec l’arc ;ainsi, quand on parcourt chaque liste d’adjacences, on peut déterminer les poids d’arcavec un temps de O(1) par arc.
24.1 ALGORITHME DE BELLMAN-FORD
L’algorithme de Bellman-Ford résout le problème des plus courts chemins à ori-gine unique dans le cas général où les poids d’arc peuvent avoir des valeurs néga-tives. Étant donné un graphe orienté pondéré G = (S, A), de fonction de pondérationw : A → R, et une origine s, l’algorithme de Bellman-Ford retourne une valeurbooléenne indiquant s’il existe ou non un circuit de longueur strictement négative ac-cessible à partir de s. Si un tel circuit n’existe pas, l’algorithme donne les plus courtschemins ainsi que leurs poids.
L’algorithme utilise la technique du relâchement, diminuant progressivement uneestimation d[v] du poids d’un plus court chemin depuis l’origine s vers chaque som-met v ∈ S jusqu’à atteindre la valeur réelle du poids de plus court chemin, d(s, v).L’algorithme retourne VRAI si et seulement si le graphe ne contient aucun circuit delongueur strictement négative accessible depuis l’origine.
BELLMAN-FORD(G, w, s)1 SOURCE-UNIQUE-INITIALISATION(G, s)2 pour i ← 1 à |S[G]|− 13 faire pour chaque arc (u, v) ∈ A[G]4 faire RELÂCHER(u, v, w)5 pour chaque arc (u, v) ∈ A[G]6 faire si d[v] > d[u] + w(u, v)7 alors retourner FAUX
8 retourner VRAI
La figure 24.4 montre comment l’exécution de l’algorithme de Bellman-Ford fonc-tionne sur un graphe de 5 sommets. Après l’initialisation des valeurs d et p detous les sommets en ligne 1, l’algorithme effectue |S| − 1 passages sur les arcs dugraphe. Chaque passage correspond à une itération de la boucle pour des lignes 2–4et consiste à relâcher chaque arc du graphe une seule fois. Les figures 24.4(b)–(e)montrent l’état de l’algorithme après chacun des quatre passages. Après les |S| − 1c ⃝
Dun
od–
La
phot
ocop
ieno
nau
tori
sée
estu
ndé
lit
33
Lélia Blin Algorithmique des graphes
Exemple
A B C D E
0 ∞ ∞ ∞ ∞
#1 0 ∞ ∞ ∞ ∞
#2 0 ∞ ∞ ∞ ∞
#3 0 ∞ ∞ ∞ ∞
#4 0 -1 ∞ ∞ ∞
#5 0 -1 4 ∞ ∞
#6
#7
#8
-1
4
i=1
A
B
E
C D
-1
4
31
2
5
-3
2#4 #1
#2
#6
#5
#7
#8
#3
24.1 Algorithme de Bellman-Ford 571
Notre analyse reposera sur quelques conventions permettant d’effectuer desopérations arithmétiques avec les infinis. On supposera que, pour un nombre réela fi −∞ quelconque, on a a + (+∞) = (+∞) + a = +∞. D’autre part, pour queles démonstrations restent valables en présence de circuits de longueur strictementnégative, on fera l’hypothèse que, pour un nombre réel a fi +∞ quelconque,a + (−∞) = (−∞) + a = −∞.
Tous les algorithmes de ce chapitre supposent que le graphe orienté G est repré-senté par des listes d’adjacences. En outre, le poids d’un arc est stocké avec l’arc ;ainsi, quand on parcourt chaque liste d’adjacences, on peut déterminer les poids d’arcavec un temps de O(1) par arc.
24.1 ALGORITHME DE BELLMAN-FORD
L’algorithme de Bellman-Ford résout le problème des plus courts chemins à ori-gine unique dans le cas général où les poids d’arc peuvent avoir des valeurs néga-tives. Étant donné un graphe orienté pondéré G = (S, A), de fonction de pondérationw : A → R, et une origine s, l’algorithme de Bellman-Ford retourne une valeurbooléenne indiquant s’il existe ou non un circuit de longueur strictement négative ac-cessible à partir de s. Si un tel circuit n’existe pas, l’algorithme donne les plus courtschemins ainsi que leurs poids.
L’algorithme utilise la technique du relâchement, diminuant progressivement uneestimation d[v] du poids d’un plus court chemin depuis l’origine s vers chaque som-met v ∈ S jusqu’à atteindre la valeur réelle du poids de plus court chemin, d(s, v).L’algorithme retourne VRAI si et seulement si le graphe ne contient aucun circuit delongueur strictement négative accessible depuis l’origine.
BELLMAN-FORD(G, w, s)1 SOURCE-UNIQUE-INITIALISATION(G, s)2 pour i ← 1 à |S[G]|− 13 faire pour chaque arc (u, v) ∈ A[G]4 faire RELÂCHER(u, v, w)5 pour chaque arc (u, v) ∈ A[G]6 faire si d[v] > d[u] + w(u, v)7 alors retourner FAUX
8 retourner VRAI
La figure 24.4 montre comment l’exécution de l’algorithme de Bellman-Ford fonc-tionne sur un graphe de 5 sommets. Après l’initialisation des valeurs d et p detous les sommets en ligne 1, l’algorithme effectue |S| − 1 passages sur les arcs dugraphe. Chaque passage correspond à une itération de la boucle pour des lignes 2–4et consiste à relâcher chaque arc du graphe une seule fois. Les figures 24.4(b)–(e)montrent l’état de l’algorithme après chacun des quatre passages. Après les |S| − 1c ⃝
Dun
od–
La
phot
ocop
ieno
nau
tori
sée
estu
ndé
lit
34
Lélia Blin Algorithmique des graphes
Exemple
A B C D E
0 ∞ ∞ ∞ ∞
#1 0 ∞ ∞ ∞ ∞
#2 0 ∞ ∞ ∞ ∞
#3 0 ∞ ∞ ∞ ∞
#4 0 -1 ∞ ∞ ∞
#5 0 -1 4 ∞ ∞
#6 0 -1 ∞ ∞
#7
#8
i=1
-1
2
A
B
E
C D
-1
4
31
2
5
-3
2#4 #1
#2
#6
#5
#7
#8
#3
24.1 Algorithme de Bellman-Ford 571
Notre analyse reposera sur quelques conventions permettant d’effectuer desopérations arithmétiques avec les infinis. On supposera que, pour un nombre réela fi −∞ quelconque, on a a + (+∞) = (+∞) + a = +∞. D’autre part, pour queles démonstrations restent valables en présence de circuits de longueur strictementnégative, on fera l’hypothèse que, pour un nombre réel a fi +∞ quelconque,a + (−∞) = (−∞) + a = −∞.
Tous les algorithmes de ce chapitre supposent que le graphe orienté G est repré-senté par des listes d’adjacences. En outre, le poids d’un arc est stocké avec l’arc ;ainsi, quand on parcourt chaque liste d’adjacences, on peut déterminer les poids d’arcavec un temps de O(1) par arc.
24.1 ALGORITHME DE BELLMAN-FORD
L’algorithme de Bellman-Ford résout le problème des plus courts chemins à ori-gine unique dans le cas général où les poids d’arc peuvent avoir des valeurs néga-tives. Étant donné un graphe orienté pondéré G = (S, A), de fonction de pondérationw : A → R, et une origine s, l’algorithme de Bellman-Ford retourne une valeurbooléenne indiquant s’il existe ou non un circuit de longueur strictement négative ac-cessible à partir de s. Si un tel circuit n’existe pas, l’algorithme donne les plus courtschemins ainsi que leurs poids.
L’algorithme utilise la technique du relâchement, diminuant progressivement uneestimation d[v] du poids d’un plus court chemin depuis l’origine s vers chaque som-met v ∈ S jusqu’à atteindre la valeur réelle du poids de plus court chemin, d(s, v).L’algorithme retourne VRAI si et seulement si le graphe ne contient aucun circuit delongueur strictement négative accessible depuis l’origine.
BELLMAN-FORD(G, w, s)1 SOURCE-UNIQUE-INITIALISATION(G, s)2 pour i ← 1 à |S[G]|− 13 faire pour chaque arc (u, v) ∈ A[G]4 faire RELÂCHER(u, v, w)5 pour chaque arc (u, v) ∈ A[G]6 faire si d[v] > d[u] + w(u, v)7 alors retourner FAUX
8 retourner VRAI
La figure 24.4 montre comment l’exécution de l’algorithme de Bellman-Ford fonc-tionne sur un graphe de 5 sommets. Après l’initialisation des valeurs d et p detous les sommets en ligne 1, l’algorithme effectue |S| − 1 passages sur les arcs dugraphe. Chaque passage correspond à une itération de la boucle pour des lignes 2–4et consiste à relâcher chaque arc du graphe une seule fois. Les figures 24.4(b)–(e)montrent l’état de l’algorithme après chacun des quatre passages. Après les |S| − 1c ⃝
Dun
od–
La
phot
ocop
ieno
nau
tori
sée
estu
ndé
lit
35
Lélia Blin Algorithmique des graphes
Exemple
A B C D E
0 ∞ ∞ ∞ ∞
#1 0 ∞ ∞ ∞ ∞
#2 0 ∞ ∞ ∞ ∞
#3 0 ∞ ∞ ∞ ∞
#4 0 -1 ∞ ∞ ∞
#5 0 -1 4 ∞ ∞
#6 0 -1 4 ∞ ∞
#7 0 -1 2 ∞ ∞
#8 0 -1 2 ∞ ∞
i=1
-1
2
A
B
E
C D
-1
4
31
2
5
-3
2#4 #1
#2
#6
#5
#7
#8
#3
24.1 Algorithme de Bellman-Ford 571
Notre analyse reposera sur quelques conventions permettant d’effectuer desopérations arithmétiques avec les infinis. On supposera que, pour un nombre réela fi −∞ quelconque, on a a + (+∞) = (+∞) + a = +∞. D’autre part, pour queles démonstrations restent valables en présence de circuits de longueur strictementnégative, on fera l’hypothèse que, pour un nombre réel a fi +∞ quelconque,a + (−∞) = (−∞) + a = −∞.
Tous les algorithmes de ce chapitre supposent que le graphe orienté G est repré-senté par des listes d’adjacences. En outre, le poids d’un arc est stocké avec l’arc ;ainsi, quand on parcourt chaque liste d’adjacences, on peut déterminer les poids d’arcavec un temps de O(1) par arc.
24.1 ALGORITHME DE BELLMAN-FORD
L’algorithme de Bellman-Ford résout le problème des plus courts chemins à ori-gine unique dans le cas général où les poids d’arc peuvent avoir des valeurs néga-tives. Étant donné un graphe orienté pondéré G = (S, A), de fonction de pondérationw : A → R, et une origine s, l’algorithme de Bellman-Ford retourne une valeurbooléenne indiquant s’il existe ou non un circuit de longueur strictement négative ac-cessible à partir de s. Si un tel circuit n’existe pas, l’algorithme donne les plus courtschemins ainsi que leurs poids.
L’algorithme utilise la technique du relâchement, diminuant progressivement uneestimation d[v] du poids d’un plus court chemin depuis l’origine s vers chaque som-met v ∈ S jusqu’à atteindre la valeur réelle du poids de plus court chemin, d(s, v).L’algorithme retourne VRAI si et seulement si le graphe ne contient aucun circuit delongueur strictement négative accessible depuis l’origine.
BELLMAN-FORD(G, w, s)1 SOURCE-UNIQUE-INITIALISATION(G, s)2 pour i ← 1 à |S[G]|− 13 faire pour chaque arc (u, v) ∈ A[G]4 faire RELÂCHER(u, v, w)5 pour chaque arc (u, v) ∈ A[G]6 faire si d[v] > d[u] + w(u, v)7 alors retourner FAUX
8 retourner VRAI
La figure 24.4 montre comment l’exécution de l’algorithme de Bellman-Ford fonc-tionne sur un graphe de 5 sommets. Après l’initialisation des valeurs d et p detous les sommets en ligne 1, l’algorithme effectue |S| − 1 passages sur les arcs dugraphe. Chaque passage correspond à une itération de la boucle pour des lignes 2–4et consiste à relâcher chaque arc du graphe une seule fois. Les figures 24.4(b)–(e)montrent l’état de l’algorithme après chacun des quatre passages. Après les |S| − 1c ⃝
Dun
od–
La
phot
ocop
ieno
nau
tori
sée
estu
ndé
lit
36
Lélia Blin Algorithmique des graphes
Exemple
A B C D E
0 -1 2 ∞ ∞
#1 0 -1 2 ∞ 1
#2
#3
#4
#5
#6
#7
#8
i=2
-1
2
A
B
E
C D
-1
4
31
2
5
-3
2#4 #1
#2
#6
#5
#7
#8
#31
24.1 Algorithme de Bellman-Ford 571
Notre analyse reposera sur quelques conventions permettant d’effectuer desopérations arithmétiques avec les infinis. On supposera que, pour un nombre réela fi −∞ quelconque, on a a + (+∞) = (+∞) + a = +∞. D’autre part, pour queles démonstrations restent valables en présence de circuits de longueur strictementnégative, on fera l’hypothèse que, pour un nombre réel a fi +∞ quelconque,a + (−∞) = (−∞) + a = −∞.
Tous les algorithmes de ce chapitre supposent que le graphe orienté G est repré-senté par des listes d’adjacences. En outre, le poids d’un arc est stocké avec l’arc ;ainsi, quand on parcourt chaque liste d’adjacences, on peut déterminer les poids d’arcavec un temps de O(1) par arc.
24.1 ALGORITHME DE BELLMAN-FORD
L’algorithme de Bellman-Ford résout le problème des plus courts chemins à ori-gine unique dans le cas général où les poids d’arc peuvent avoir des valeurs néga-tives. Étant donné un graphe orienté pondéré G = (S, A), de fonction de pondérationw : A → R, et une origine s, l’algorithme de Bellman-Ford retourne une valeurbooléenne indiquant s’il existe ou non un circuit de longueur strictement négative ac-cessible à partir de s. Si un tel circuit n’existe pas, l’algorithme donne les plus courtschemins ainsi que leurs poids.
L’algorithme utilise la technique du relâchement, diminuant progressivement uneestimation d[v] du poids d’un plus court chemin depuis l’origine s vers chaque som-met v ∈ S jusqu’à atteindre la valeur réelle du poids de plus court chemin, d(s, v).L’algorithme retourne VRAI si et seulement si le graphe ne contient aucun circuit delongueur strictement négative accessible depuis l’origine.
BELLMAN-FORD(G, w, s)1 SOURCE-UNIQUE-INITIALISATION(G, s)2 pour i ← 1 à |S[G]|− 13 faire pour chaque arc (u, v) ∈ A[G]4 faire RELÂCHER(u, v, w)5 pour chaque arc (u, v) ∈ A[G]6 faire si d[v] > d[u] + w(u, v)7 alors retourner FAUX
8 retourner VRAI
La figure 24.4 montre comment l’exécution de l’algorithme de Bellman-Ford fonc-tionne sur un graphe de 5 sommets. Après l’initialisation des valeurs d et p detous les sommets en ligne 1, l’algorithme effectue |S| − 1 passages sur les arcs dugraphe. Chaque passage correspond à une itération de la boucle pour des lignes 2–4et consiste à relâcher chaque arc du graphe une seule fois. Les figures 24.4(b)–(e)montrent l’état de l’algorithme après chacun des quatre passages. Après les |S| − 1c ⃝
Dun
od–
La
phot
ocop
ieno
nau
tori
sée
estu
ndé
lit
37
Lélia Blin Algorithmique des graphes
Exemple
A B C D E
0 -1 2 ∞ ∞
#1 0 -1 2 ∞ 1
#2 0 -1 2 -2 1
#3
#4
#5
#6
#7
#8
i=2
-1
2
A
B
E
C D
-1
4
31
2
5
-3
2#4 #1
#2
#6
#5
#7
#8
#31
-2
24.1 Algorithme de Bellman-Ford 571
Notre analyse reposera sur quelques conventions permettant d’effectuer desopérations arithmétiques avec les infinis. On supposera que, pour un nombre réela fi −∞ quelconque, on a a + (+∞) = (+∞) + a = +∞. D’autre part, pour queles démonstrations restent valables en présence de circuits de longueur strictementnégative, on fera l’hypothèse que, pour un nombre réel a fi +∞ quelconque,a + (−∞) = (−∞) + a = −∞.
Tous les algorithmes de ce chapitre supposent que le graphe orienté G est repré-senté par des listes d’adjacences. En outre, le poids d’un arc est stocké avec l’arc ;ainsi, quand on parcourt chaque liste d’adjacences, on peut déterminer les poids d’arcavec un temps de O(1) par arc.
24.1 ALGORITHME DE BELLMAN-FORD
L’algorithme de Bellman-Ford résout le problème des plus courts chemins à ori-gine unique dans le cas général où les poids d’arc peuvent avoir des valeurs néga-tives. Étant donné un graphe orienté pondéré G = (S, A), de fonction de pondérationw : A → R, et une origine s, l’algorithme de Bellman-Ford retourne une valeurbooléenne indiquant s’il existe ou non un circuit de longueur strictement négative ac-cessible à partir de s. Si un tel circuit n’existe pas, l’algorithme donne les plus courtschemins ainsi que leurs poids.
L’algorithme utilise la technique du relâchement, diminuant progressivement uneestimation d[v] du poids d’un plus court chemin depuis l’origine s vers chaque som-met v ∈ S jusqu’à atteindre la valeur réelle du poids de plus court chemin, d(s, v).L’algorithme retourne VRAI si et seulement si le graphe ne contient aucun circuit delongueur strictement négative accessible depuis l’origine.
BELLMAN-FORD(G, w, s)1 SOURCE-UNIQUE-INITIALISATION(G, s)2 pour i ← 1 à |S[G]|− 13 faire pour chaque arc (u, v) ∈ A[G]4 faire RELÂCHER(u, v, w)5 pour chaque arc (u, v) ∈ A[G]6 faire si d[v] > d[u] + w(u, v)7 alors retourner FAUX
8 retourner VRAI
La figure 24.4 montre comment l’exécution de l’algorithme de Bellman-Ford fonc-tionne sur un graphe de 5 sommets. Après l’initialisation des valeurs d et p detous les sommets en ligne 1, l’algorithme effectue |S| − 1 passages sur les arcs dugraphe. Chaque passage correspond à une itération de la boucle pour des lignes 2–4et consiste à relâcher chaque arc du graphe une seule fois. Les figures 24.4(b)–(e)montrent l’état de l’algorithme après chacun des quatre passages. Après les |S| − 1c ⃝
Dun
od–
La
phot
ocop
ieno
nau
tori
sée
estu
ndé
lit
38
Lélia Blin Algorithmique des graphes
Exemple
A B C D E
0 -1 2 ∞ ∞
#1 0 -1 2 ∞ 1
#2 0 -1 2 -2 1
#3 0 -1 2 -2 1
#4
#5
#6
#7
#8
i=2
-1
2
A
B
E
C D
-1
4
31
2
5
-3
2#4 #1
#2
#6
#5
#7
#8
#31
-2
24.1 Algorithme de Bellman-Ford 571
Notre analyse reposera sur quelques conventions permettant d’effectuer desopérations arithmétiques avec les infinis. On supposera que, pour un nombre réela fi −∞ quelconque, on a a + (+∞) = (+∞) + a = +∞. D’autre part, pour queles démonstrations restent valables en présence de circuits de longueur strictementnégative, on fera l’hypothèse que, pour un nombre réel a fi +∞ quelconque,a + (−∞) = (−∞) + a = −∞.
Tous les algorithmes de ce chapitre supposent que le graphe orienté G est repré-senté par des listes d’adjacences. En outre, le poids d’un arc est stocké avec l’arc ;ainsi, quand on parcourt chaque liste d’adjacences, on peut déterminer les poids d’arcavec un temps de O(1) par arc.
24.1 ALGORITHME DE BELLMAN-FORD
L’algorithme de Bellman-Ford résout le problème des plus courts chemins à ori-gine unique dans le cas général où les poids d’arc peuvent avoir des valeurs néga-tives. Étant donné un graphe orienté pondéré G = (S, A), de fonction de pondérationw : A → R, et une origine s, l’algorithme de Bellman-Ford retourne une valeurbooléenne indiquant s’il existe ou non un circuit de longueur strictement négative ac-cessible à partir de s. Si un tel circuit n’existe pas, l’algorithme donne les plus courtschemins ainsi que leurs poids.
L’algorithme utilise la technique du relâchement, diminuant progressivement uneestimation d[v] du poids d’un plus court chemin depuis l’origine s vers chaque som-met v ∈ S jusqu’à atteindre la valeur réelle du poids de plus court chemin, d(s, v).L’algorithme retourne VRAI si et seulement si le graphe ne contient aucun circuit delongueur strictement négative accessible depuis l’origine.
BELLMAN-FORD(G, w, s)1 SOURCE-UNIQUE-INITIALISATION(G, s)2 pour i ← 1 à |S[G]|− 13 faire pour chaque arc (u, v) ∈ A[G]4 faire RELÂCHER(u, v, w)5 pour chaque arc (u, v) ∈ A[G]6 faire si d[v] > d[u] + w(u, v)7 alors retourner FAUX
8 retourner VRAI
La figure 24.4 montre comment l’exécution de l’algorithme de Bellman-Ford fonc-tionne sur un graphe de 5 sommets. Après l’initialisation des valeurs d et p detous les sommets en ligne 1, l’algorithme effectue |S| − 1 passages sur les arcs dugraphe. Chaque passage correspond à une itération de la boucle pour des lignes 2–4et consiste à relâcher chaque arc du graphe une seule fois. Les figures 24.4(b)–(e)montrent l’état de l’algorithme après chacun des quatre passages. Après les |S| − 1c ⃝
Dun
od–
La
phot
ocop
ieno
nau
tori
sée
estu
ndé
lit
39
Lélia Blin Algorithmique des graphes
Exemple
A B C D E
0 -1 2 ∞ ∞
#1 0 -1 2 ∞ 1
#2 0 -1 2 -2 1
#3 0 -1 2 -2 1
#4
#5
#6
#7
#8
i=2
-1
2
A
B
E
C D
-1
4
31
2
5
-3
2#4 #1
#2
#6
#5
#7
#8
#31
-2
24.1 Algorithme de Bellman-Ford 571
Notre analyse reposera sur quelques conventions permettant d’effectuer desopérations arithmétiques avec les infinis. On supposera que, pour un nombre réela fi −∞ quelconque, on a a + (+∞) = (+∞) + a = +∞. D’autre part, pour queles démonstrations restent valables en présence de circuits de longueur strictementnégative, on fera l’hypothèse que, pour un nombre réel a fi +∞ quelconque,a + (−∞) = (−∞) + a = −∞.
Tous les algorithmes de ce chapitre supposent que le graphe orienté G est repré-senté par des listes d’adjacences. En outre, le poids d’un arc est stocké avec l’arc ;ainsi, quand on parcourt chaque liste d’adjacences, on peut déterminer les poids d’arcavec un temps de O(1) par arc.
24.1 ALGORITHME DE BELLMAN-FORD
L’algorithme de Bellman-Ford résout le problème des plus courts chemins à ori-gine unique dans le cas général où les poids d’arc peuvent avoir des valeurs néga-tives. Étant donné un graphe orienté pondéré G = (S, A), de fonction de pondérationw : A → R, et une origine s, l’algorithme de Bellman-Ford retourne une valeurbooléenne indiquant s’il existe ou non un circuit de longueur strictement négative ac-cessible à partir de s. Si un tel circuit n’existe pas, l’algorithme donne les plus courtschemins ainsi que leurs poids.
L’algorithme utilise la technique du relâchement, diminuant progressivement uneestimation d[v] du poids d’un plus court chemin depuis l’origine s vers chaque som-met v ∈ S jusqu’à atteindre la valeur réelle du poids de plus court chemin, d(s, v).L’algorithme retourne VRAI si et seulement si le graphe ne contient aucun circuit delongueur strictement négative accessible depuis l’origine.
BELLMAN-FORD(G, w, s)1 SOURCE-UNIQUE-INITIALISATION(G, s)2 pour i ← 1 à |S[G]|− 13 faire pour chaque arc (u, v) ∈ A[G]4 faire RELÂCHER(u, v, w)5 pour chaque arc (u, v) ∈ A[G]6 faire si d[v] > d[u] + w(u, v)7 alors retourner FAUX
8 retourner VRAI
La figure 24.4 montre comment l’exécution de l’algorithme de Bellman-Ford fonc-tionne sur un graphe de 5 sommets. Après l’initialisation des valeurs d et p detous les sommets en ligne 1, l’algorithme effectue |S| − 1 passages sur les arcs dugraphe. Chaque passage correspond à une itération de la boucle pour des lignes 2–4et consiste à relâcher chaque arc du graphe une seule fois. Les figures 24.4(b)–(e)montrent l’état de l’algorithme après chacun des quatre passages. Après les |S| − 1c ⃝
Dun
od–
La
phot
ocop
ieno
nau
tori
sée
estu
ndé
lit
40
Lélia Blin Algorithmique des graphes
Exemple
A B C D E
0 -1 2 ∞ ∞
#1 0 -1 2 ∞ 1
#2 0 -1 2 -2 1
#3 0 -1 2 -2 1
#4 0 -1 2 -2 1
#5
#6
#7
#8
i=2
-1
2
A
B
E
C D
-1
4
31
2
5
-3
2#4 #1
#2
#6
#5
#7
#8
#31
-2
24.1 Algorithme de Bellman-Ford 571
Notre analyse reposera sur quelques conventions permettant d’effectuer desopérations arithmétiques avec les infinis. On supposera que, pour un nombre réela fi −∞ quelconque, on a a + (+∞) = (+∞) + a = +∞. D’autre part, pour queles démonstrations restent valables en présence de circuits de longueur strictementnégative, on fera l’hypothèse que, pour un nombre réel a fi +∞ quelconque,a + (−∞) = (−∞) + a = −∞.
Tous les algorithmes de ce chapitre supposent que le graphe orienté G est repré-senté par des listes d’adjacences. En outre, le poids d’un arc est stocké avec l’arc ;ainsi, quand on parcourt chaque liste d’adjacences, on peut déterminer les poids d’arcavec un temps de O(1) par arc.
24.1 ALGORITHME DE BELLMAN-FORD
L’algorithme de Bellman-Ford résout le problème des plus courts chemins à ori-gine unique dans le cas général où les poids d’arc peuvent avoir des valeurs néga-tives. Étant donné un graphe orienté pondéré G = (S, A), de fonction de pondérationw : A → R, et une origine s, l’algorithme de Bellman-Ford retourne une valeurbooléenne indiquant s’il existe ou non un circuit de longueur strictement négative ac-cessible à partir de s. Si un tel circuit n’existe pas, l’algorithme donne les plus courtschemins ainsi que leurs poids.
L’algorithme utilise la technique du relâchement, diminuant progressivement uneestimation d[v] du poids d’un plus court chemin depuis l’origine s vers chaque som-met v ∈ S jusqu’à atteindre la valeur réelle du poids de plus court chemin, d(s, v).L’algorithme retourne VRAI si et seulement si le graphe ne contient aucun circuit delongueur strictement négative accessible depuis l’origine.
BELLMAN-FORD(G, w, s)1 SOURCE-UNIQUE-INITIALISATION(G, s)2 pour i ← 1 à |S[G]|− 13 faire pour chaque arc (u, v) ∈ A[G]4 faire RELÂCHER(u, v, w)5 pour chaque arc (u, v) ∈ A[G]6 faire si d[v] > d[u] + w(u, v)7 alors retourner FAUX
8 retourner VRAI
La figure 24.4 montre comment l’exécution de l’algorithme de Bellman-Ford fonc-tionne sur un graphe de 5 sommets. Après l’initialisation des valeurs d et p detous les sommets en ligne 1, l’algorithme effectue |S| − 1 passages sur les arcs dugraphe. Chaque passage correspond à une itération de la boucle pour des lignes 2–4et consiste à relâcher chaque arc du graphe une seule fois. Les figures 24.4(b)–(e)montrent l’état de l’algorithme après chacun des quatre passages. Après les |S| − 1c ⃝
Dun
od–
La
phot
ocop
ieno
nau
tori
sée
estu
ndé
lit
41
Lélia Blin Algorithmique des graphes
Exemple
A B C D E
0 -1 2 ∞ ∞
#1 0 -1 2 ∞ 1
#2 0 -1 2 -2 1
#3 0 -1 2 -2 1
#4 0 -1 2 -2 1
#5 0 -1 2 -2 1
#6
#7
#8
i=2
-1
2
A
B
E
C D
-1
4
31
2
5
-3
2#4 #1
#2
#6
#5
#7
#8
#31
-2
24.1 Algorithme de Bellman-Ford 571
Notre analyse reposera sur quelques conventions permettant d’effectuer desopérations arithmétiques avec les infinis. On supposera que, pour un nombre réela fi −∞ quelconque, on a a + (+∞) = (+∞) + a = +∞. D’autre part, pour queles démonstrations restent valables en présence de circuits de longueur strictementnégative, on fera l’hypothèse que, pour un nombre réel a fi +∞ quelconque,a + (−∞) = (−∞) + a = −∞.
Tous les algorithmes de ce chapitre supposent que le graphe orienté G est repré-senté par des listes d’adjacences. En outre, le poids d’un arc est stocké avec l’arc ;ainsi, quand on parcourt chaque liste d’adjacences, on peut déterminer les poids d’arcavec un temps de O(1) par arc.
24.1 ALGORITHME DE BELLMAN-FORD
L’algorithme de Bellman-Ford résout le problème des plus courts chemins à ori-gine unique dans le cas général où les poids d’arc peuvent avoir des valeurs néga-tives. Étant donné un graphe orienté pondéré G = (S, A), de fonction de pondérationw : A → R, et une origine s, l’algorithme de Bellman-Ford retourne une valeurbooléenne indiquant s’il existe ou non un circuit de longueur strictement négative ac-cessible à partir de s. Si un tel circuit n’existe pas, l’algorithme donne les plus courtschemins ainsi que leurs poids.
L’algorithme utilise la technique du relâchement, diminuant progressivement uneestimation d[v] du poids d’un plus court chemin depuis l’origine s vers chaque som-met v ∈ S jusqu’à atteindre la valeur réelle du poids de plus court chemin, d(s, v).L’algorithme retourne VRAI si et seulement si le graphe ne contient aucun circuit delongueur strictement négative accessible depuis l’origine.
BELLMAN-FORD(G, w, s)1 SOURCE-UNIQUE-INITIALISATION(G, s)2 pour i ← 1 à |S[G]|− 13 faire pour chaque arc (u, v) ∈ A[G]4 faire RELÂCHER(u, v, w)5 pour chaque arc (u, v) ∈ A[G]6 faire si d[v] > d[u] + w(u, v)7 alors retourner FAUX
8 retourner VRAI
La figure 24.4 montre comment l’exécution de l’algorithme de Bellman-Ford fonc-tionne sur un graphe de 5 sommets. Après l’initialisation des valeurs d et p detous les sommets en ligne 1, l’algorithme effectue |S| − 1 passages sur les arcs dugraphe. Chaque passage correspond à une itération de la boucle pour des lignes 2–4et consiste à relâcher chaque arc du graphe une seule fois. Les figures 24.4(b)–(e)montrent l’état de l’algorithme après chacun des quatre passages. Après les |S| − 1c ⃝
Dun
od–
La
phot
ocop
ieno
nau
tori
sée
estu
ndé
lit
42
Lélia Blin Algorithmique des graphes
Exemple
A B C D E
0 -1 2 ∞ ∞
#1 0 -1 2 ∞ 1
#2 0 -1 2 -2 1
#3 0 -1 2 -2 1
#4 0 -1 2 -2 1
#5 0 -1 2 -2 1
#6 0 -1 2 -2 1
#7
#8
i=2
-1
2
A
B
E
C D
-1
4
31
2
5
-3
2#4 #1
#2
#6
#5
#7
#8
#31
24.1 Algorithme de Bellman-Ford 571
Notre analyse reposera sur quelques conventions permettant d’effectuer desopérations arithmétiques avec les infinis. On supposera que, pour un nombre réela fi −∞ quelconque, on a a + (+∞) = (+∞) + a = +∞. D’autre part, pour queles démonstrations restent valables en présence de circuits de longueur strictementnégative, on fera l’hypothèse que, pour un nombre réel a fi +∞ quelconque,a + (−∞) = (−∞) + a = −∞.
Tous les algorithmes de ce chapitre supposent que le graphe orienté G est repré-senté par des listes d’adjacences. En outre, le poids d’un arc est stocké avec l’arc ;ainsi, quand on parcourt chaque liste d’adjacences, on peut déterminer les poids d’arcavec un temps de O(1) par arc.
24.1 ALGORITHME DE BELLMAN-FORD
L’algorithme de Bellman-Ford résout le problème des plus courts chemins à ori-gine unique dans le cas général où les poids d’arc peuvent avoir des valeurs néga-tives. Étant donné un graphe orienté pondéré G = (S, A), de fonction de pondérationw : A → R, et une origine s, l’algorithme de Bellman-Ford retourne une valeurbooléenne indiquant s’il existe ou non un circuit de longueur strictement négative ac-cessible à partir de s. Si un tel circuit n’existe pas, l’algorithme donne les plus courtschemins ainsi que leurs poids.
L’algorithme utilise la technique du relâchement, diminuant progressivement uneestimation d[v] du poids d’un plus court chemin depuis l’origine s vers chaque som-met v ∈ S jusqu’à atteindre la valeur réelle du poids de plus court chemin, d(s, v).L’algorithme retourne VRAI si et seulement si le graphe ne contient aucun circuit delongueur strictement négative accessible depuis l’origine.
BELLMAN-FORD(G, w, s)1 SOURCE-UNIQUE-INITIALISATION(G, s)2 pour i ← 1 à |S[G]|− 13 faire pour chaque arc (u, v) ∈ A[G]4 faire RELÂCHER(u, v, w)5 pour chaque arc (u, v) ∈ A[G]6 faire si d[v] > d[u] + w(u, v)7 alors retourner FAUX
8 retourner VRAI
La figure 24.4 montre comment l’exécution de l’algorithme de Bellman-Ford fonc-tionne sur un graphe de 5 sommets. Après l’initialisation des valeurs d et p detous les sommets en ligne 1, l’algorithme effectue |S| − 1 passages sur les arcs dugraphe. Chaque passage correspond à une itération de la boucle pour des lignes 2–4et consiste à relâcher chaque arc du graphe une seule fois. Les figures 24.4(b)–(e)montrent l’état de l’algorithme après chacun des quatre passages. Après les |S| − 1c ⃝
Dun
od–
La
phot
ocop
ieno
nau
tori
sée
estu
ndé
lit
43
Lélia Blin Algorithmique des graphes
Exemple
A B C D E
0 -1 2 ∞ ∞
#1 0 -1 2 ∞ 1
#2 0 -1 2 -2 1
#3 0 -1 2 -2 1
#4 0 -1 2 -2 1
#5 0 -1 2 -2 1
#6 0 -1 2 -2 1
#7 0 -1 2 -2 1
#8
i=2
-1
2
A
B
E
C D
-1
4
31
2
5
-3
2#4 #1
#2
#6
#5
#7
#8
#31
-2
24.1 Algorithme de Bellman-Ford 571
Notre analyse reposera sur quelques conventions permettant d’effectuer desopérations arithmétiques avec les infinis. On supposera que, pour un nombre réela fi −∞ quelconque, on a a + (+∞) = (+∞) + a = +∞. D’autre part, pour queles démonstrations restent valables en présence de circuits de longueur strictementnégative, on fera l’hypothèse que, pour un nombre réel a fi +∞ quelconque,a + (−∞) = (−∞) + a = −∞.
Tous les algorithmes de ce chapitre supposent que le graphe orienté G est repré-senté par des listes d’adjacences. En outre, le poids d’un arc est stocké avec l’arc ;ainsi, quand on parcourt chaque liste d’adjacences, on peut déterminer les poids d’arcavec un temps de O(1) par arc.
24.1 ALGORITHME DE BELLMAN-FORD
L’algorithme de Bellman-Ford résout le problème des plus courts chemins à ori-gine unique dans le cas général où les poids d’arc peuvent avoir des valeurs néga-tives. Étant donné un graphe orienté pondéré G = (S, A), de fonction de pondérationw : A → R, et une origine s, l’algorithme de Bellman-Ford retourne une valeurbooléenne indiquant s’il existe ou non un circuit de longueur strictement négative ac-cessible à partir de s. Si un tel circuit n’existe pas, l’algorithme donne les plus courtschemins ainsi que leurs poids.
L’algorithme utilise la technique du relâchement, diminuant progressivement uneestimation d[v] du poids d’un plus court chemin depuis l’origine s vers chaque som-met v ∈ S jusqu’à atteindre la valeur réelle du poids de plus court chemin, d(s, v).L’algorithme retourne VRAI si et seulement si le graphe ne contient aucun circuit delongueur strictement négative accessible depuis l’origine.
BELLMAN-FORD(G, w, s)1 SOURCE-UNIQUE-INITIALISATION(G, s)2 pour i ← 1 à |S[G]|− 13 faire pour chaque arc (u, v) ∈ A[G]4 faire RELÂCHER(u, v, w)5 pour chaque arc (u, v) ∈ A[G]6 faire si d[v] > d[u] + w(u, v)7 alors retourner FAUX
8 retourner VRAI
La figure 24.4 montre comment l’exécution de l’algorithme de Bellman-Ford fonc-tionne sur un graphe de 5 sommets. Après l’initialisation des valeurs d et p detous les sommets en ligne 1, l’algorithme effectue |S| − 1 passages sur les arcs dugraphe. Chaque passage correspond à une itération de la boucle pour des lignes 2–4et consiste à relâcher chaque arc du graphe une seule fois. Les figures 24.4(b)–(e)montrent l’état de l’algorithme après chacun des quatre passages. Après les |S| − 1c ⃝
Dun
od–
La
phot
ocop
ieno
nau
tori
sée
estu
ndé
lit
44
Lélia Blin Algorithmique des graphes
Exemple
A B C D E
0 -1 2 ∞ ∞
#1 0 -1 2 ∞ 1
#2 0 -1 2 -2 1
#3 0 -1 2 -2 1
#4 0 -1 2 -2 1
#5 0 -1 2 -2 1
#6 0 -1 2 -2 1
#7 0 -1 2 -2 1
#8 0 -1 2 -2 1
i=2
-1
2
A
B
E
C D
-1
4
31
2
5
-3
2#4 #1
#2
#6
#5
#7
#8
#31
-2
24.1 Algorithme de Bellman-Ford 571
Notre analyse reposera sur quelques conventions permettant d’effectuer desopérations arithmétiques avec les infinis. On supposera que, pour un nombre réela fi −∞ quelconque, on a a + (+∞) = (+∞) + a = +∞. D’autre part, pour queles démonstrations restent valables en présence de circuits de longueur strictementnégative, on fera l’hypothèse que, pour un nombre réel a fi +∞ quelconque,a + (−∞) = (−∞) + a = −∞.
Tous les algorithmes de ce chapitre supposent que le graphe orienté G est repré-senté par des listes d’adjacences. En outre, le poids d’un arc est stocké avec l’arc ;ainsi, quand on parcourt chaque liste d’adjacences, on peut déterminer les poids d’arcavec un temps de O(1) par arc.
24.1 ALGORITHME DE BELLMAN-FORD
L’algorithme de Bellman-Ford résout le problème des plus courts chemins à ori-gine unique dans le cas général où les poids d’arc peuvent avoir des valeurs néga-tives. Étant donné un graphe orienté pondéré G = (S, A), de fonction de pondérationw : A → R, et une origine s, l’algorithme de Bellman-Ford retourne une valeurbooléenne indiquant s’il existe ou non un circuit de longueur strictement négative ac-cessible à partir de s. Si un tel circuit n’existe pas, l’algorithme donne les plus courtschemins ainsi que leurs poids.
L’algorithme utilise la technique du relâchement, diminuant progressivement uneestimation d[v] du poids d’un plus court chemin depuis l’origine s vers chaque som-met v ∈ S jusqu’à atteindre la valeur réelle du poids de plus court chemin, d(s, v).L’algorithme retourne VRAI si et seulement si le graphe ne contient aucun circuit delongueur strictement négative accessible depuis l’origine.
BELLMAN-FORD(G, w, s)1 SOURCE-UNIQUE-INITIALISATION(G, s)2 pour i ← 1 à |S[G]|− 13 faire pour chaque arc (u, v) ∈ A[G]4 faire RELÂCHER(u, v, w)5 pour chaque arc (u, v) ∈ A[G]6 faire si d[v] > d[u] + w(u, v)7 alors retourner FAUX
8 retourner VRAI
La figure 24.4 montre comment l’exécution de l’algorithme de Bellman-Ford fonc-tionne sur un graphe de 5 sommets. Après l’initialisation des valeurs d et p detous les sommets en ligne 1, l’algorithme effectue |S| − 1 passages sur les arcs dugraphe. Chaque passage correspond à une itération de la boucle pour des lignes 2–4et consiste à relâcher chaque arc du graphe une seule fois. Les figures 24.4(b)–(e)montrent l’état de l’algorithme après chacun des quatre passages. Après les |S| − 1c ⃝
Dun
od–
La
phot
ocop
ieno
nau
tori
sée
estu
ndé
lit
45
Lélia Blin Algorithmique des graphes
Exemple
il faut recommencer pour i=3 et i=4
Mais rien ne change
-1
2
1A
B
E
C D
-1
4
31
2
5
-3
2#4 #1
#2
#6
#5
#7
#8
#3
-2
24.1 Algorithme de Bellman-Ford 571
Notre analyse reposera sur quelques conventions permettant d’effectuer desopérations arithmétiques avec les infinis. On supposera que, pour un nombre réela fi −∞ quelconque, on a a + (+∞) = (+∞) + a = +∞. D’autre part, pour queles démonstrations restent valables en présence de circuits de longueur strictementnégative, on fera l’hypothèse que, pour un nombre réel a fi +∞ quelconque,a + (−∞) = (−∞) + a = −∞.
Tous les algorithmes de ce chapitre supposent que le graphe orienté G est repré-senté par des listes d’adjacences. En outre, le poids d’un arc est stocké avec l’arc ;ainsi, quand on parcourt chaque liste d’adjacences, on peut déterminer les poids d’arcavec un temps de O(1) par arc.
24.1 ALGORITHME DE BELLMAN-FORD
L’algorithme de Bellman-Ford résout le problème des plus courts chemins à ori-gine unique dans le cas général où les poids d’arc peuvent avoir des valeurs néga-tives. Étant donné un graphe orienté pondéré G = (S, A), de fonction de pondérationw : A → R, et une origine s, l’algorithme de Bellman-Ford retourne une valeurbooléenne indiquant s’il existe ou non un circuit de longueur strictement négative ac-cessible à partir de s. Si un tel circuit n’existe pas, l’algorithme donne les plus courtschemins ainsi que leurs poids.
L’algorithme utilise la technique du relâchement, diminuant progressivement uneestimation d[v] du poids d’un plus court chemin depuis l’origine s vers chaque som-met v ∈ S jusqu’à atteindre la valeur réelle du poids de plus court chemin, d(s, v).L’algorithme retourne VRAI si et seulement si le graphe ne contient aucun circuit delongueur strictement négative accessible depuis l’origine.
BELLMAN-FORD(G, w, s)1 SOURCE-UNIQUE-INITIALISATION(G, s)2 pour i ← 1 à |S[G]|− 13 faire pour chaque arc (u, v) ∈ A[G]4 faire RELÂCHER(u, v, w)5 pour chaque arc (u, v) ∈ A[G]6 faire si d[v] > d[u] + w(u, v)7 alors retourner FAUX
8 retourner VRAI
La figure 24.4 montre comment l’exécution de l’algorithme de Bellman-Ford fonc-tionne sur un graphe de 5 sommets. Après l’initialisation des valeurs d et p detous les sommets en ligne 1, l’algorithme effectue |S| − 1 passages sur les arcs dugraphe. Chaque passage correspond à une itération de la boucle pour des lignes 2–4et consiste à relâcher chaque arc du graphe une seule fois. Les figures 24.4(b)–(e)montrent l’état de l’algorithme après chacun des quatre passages. Après les |S| − 1c ⃝
Dun
od–
La
phot
ocop
ieno
nau
tori
sée
estu
ndé
lit
46
Lélia Blin Algorithmique des graphes
Autre exemple
572 24 • Plus courts chemins à origine unique
passages, les lignes 5–8 testent la présence d’un circuit de longueur strictement néga-tive et retournent la valeur booléenne appropriée. (Nous justifierons un peu plus tardle fonctionnement de ce test).
(a) (b) (c)
(d)
0
5
9
78
6
7
(e)
t x
s
y z
–4
–3
–22
7
4
–22
0
5
9
78
6
7
t x
s
y z
–4
–3
–22
7
4
22
0
5
9
78
6
7
t x
s
y z
–4
–3
–26
7
4
22
0
5
9
78
6
7
t x
s
y z
–4
–3
–26
7
∞
∞2
0
5
9
78
6
7
t x
s
y z
–4
–3
–2 ∞
∞2
∞
∞
Figure 24.4 L’exécution de l’algorithme de Bellman-Ford. Le sommet origine est s. Les valeurs ded sont représentées dans les sommets, et les arcs en gris indiquent les valeurs prédécesseur : sil’arc (u, v) est en gris, alors p[v] = u. Dans cet exemple particulier, chaque passage relâche les arcsdans l’ordre (t, x), (t, y), (t, z), (x, t), (y, x), (y, z), (z, x), (z, s), (s, t), (s, y). (a) La situation juste avant lepremier passage sur les arcs. (b)–(e) La situation après chacun des passages suivants. Les valeursd et p donnée en partie (e) sont les valeurs finales. L’algorithme de Bellman-Ford retourne VRAI
pour cet exemple.
L’algorithme de Bellman-Ford s’exécute en temps O(SA) : l’initialisation de laligne 1 prend Q(S) ; chacun des |S|−1 passages des lignes 2–4 prend Q(A) ; la bouclepour des lignes 5–7 prend O(A).
Pour démontrer la validité de l’algorithme de Bellman-Ford, on commence parmontrer que, s’il n’existe aucun circuit de longueur strictement négative, l’algorithmecalcule les longueurs de plus court chemin corrects pour tous les sommets accessiblesdepuis l’origine.
Lemme 24.2 Soit G = (S, A) un graphe orienté pondéré, de fonction de pondérationw : A → R et d’origine s ; on suppose que G ne contient aucun circuit de longueurstrictement négative accessible depuis s. Alors, après les |S| − 1 itérations de laboucle pour des lignes 2–4 de BELLMAN-FORD, on a d[v] = d(s, v) pour tous lessommets v accessibles depuis s.
Démonstration : On démontre le lemme en faisant appel à la propriété de relâche-ment de chemin. Soit un sommet v accessible depuis s, et soit p = ⟨v0, v1, . . . , vk⟩, oùv0 = s et vk = v, un plus court chemin élémentaire de s à v. Le chemin p a au plus
47
#1 #2
#3
#4
#5
#6
#7
#8 #9
#10
Lélia Blin
Algorithme de Dijkstra
Théorie des graphes Cours de Lélia Blin3eme année de Licence
48
Lélia Blin Algorithmique des graphes
Remarques
❖ L’algorithme de Dijkstra est un autre algorithme de recherche de distance et de plus court chemin.
❖ Il est plus efficace que Bellman-Ford.
❖ Mais ne fonctionne que dans le cas où toutes les valuations des arcs sont positives.
49
Lélia Blin Algorithmique des graphes
Principe❖ On construit petit à petit, à partir de {x0}, un ensemble M de sommets
marqués.
❖ Pour tout sommet marqués , l’estimation d(s ) est égale à la distance 𝛿(x, s ).
❖ A chaque étape, on sélectionne le (un) sommet non marqué x dont la distance estimé d (x ) est la plus petite parmi tous les sommets non marqué.
❖ On marque alors x (on rajoute x à M ), puis on met à jour à partir de x les distances estimées des successeurs non marqués de x
❖ On recommence, jusqu’à épuisement des sommets non marqués
50
Lélia Blin Algorithmique des graphes
Algorithme de Dijkstra
578 24 • Plus courts chemins à origine unique
L’algorithme de Dijkstra gère un ensemble E de sommets dont les longueurs finalesde plus court chemin à partir de l’origine s ont déjà été calculées. A chaque itération,l’algorithme choisit le sommet u ∈ S − E dont l’estimation de plus court chemin estminimale, ajoute u à E, puis relâche tous les arcs partant de u. Dans l’implémentationci-après, on gère une file de priorités min F de sommets, en prenant pour clé la valeurde leur attribut d.
DIJKSTRA(G, w, s)1 SOURCE-UNIQUE-INITIALISATION(G, s)2 E ← ∅3 F ← S[G]4 tant que F fi ∅5 faire u ← EXTRAIRE-MIN(F)6 E ← E ∪ {u}7 pour chaque sommet v ∈ Adj[u]8 faire RELÂCHER(u, v, w)
0
∞ ∞
∞ ∞
0
∞
∞
1
2
10
5
(c)
10
5
0
8
5
14
7
0
8
5
13
7
0
8
5
9
7
0
5
9
7
8
6432 9
7
s
t x
y z
1
2
10
5
(f)
6432 9
7
s
t x
y z
1
2
10
5
(b)
6432 9
7
s
t x
y z
1
2
10
5
(e)
6432 9
7
s
t x
y z
1
2
10
5
(a)
6432 9
7
s
t x
y z
1
2
10
5
(d)
6432 9
7
s
t x
y z
Figure 24.6 L’exécution de l’algorithme de Dijkstra. L’origine s est le sommet le plus à gauche.Les estimations de plus court chemin sont représentées à l’intérieur des sommets, et les arcs engris indiquent les prédécesseurs. Les sommets noirs sont dans l’ensemble E, et les sommets blancssont dans la file de priorités min F = S − E. (a) La situation juste avant la première itération dela boucle tant que des lignes 4–8. Le sommet gris contient la valeur minimale de d et est choisicomme sommet u à la ligne 5. (b)–(f) La situation après les itérations successives de la boucletant que. A chaque étape, le sommet gris est celui choisi comme sommet u à la ligne 5 del’itération suivante. Les valeurs d et p représentées en (f) sont les valeurs finales.
L’algorithme de Dijkstra relâche les arcs comme illustré à la figure 24.6. La ligne 1effectue l’initialisation habituelle des valeurs d et p, et la ligne 2 initialise l’ensembleE. L’algorithme conserve l’invariant suivant : F = S − E au début de chaque itération
51
Lélia Blin Algorithmique des graphes
Exemple
578 24 • Plus courts chemins à origine unique
L’algorithme de Dijkstra gère un ensemble E de sommets dont les longueurs finalesde plus court chemin à partir de l’origine s ont déjà été calculées. A chaque itération,l’algorithme choisit le sommet u ∈ S − E dont l’estimation de plus court chemin estminimale, ajoute u à E, puis relâche tous les arcs partant de u. Dans l’implémentationci-après, on gère une file de priorités min F de sommets, en prenant pour clé la valeurde leur attribut d.
DIJKSTRA(G, w, s)1 SOURCE-UNIQUE-INITIALISATION(G, s)2 E ← ∅3 F ← S[G]4 tant que F fi ∅5 faire u ← EXTRAIRE-MIN(F)6 E ← E ∪ {u}7 pour chaque sommet v ∈ Adj[u]8 faire RELÂCHER(u, v, w)
0
∞ ∞
∞ ∞
0
∞
∞
1
2
10
5
(c)
10
5
0
8
5
14
7
0
8
5
13
7
0
8
5
9
7
0
5
9
7
8
6432 9
7
s
t x
y z
1
2
10
5
(f)
6432 9
7
s
t x
y z
1
2
10
5
(b)
6432 9
7
s
t x
y z
1
2
10
5
(e)
6432 9
7
s
t x
y z
1
2
10
5
(a)
6432 9
7
s
t x
y z
1
2
10
5
(d)
6432 9
7
s
t x
y z
Figure 24.6 L’exécution de l’algorithme de Dijkstra. L’origine s est le sommet le plus à gauche.Les estimations de plus court chemin sont représentées à l’intérieur des sommets, et les arcs engris indiquent les prédécesseurs. Les sommets noirs sont dans l’ensemble E, et les sommets blancssont dans la file de priorités min F = S − E. (a) La situation juste avant la première itération dela boucle tant que des lignes 4–8. Le sommet gris contient la valeur minimale de d et est choisicomme sommet u à la ligne 5. (b)–(f) La situation après les itérations successives de la boucletant que. A chaque étape, le sommet gris est celui choisi comme sommet u à la ligne 5 del’itération suivante. Les valeurs d et p représentées en (f) sont les valeurs finales.
L’algorithme de Dijkstra relâche les arcs comme illustré à la figure 24.6. La ligne 1effectue l’initialisation habituelle des valeurs d et p, et la ligne 2 initialise l’ensembleE. L’algorithme conserve l’invariant suivant : F = S − E au début de chaque itération
F={s,t,x,y,z}E={}
578 24 • Plus courts chemins à origine unique
L’algorithme de Dijkstra gère un ensemble E de sommets dont les longueurs finalesde plus court chemin à partir de l’origine s ont déjà été calculées. A chaque itération,l’algorithme choisit le sommet u ∈ S − E dont l’estimation de plus court chemin estminimale, ajoute u à E, puis relâche tous les arcs partant de u. Dans l’implémentationci-après, on gère une file de priorités min F de sommets, en prenant pour clé la valeurde leur attribut d.
DIJKSTRA(G, w, s)1 SOURCE-UNIQUE-INITIALISATION(G, s)2 E ← ∅3 F ← S[G]4 tant que F fi ∅5 faire u ← EXTRAIRE-MIN(F)6 E ← E ∪ {u}7 pour chaque sommet v ∈ Adj[u]8 faire RELÂCHER(u, v, w)
0
∞ ∞
∞ ∞
0
∞
∞
1
2
10
5
(c)
10
5
0
8
5
14
7
0
8
5
13
7
0
8
5
9
7
0
5
9
7
8
6432 9
7
s
t x
y z
1
2
10
5
(f)
6432 9
7
s
t x
y z
1
2
10
5
(b)
6432 9
7
s
t x
y z
1
2
10
5
(e)
6432 9
7
s
t x
y z
1
2
10
5
(a)
6432 9
7
s
t x
y z
1
2
10
5
(d)
6432 9
7
s
t x
y z
Figure 24.6 L’exécution de l’algorithme de Dijkstra. L’origine s est le sommet le plus à gauche.Les estimations de plus court chemin sont représentées à l’intérieur des sommets, et les arcs engris indiquent les prédécesseurs. Les sommets noirs sont dans l’ensemble E, et les sommets blancssont dans la file de priorités min F = S − E. (a) La situation juste avant la première itération dela boucle tant que des lignes 4–8. Le sommet gris contient la valeur minimale de d et est choisicomme sommet u à la ligne 5. (b)–(f) La situation après les itérations successives de la boucletant que. A chaque étape, le sommet gris est celui choisi comme sommet u à la ligne 5 del’itération suivante. Les valeurs d et p représentées en (f) sont les valeurs finales.
L’algorithme de Dijkstra relâche les arcs comme illustré à la figure 24.6. La ligne 1effectue l’initialisation habituelle des valeurs d et p, et la ligne 2 initialise l’ensembleE. L’algorithme conserve l’invariant suivant : F = S − E au début de chaque itération
52
Lélia Blin Algorithmique des graphes
Exemple
578 24 • Plus courts chemins à origine unique
L’algorithme de Dijkstra gère un ensemble E de sommets dont les longueurs finalesde plus court chemin à partir de l’origine s ont déjà été calculées. A chaque itération,l’algorithme choisit le sommet u ∈ S − E dont l’estimation de plus court chemin estminimale, ajoute u à E, puis relâche tous les arcs partant de u. Dans l’implémentationci-après, on gère une file de priorités min F de sommets, en prenant pour clé la valeurde leur attribut d.
DIJKSTRA(G, w, s)1 SOURCE-UNIQUE-INITIALISATION(G, s)2 E ← ∅3 F ← S[G]4 tant que F fi ∅5 faire u ← EXTRAIRE-MIN(F)6 E ← E ∪ {u}7 pour chaque sommet v ∈ Adj[u]8 faire RELÂCHER(u, v, w)
0
∞ ∞
∞ ∞
0
∞
∞
1
2
10
5
(c)
10
5
0
8
5
14
7
0
8
5
13
7
0
8
5
9
7
0
5
9
7
8
6432 9
7
s
t x
y z
1
2
10
5
(f)
6432 9
7
s
t x
y z
1
2
10
5
(b)
6432 9
7
s
t x
y z
1
2
10
5
(e)
6432 9
7
s
t x
y z
1
2
10
5
(a)
6432 9
7
s
t x
y z
1
2
10
5
(d)
6432 9
7
s
t x
y z
Figure 24.6 L’exécution de l’algorithme de Dijkstra. L’origine s est le sommet le plus à gauche.Les estimations de plus court chemin sont représentées à l’intérieur des sommets, et les arcs engris indiquent les prédécesseurs. Les sommets noirs sont dans l’ensemble E, et les sommets blancssont dans la file de priorités min F = S − E. (a) La situation juste avant la première itération dela boucle tant que des lignes 4–8. Le sommet gris contient la valeur minimale de d et est choisicomme sommet u à la ligne 5. (b)–(f) La situation après les itérations successives de la boucletant que. A chaque étape, le sommet gris est celui choisi comme sommet u à la ligne 5 del’itération suivante. Les valeurs d et p représentées en (f) sont les valeurs finales.
L’algorithme de Dijkstra relâche les arcs comme illustré à la figure 24.6. La ligne 1effectue l’initialisation habituelle des valeurs d et p, et la ligne 2 initialise l’ensembleE. L’algorithme conserve l’invariant suivant : F = S − E au début de chaque itération
F={t,x,y,z}E={s}
s t x y z
0 ∞ ∞ ∞ ∞
578 24 • Plus courts chemins à origine unique
L’algorithme de Dijkstra gère un ensemble E de sommets dont les longueurs finalesde plus court chemin à partir de l’origine s ont déjà été calculées. A chaque itération,l’algorithme choisit le sommet u ∈ S − E dont l’estimation de plus court chemin estminimale, ajoute u à E, puis relâche tous les arcs partant de u. Dans l’implémentationci-après, on gère une file de priorités min F de sommets, en prenant pour clé la valeurde leur attribut d.
DIJKSTRA(G, w, s)1 SOURCE-UNIQUE-INITIALISATION(G, s)2 E ← ∅3 F ← S[G]4 tant que F fi ∅5 faire u ← EXTRAIRE-MIN(F)6 E ← E ∪ {u}7 pour chaque sommet v ∈ Adj[u]8 faire RELÂCHER(u, v, w)
0
∞ ∞
∞ ∞
0
∞
∞
1
2
10
5
(c)
10
5
0
8
5
14
7
0
8
5
13
7
0
8
5
9
7
0
5
9
7
8
6432 9
7
s
t x
y z
1
2
10
5
(f)
6432 9
7
s
t x
y z
1
2
10
5
(b)
6432 9
7
s
t x
y z
1
2
10
5
(e)
6432 9
7
s
t x
y z
1
2
10
5
(a)
6432 9
7
s
t x
y z
1
2
10
5
(d)
6432 9
7
s
t x
y z
Figure 24.6 L’exécution de l’algorithme de Dijkstra. L’origine s est le sommet le plus à gauche.Les estimations de plus court chemin sont représentées à l’intérieur des sommets, et les arcs engris indiquent les prédécesseurs. Les sommets noirs sont dans l’ensemble E, et les sommets blancssont dans la file de priorités min F = S − E. (a) La situation juste avant la première itération dela boucle tant que des lignes 4–8. Le sommet gris contient la valeur minimale de d et est choisicomme sommet u à la ligne 5. (b)–(f) La situation après les itérations successives de la boucletant que. A chaque étape, le sommet gris est celui choisi comme sommet u à la ligne 5 del’itération suivante. Les valeurs d et p représentées en (f) sont les valeurs finales.
L’algorithme de Dijkstra relâche les arcs comme illustré à la figure 24.6. La ligne 1effectue l’initialisation habituelle des valeurs d et p, et la ligne 2 initialise l’ensembleE. L’algorithme conserve l’invariant suivant : F = S − E au début de chaque itération
53
Lélia Blin Algorithmique des graphes
Exemple
F={t,x,y,z}E={s}
578 24 • Plus courts chemins à origine unique
L’algorithme de Dijkstra gère un ensemble E de sommets dont les longueurs finalesde plus court chemin à partir de l’origine s ont déjà été calculées. A chaque itération,l’algorithme choisit le sommet u ∈ S − E dont l’estimation de plus court chemin estminimale, ajoute u à E, puis relâche tous les arcs partant de u. Dans l’implémentationci-après, on gère une file de priorités min F de sommets, en prenant pour clé la valeurde leur attribut d.
DIJKSTRA(G, w, s)1 SOURCE-UNIQUE-INITIALISATION(G, s)2 E ← ∅3 F ← S[G]4 tant que F fi ∅5 faire u ← EXTRAIRE-MIN(F)6 E ← E ∪ {u}7 pour chaque sommet v ∈ Adj[u]8 faire RELÂCHER(u, v, w)
0
∞ ∞
∞ ∞
0
∞
∞
1
2
10
5
(c)
10
5
0
8
5
14
7
0
8
5
13
7
0
8
5
9
7
0
5
9
7
8
6432 9
7
s
t x
y z
1
2
10
5
(f)
6432 9
7
s
t x
y z
1
2
10
5
(b)
6432 9
7
s
t x
y z
1
2
10
5
(e)
6432 9
7
s
t x
y z
1
2
10
5
(a)
6432 9
7
s
t x
y z
1
2
10
5
(d)
6432 9
7
s
t x
y z
Figure 24.6 L’exécution de l’algorithme de Dijkstra. L’origine s est le sommet le plus à gauche.Les estimations de plus court chemin sont représentées à l’intérieur des sommets, et les arcs engris indiquent les prédécesseurs. Les sommets noirs sont dans l’ensemble E, et les sommets blancssont dans la file de priorités min F = S − E. (a) La situation juste avant la première itération dela boucle tant que des lignes 4–8. Le sommet gris contient la valeur minimale de d et est choisicomme sommet u à la ligne 5. (b)–(f) La situation après les itérations successives de la boucletant que. A chaque étape, le sommet gris est celui choisi comme sommet u à la ligne 5 del’itération suivante. Les valeurs d et p représentées en (f) sont les valeurs finales.
L’algorithme de Dijkstra relâche les arcs comme illustré à la figure 24.6. La ligne 1effectue l’initialisation habituelle des valeurs d et p, et la ligne 2 initialise l’ensembleE. L’algorithme conserve l’invariant suivant : F = S − E au début de chaque itération
s t x y z
0 ∞ ∞ ∞ ∞
10s ∞ 5s ∞
578 24 • Plus courts chemins à origine unique
L’algorithme de Dijkstra gère un ensemble E de sommets dont les longueurs finalesde plus court chemin à partir de l’origine s ont déjà été calculées. A chaque itération,l’algorithme choisit le sommet u ∈ S − E dont l’estimation de plus court chemin estminimale, ajoute u à E, puis relâche tous les arcs partant de u. Dans l’implémentationci-après, on gère une file de priorités min F de sommets, en prenant pour clé la valeurde leur attribut d.
DIJKSTRA(G, w, s)1 SOURCE-UNIQUE-INITIALISATION(G, s)2 E ← ∅3 F ← S[G]4 tant que F fi ∅5 faire u ← EXTRAIRE-MIN(F)6 E ← E ∪ {u}7 pour chaque sommet v ∈ Adj[u]8 faire RELÂCHER(u, v, w)
0
∞ ∞
∞ ∞
0
∞
∞
1
2
10
5
(c)
10
5
0
8
5
14
7
0
8
5
13
7
0
8
5
9
7
0
5
9
7
8
6432 9
7
s
t x
y z
1
2
10
5
(f)
6432 9
7
s
t x
y z
1
2
10
5
(b)
6432 9
7
s
t x
y z
1
2
10
5
(e)
6432 9
7
s
t x
y z
1
2
10
5
(a)
6432 9
7
s
t x
y z
1
2
10
5
(d)
6432 9
7
s
t x
y z
Figure 24.6 L’exécution de l’algorithme de Dijkstra. L’origine s est le sommet le plus à gauche.Les estimations de plus court chemin sont représentées à l’intérieur des sommets, et les arcs engris indiquent les prédécesseurs. Les sommets noirs sont dans l’ensemble E, et les sommets blancssont dans la file de priorités min F = S − E. (a) La situation juste avant la première itération dela boucle tant que des lignes 4–8. Le sommet gris contient la valeur minimale de d et est choisicomme sommet u à la ligne 5. (b)–(f) La situation après les itérations successives de la boucletant que. A chaque étape, le sommet gris est celui choisi comme sommet u à la ligne 5 del’itération suivante. Les valeurs d et p représentées en (f) sont les valeurs finales.
L’algorithme de Dijkstra relâche les arcs comme illustré à la figure 24.6. La ligne 1effectue l’initialisation habituelle des valeurs d et p, et la ligne 2 initialise l’ensembleE. L’algorithme conserve l’invariant suivant : F = S − E au début de chaque itération
54
Lélia Blin Algorithmique des graphes
Exemple
F={t,x,z}E={s,y}
578 24 • Plus courts chemins à origine unique
L’algorithme de Dijkstra gère un ensemble E de sommets dont les longueurs finalesde plus court chemin à partir de l’origine s ont déjà été calculées. A chaque itération,l’algorithme choisit le sommet u ∈ S − E dont l’estimation de plus court chemin estminimale, ajoute u à E, puis relâche tous les arcs partant de u. Dans l’implémentationci-après, on gère une file de priorités min F de sommets, en prenant pour clé la valeurde leur attribut d.
DIJKSTRA(G, w, s)1 SOURCE-UNIQUE-INITIALISATION(G, s)2 E ← ∅3 F ← S[G]4 tant que F fi ∅5 faire u ← EXTRAIRE-MIN(F)6 E ← E ∪ {u}7 pour chaque sommet v ∈ Adj[u]8 faire RELÂCHER(u, v, w)
0
∞ ∞
∞ ∞
0
∞
∞
1
2
10
5
(c)
10
5
0
8
5
14
7
0
8
5
13
7
0
8
5
9
7
0
5
9
7
8
6432 9
7
s
t x
y z
1
2
10
5
(f)
6432 9
7
s
t x
y z
1
2
10
5
(b)
6432 9
7
s
t x
y z
1
2
10
5
(e)
6432 9
7
s
t x
y z
1
2
10
5
(a)
6432 9
7
s
t x
y z
1
2
10
5
(d)
6432 9
7
s
t x
y z
Figure 24.6 L’exécution de l’algorithme de Dijkstra. L’origine s est le sommet le plus à gauche.Les estimations de plus court chemin sont représentées à l’intérieur des sommets, et les arcs engris indiquent les prédécesseurs. Les sommets noirs sont dans l’ensemble E, et les sommets blancssont dans la file de priorités min F = S − E. (a) La situation juste avant la première itération dela boucle tant que des lignes 4–8. Le sommet gris contient la valeur minimale de d et est choisicomme sommet u à la ligne 5. (b)–(f) La situation après les itérations successives de la boucletant que. A chaque étape, le sommet gris est celui choisi comme sommet u à la ligne 5 del’itération suivante. Les valeurs d et p représentées en (f) sont les valeurs finales.
L’algorithme de Dijkstra relâche les arcs comme illustré à la figure 24.6. La ligne 1effectue l’initialisation habituelle des valeurs d et p, et la ligne 2 initialise l’ensembleE. L’algorithme conserve l’invariant suivant : F = S − E au début de chaque itération
s t x y z
0 ∞ ∞ ∞ ∞
10s ∞ 5s ∞
8y 14y 7y
578 24 • Plus courts chemins à origine unique
L’algorithme de Dijkstra gère un ensemble E de sommets dont les longueurs finalesde plus court chemin à partir de l’origine s ont déjà été calculées. A chaque itération,l’algorithme choisit le sommet u ∈ S − E dont l’estimation de plus court chemin estminimale, ajoute u à E, puis relâche tous les arcs partant de u. Dans l’implémentationci-après, on gère une file de priorités min F de sommets, en prenant pour clé la valeurde leur attribut d.
DIJKSTRA(G, w, s)1 SOURCE-UNIQUE-INITIALISATION(G, s)2 E ← ∅3 F ← S[G]4 tant que F fi ∅5 faire u ← EXTRAIRE-MIN(F)6 E ← E ∪ {u}7 pour chaque sommet v ∈ Adj[u]8 faire RELÂCHER(u, v, w)
0
∞ ∞
∞ ∞
0
∞
∞
1
2
10
5
(c)
10
5
0
8
5
14
7
0
8
5
13
7
0
8
5
9
7
0
5
9
7
8
6432 9
7
s
t x
y z
1
2
10
5
(f)
6432 9
7
s
t x
y z
1
2
10
5
(b)
6432 9
7
s
t x
y z
1
2
10
5
(e)
6432 9
7
s
t x
y z
1
2
10
5
(a)
6432 9
7
s
t x
y z
1
2
10
5
(d)
6432 9
7
s
t x
y z
Figure 24.6 L’exécution de l’algorithme de Dijkstra. L’origine s est le sommet le plus à gauche.Les estimations de plus court chemin sont représentées à l’intérieur des sommets, et les arcs engris indiquent les prédécesseurs. Les sommets noirs sont dans l’ensemble E, et les sommets blancssont dans la file de priorités min F = S − E. (a) La situation juste avant la première itération dela boucle tant que des lignes 4–8. Le sommet gris contient la valeur minimale de d et est choisicomme sommet u à la ligne 5. (b)–(f) La situation après les itérations successives de la boucletant que. A chaque étape, le sommet gris est celui choisi comme sommet u à la ligne 5 del’itération suivante. Les valeurs d et p représentées en (f) sont les valeurs finales.
L’algorithme de Dijkstra relâche les arcs comme illustré à la figure 24.6. La ligne 1effectue l’initialisation habituelle des valeurs d et p, et la ligne 2 initialise l’ensembleE. L’algorithme conserve l’invariant suivant : F = S − E au début de chaque itération
55
Lélia Blin Algorithmique des graphes
Exemple
F={t,x}E={s,y,z}
578 24 • Plus courts chemins à origine unique
L’algorithme de Dijkstra gère un ensemble E de sommets dont les longueurs finalesde plus court chemin à partir de l’origine s ont déjà été calculées. A chaque itération,l’algorithme choisit le sommet u ∈ S − E dont l’estimation de plus court chemin estminimale, ajoute u à E, puis relâche tous les arcs partant de u. Dans l’implémentationci-après, on gère une file de priorités min F de sommets, en prenant pour clé la valeurde leur attribut d.
DIJKSTRA(G, w, s)1 SOURCE-UNIQUE-INITIALISATION(G, s)2 E ← ∅3 F ← S[G]4 tant que F fi ∅5 faire u ← EXTRAIRE-MIN(F)6 E ← E ∪ {u}7 pour chaque sommet v ∈ Adj[u]8 faire RELÂCHER(u, v, w)
0
∞ ∞
∞ ∞
0
∞
∞
1
2
10
5
(c)
10
5
0
8
5
14
7
0
8
5
13
7
0
8
5
9
7
0
5
9
7
8
6432 9
7
s
t x
y z
1
2
10
5
(f)
6432 9
7
s
t x
y z
1
2
10
5
(b)
6432 9
7
s
t x
y z
1
2
10
5
(e)
6432 9
7
s
t x
y z
1
2
10
5
(a)
6432 9
7
s
t x
y z
1
2
10
5
(d)
6432 9
7
s
t x
y z
Figure 24.6 L’exécution de l’algorithme de Dijkstra. L’origine s est le sommet le plus à gauche.Les estimations de plus court chemin sont représentées à l’intérieur des sommets, et les arcs engris indiquent les prédécesseurs. Les sommets noirs sont dans l’ensemble E, et les sommets blancssont dans la file de priorités min F = S − E. (a) La situation juste avant la première itération dela boucle tant que des lignes 4–8. Le sommet gris contient la valeur minimale de d et est choisicomme sommet u à la ligne 5. (b)–(f) La situation après les itérations successives de la boucletant que. A chaque étape, le sommet gris est celui choisi comme sommet u à la ligne 5 del’itération suivante. Les valeurs d et p représentées en (f) sont les valeurs finales.
L’algorithme de Dijkstra relâche les arcs comme illustré à la figure 24.6. La ligne 1effectue l’initialisation habituelle des valeurs d et p, et la ligne 2 initialise l’ensembleE. L’algorithme conserve l’invariant suivant : F = S − E au début de chaque itération
s t x y z
0 ∞ ∞ ∞ ∞
10s ∞ 5s ∞
8y 14y 7y
8y 13z
578 24 • Plus courts chemins à origine unique
L’algorithme de Dijkstra gère un ensemble E de sommets dont les longueurs finalesde plus court chemin à partir de l’origine s ont déjà été calculées. A chaque itération,l’algorithme choisit le sommet u ∈ S − E dont l’estimation de plus court chemin estminimale, ajoute u à E, puis relâche tous les arcs partant de u. Dans l’implémentationci-après, on gère une file de priorités min F de sommets, en prenant pour clé la valeurde leur attribut d.
DIJKSTRA(G, w, s)1 SOURCE-UNIQUE-INITIALISATION(G, s)2 E ← ∅3 F ← S[G]4 tant que F fi ∅5 faire u ← EXTRAIRE-MIN(F)6 E ← E ∪ {u}7 pour chaque sommet v ∈ Adj[u]8 faire RELÂCHER(u, v, w)
0
∞ ∞
∞ ∞
0
∞
∞
1
2
10
5
(c)
10
5
0
8
5
14
7
0
8
5
13
7
0
8
5
9
7
0
5
9
7
8
6432 9
7
s
t x
y z
1
2
10
5
(f)
6432 9
7
s
t x
y z
1
2
10
5
(b)
6432 9
7
s
t x
y z
1
2
10
5
(e)
6432 9
7
s
t x
y z
1
2
10
5
(a)
6432 9
7
s
t x
y z
1
2
10
5
(d)
6432 9
7
s
t x
y z
Figure 24.6 L’exécution de l’algorithme de Dijkstra. L’origine s est le sommet le plus à gauche.Les estimations de plus court chemin sont représentées à l’intérieur des sommets, et les arcs engris indiquent les prédécesseurs. Les sommets noirs sont dans l’ensemble E, et les sommets blancssont dans la file de priorités min F = S − E. (a) La situation juste avant la première itération dela boucle tant que des lignes 4–8. Le sommet gris contient la valeur minimale de d et est choisicomme sommet u à la ligne 5. (b)–(f) La situation après les itérations successives de la boucletant que. A chaque étape, le sommet gris est celui choisi comme sommet u à la ligne 5 del’itération suivante. Les valeurs d et p représentées en (f) sont les valeurs finales.
L’algorithme de Dijkstra relâche les arcs comme illustré à la figure 24.6. La ligne 1effectue l’initialisation habituelle des valeurs d et p, et la ligne 2 initialise l’ensembleE. L’algorithme conserve l’invariant suivant : F = S − E au début de chaque itération
56
Lélia Blin Algorithmique des graphes
Exemple
F={x}E={s,y,z,t}
578 24 • Plus courts chemins à origine unique
L’algorithme de Dijkstra gère un ensemble E de sommets dont les longueurs finalesde plus court chemin à partir de l’origine s ont déjà été calculées. A chaque itération,l’algorithme choisit le sommet u ∈ S − E dont l’estimation de plus court chemin estminimale, ajoute u à E, puis relâche tous les arcs partant de u. Dans l’implémentationci-après, on gère une file de priorités min F de sommets, en prenant pour clé la valeurde leur attribut d.
DIJKSTRA(G, w, s)1 SOURCE-UNIQUE-INITIALISATION(G, s)2 E ← ∅3 F ← S[G]4 tant que F fi ∅5 faire u ← EXTRAIRE-MIN(F)6 E ← E ∪ {u}7 pour chaque sommet v ∈ Adj[u]8 faire RELÂCHER(u, v, w)
0
∞ ∞
∞ ∞
0
∞
∞
1
2
10
5
(c)
10
5
0
8
5
14
7
0
8
5
13
7
0
8
5
9
7
0
5
9
7
8
6432 9
7
s
t x
y z
1
2
10
5
(f)
6432 9
7
s
t x
y z
1
2
10
5
(b)
6432 9
7
s
t x
y z
1
2
10
5
(e)
6432 9
7
s
t x
y z
1
2
10
5
(a)
6432 9
7
s
t x
y z
1
2
10
5
(d)
6432 9
7
s
t x
y z
Figure 24.6 L’exécution de l’algorithme de Dijkstra. L’origine s est le sommet le plus à gauche.Les estimations de plus court chemin sont représentées à l’intérieur des sommets, et les arcs engris indiquent les prédécesseurs. Les sommets noirs sont dans l’ensemble E, et les sommets blancssont dans la file de priorités min F = S − E. (a) La situation juste avant la première itération dela boucle tant que des lignes 4–8. Le sommet gris contient la valeur minimale de d et est choisicomme sommet u à la ligne 5. (b)–(f) La situation après les itérations successives de la boucletant que. A chaque étape, le sommet gris est celui choisi comme sommet u à la ligne 5 del’itération suivante. Les valeurs d et p représentées en (f) sont les valeurs finales.
L’algorithme de Dijkstra relâche les arcs comme illustré à la figure 24.6. La ligne 1effectue l’initialisation habituelle des valeurs d et p, et la ligne 2 initialise l’ensembleE. L’algorithme conserve l’invariant suivant : F = S − E au début de chaque itération
s t x y z
0 ∞ ∞ ∞ ∞
10s ∞ 5s ∞
8y 14y 7y
8y 13z
9t
578 24 • Plus courts chemins à origine unique
L’algorithme de Dijkstra gère un ensemble E de sommets dont les longueurs finalesde plus court chemin à partir de l’origine s ont déjà été calculées. A chaque itération,l’algorithme choisit le sommet u ∈ S − E dont l’estimation de plus court chemin estminimale, ajoute u à E, puis relâche tous les arcs partant de u. Dans l’implémentationci-après, on gère une file de priorités min F de sommets, en prenant pour clé la valeurde leur attribut d.
DIJKSTRA(G, w, s)1 SOURCE-UNIQUE-INITIALISATION(G, s)2 E ← ∅3 F ← S[G]4 tant que F fi ∅5 faire u ← EXTRAIRE-MIN(F)6 E ← E ∪ {u}7 pour chaque sommet v ∈ Adj[u]8 faire RELÂCHER(u, v, w)
0
∞ ∞
∞ ∞
0
∞
∞
1
2
10
5
(c)
10
5
0
8
5
14
7
0
8
5
13
7
0
8
5
9
7
0
5
9
7
8
6432 9
7
s
t x
y z
1
2
10
5
(f)
6432 9
7
s
t x
y z
1
2
10
5
(b)
6432 9
7
s
t x
y z
1
2
10
5
(e)
6432 9
7
s
t x
y z
1
2
10
5
(a)
6432 9
7
s
t x
y z
1
2
10
5
(d)
6432 9
7
s
t x
y z
Figure 24.6 L’exécution de l’algorithme de Dijkstra. L’origine s est le sommet le plus à gauche.Les estimations de plus court chemin sont représentées à l’intérieur des sommets, et les arcs engris indiquent les prédécesseurs. Les sommets noirs sont dans l’ensemble E, et les sommets blancssont dans la file de priorités min F = S − E. (a) La situation juste avant la première itération dela boucle tant que des lignes 4–8. Le sommet gris contient la valeur minimale de d et est choisicomme sommet u à la ligne 5. (b)–(f) La situation après les itérations successives de la boucletant que. A chaque étape, le sommet gris est celui choisi comme sommet u à la ligne 5 del’itération suivante. Les valeurs d et p représentées en (f) sont les valeurs finales.
L’algorithme de Dijkstra relâche les arcs comme illustré à la figure 24.6. La ligne 1effectue l’initialisation habituelle des valeurs d et p, et la ligne 2 initialise l’ensembleE. L’algorithme conserve l’invariant suivant : F = S − E au début de chaque itération
57
Lélia Blin Algorithmique des graphes
Exemple
F={}E={s,y,z,t,x}
578 24 • Plus courts chemins à origine unique
L’algorithme de Dijkstra gère un ensemble E de sommets dont les longueurs finalesde plus court chemin à partir de l’origine s ont déjà été calculées. A chaque itération,l’algorithme choisit le sommet u ∈ S − E dont l’estimation de plus court chemin estminimale, ajoute u à E, puis relâche tous les arcs partant de u. Dans l’implémentationci-après, on gère une file de priorités min F de sommets, en prenant pour clé la valeurde leur attribut d.
DIJKSTRA(G, w, s)1 SOURCE-UNIQUE-INITIALISATION(G, s)2 E ← ∅3 F ← S[G]4 tant que F fi ∅5 faire u ← EXTRAIRE-MIN(F)6 E ← E ∪ {u}7 pour chaque sommet v ∈ Adj[u]8 faire RELÂCHER(u, v, w)
0
∞ ∞
∞ ∞
0
∞
∞
1
2
10
5
(c)
10
5
0
8
5
14
7
0
8
5
13
7
0
8
5
9
7
0
5
9
7
8
6432 9
7
s
t x
y z
1
2
10
5
(f)
6432 9
7
s
t x
y z
1
2
10
5
(b)
6432 9
7
s
t x
y z
1
2
10
5
(e)
6432 9
7
s
t x
y z
1
2
10
5
(a)
6432 9
7
s
t x
y z
1
2
10
5
(d)
6432 9
7
s
t x
y z
Figure 24.6 L’exécution de l’algorithme de Dijkstra. L’origine s est le sommet le plus à gauche.Les estimations de plus court chemin sont représentées à l’intérieur des sommets, et les arcs engris indiquent les prédécesseurs. Les sommets noirs sont dans l’ensemble E, et les sommets blancssont dans la file de priorités min F = S − E. (a) La situation juste avant la première itération dela boucle tant que des lignes 4–8. Le sommet gris contient la valeur minimale de d et est choisicomme sommet u à la ligne 5. (b)–(f) La situation après les itérations successives de la boucletant que. A chaque étape, le sommet gris est celui choisi comme sommet u à la ligne 5 del’itération suivante. Les valeurs d et p représentées en (f) sont les valeurs finales.
L’algorithme de Dijkstra relâche les arcs comme illustré à la figure 24.6. La ligne 1effectue l’initialisation habituelle des valeurs d et p, et la ligne 2 initialise l’ensembleE. L’algorithme conserve l’invariant suivant : F = S − E au début de chaque itération
s t x y z
0 ∞ ∞ ∞ ∞
10s ∞ 5s ∞
8y 14y 7y
8y 13z
9t
578 24 • Plus courts chemins à origine unique
L’algorithme de Dijkstra gère un ensemble E de sommets dont les longueurs finalesde plus court chemin à partir de l’origine s ont déjà été calculées. A chaque itération,l’algorithme choisit le sommet u ∈ S − E dont l’estimation de plus court chemin estminimale, ajoute u à E, puis relâche tous les arcs partant de u. Dans l’implémentationci-après, on gère une file de priorités min F de sommets, en prenant pour clé la valeurde leur attribut d.
DIJKSTRA(G, w, s)1 SOURCE-UNIQUE-INITIALISATION(G, s)2 E ← ∅3 F ← S[G]4 tant que F fi ∅5 faire u ← EXTRAIRE-MIN(F)6 E ← E ∪ {u}7 pour chaque sommet v ∈ Adj[u]8 faire RELÂCHER(u, v, w)
0
∞ ∞
∞ ∞
0
∞
∞
1
2
10
5
(c)
10
5
0
8
5
14
7
0
8
5
13
7
0
8
5
9
7
0
5
9
7
8
6432 9
7
s
t x
y z
1
2
10
5
(f)
6432 9
7
s
t x
y z
1
2
10
5
(b)
6432 9
7
s
t x
y z
1
2
10
5
(e)
6432 9
7
s
t x
y z
1
2
10
5
(a)
6432 9
7
s
t x
y z
1
2
10
5
(d)
6432 9
7
s
t x
y z
Figure 24.6 L’exécution de l’algorithme de Dijkstra. L’origine s est le sommet le plus à gauche.Les estimations de plus court chemin sont représentées à l’intérieur des sommets, et les arcs engris indiquent les prédécesseurs. Les sommets noirs sont dans l’ensemble E, et les sommets blancssont dans la file de priorités min F = S − E. (a) La situation juste avant la première itération dela boucle tant que des lignes 4–8. Le sommet gris contient la valeur minimale de d et est choisicomme sommet u à la ligne 5. (b)–(f) La situation après les itérations successives de la boucletant que. A chaque étape, le sommet gris est celui choisi comme sommet u à la ligne 5 del’itération suivante. Les valeurs d et p représentées en (f) sont les valeurs finales.
L’algorithme de Dijkstra relâche les arcs comme illustré à la figure 24.6. La ligne 1effectue l’initialisation habituelle des valeurs d et p, et la ligne 2 initialise l’ensembleE. L’algorithme conserve l’invariant suivant : F = S − E au début de chaque itération
58
Lélia Blin Algorithmique des graphes
Exemple
F={}E={s,y,z,t,x}
578 24 • Plus courts chemins à origine unique
L’algorithme de Dijkstra gère un ensemble E de sommets dont les longueurs finalesde plus court chemin à partir de l’origine s ont déjà été calculées. A chaque itération,l’algorithme choisit le sommet u ∈ S − E dont l’estimation de plus court chemin estminimale, ajoute u à E, puis relâche tous les arcs partant de u. Dans l’implémentationci-après, on gère une file de priorités min F de sommets, en prenant pour clé la valeurde leur attribut d.
DIJKSTRA(G, w, s)1 SOURCE-UNIQUE-INITIALISATION(G, s)2 E ← ∅3 F ← S[G]4 tant que F fi ∅5 faire u ← EXTRAIRE-MIN(F)6 E ← E ∪ {u}7 pour chaque sommet v ∈ Adj[u]8 faire RELÂCHER(u, v, w)
0
∞ ∞
∞ ∞
0
∞
∞
1
2
10
5
(c)
10
5
0
8
5
14
7
0
8
5
13
7
0
8
5
9
7
0
5
9
7
8
6432 9
7
s
t x
y z
1
2
10
5
(f)
6432 9
7
s
t x
y z
1
2
10
5
(b)
6432 9
7
s
t x
y z
1
2
10
5
(e)
6432 9
7
s
t x
y z
1
2
10
5
(a)
6432 9
7
s
t x
y z
1
2
10
5
(d)
6432 9
7
s
t x
y z
Figure 24.6 L’exécution de l’algorithme de Dijkstra. L’origine s est le sommet le plus à gauche.Les estimations de plus court chemin sont représentées à l’intérieur des sommets, et les arcs engris indiquent les prédécesseurs. Les sommets noirs sont dans l’ensemble E, et les sommets blancssont dans la file de priorités min F = S − E. (a) La situation juste avant la première itération dela boucle tant que des lignes 4–8. Le sommet gris contient la valeur minimale de d et est choisicomme sommet u à la ligne 5. (b)–(f) La situation après les itérations successives de la boucletant que. A chaque étape, le sommet gris est celui choisi comme sommet u à la ligne 5 del’itération suivante. Les valeurs d et p représentées en (f) sont les valeurs finales.
L’algorithme de Dijkstra relâche les arcs comme illustré à la figure 24.6. La ligne 1effectue l’initialisation habituelle des valeurs d et p, et la ligne 2 initialise l’ensembleE. L’algorithme conserve l’invariant suivant : F = S − E au début de chaque itération
s t x y z
0 ∞ ∞ ∞ ∞
10s ∞ 5s ∞
8y 14y 7y
8y 13z
9t
578 24 • Plus courts chemins à origine unique
L’algorithme de Dijkstra gère un ensemble E de sommets dont les longueurs finalesde plus court chemin à partir de l’origine s ont déjà été calculées. A chaque itération,l’algorithme choisit le sommet u ∈ S − E dont l’estimation de plus court chemin estminimale, ajoute u à E, puis relâche tous les arcs partant de u. Dans l’implémentationci-après, on gère une file de priorités min F de sommets, en prenant pour clé la valeurde leur attribut d.
DIJKSTRA(G, w, s)1 SOURCE-UNIQUE-INITIALISATION(G, s)2 E ← ∅3 F ← S[G]4 tant que F fi ∅5 faire u ← EXTRAIRE-MIN(F)6 E ← E ∪ {u}7 pour chaque sommet v ∈ Adj[u]8 faire RELÂCHER(u, v, w)
0
∞ ∞
∞ ∞
0
∞
∞
1
2
10
5
(c)
10
5
0
8
5
14
7
0
8
5
13
7
0
8
5
9
7
0
5
9
7
8
6432 9
7
s
t x
y z
1
2
10
5
(f)
6432 9
7
s
t x
y z
1
2
10
5
(b)
6432 9
7
s
t x
y z
1
2
10
5
(e)
6432 9
7
s
t x
y z
1
2
10
5
(a)
6432 9
7
s
t x
y z
1
2
10
5
(d)
6432 9
7
s
t x
y z
Figure 24.6 L’exécution de l’algorithme de Dijkstra. L’origine s est le sommet le plus à gauche.Les estimations de plus court chemin sont représentées à l’intérieur des sommets, et les arcs engris indiquent les prédécesseurs. Les sommets noirs sont dans l’ensemble E, et les sommets blancssont dans la file de priorités min F = S − E. (a) La situation juste avant la première itération dela boucle tant que des lignes 4–8. Le sommet gris contient la valeur minimale de d et est choisicomme sommet u à la ligne 5. (b)–(f) La situation après les itérations successives de la boucletant que. A chaque étape, le sommet gris est celui choisi comme sommet u à la ligne 5 del’itération suivante. Les valeurs d et p représentées en (f) sont les valeurs finales.
L’algorithme de Dijkstra relâche les arcs comme illustré à la figure 24.6. La ligne 1effectue l’initialisation habituelle des valeurs d et p, et la ligne 2 initialise l’ensembleE. L’algorithme conserve l’invariant suivant : F = S − E au début de chaque itération
59
Lélia Blin Algorithmique des graphes
Exemple
F={}E={s,y,z,t,x}
578 24 • Plus courts chemins à origine unique
L’algorithme de Dijkstra gère un ensemble E de sommets dont les longueurs finalesde plus court chemin à partir de l’origine s ont déjà été calculées. A chaque itération,l’algorithme choisit le sommet u ∈ S − E dont l’estimation de plus court chemin estminimale, ajoute u à E, puis relâche tous les arcs partant de u. Dans l’implémentationci-après, on gère une file de priorités min F de sommets, en prenant pour clé la valeurde leur attribut d.
DIJKSTRA(G, w, s)1 SOURCE-UNIQUE-INITIALISATION(G, s)2 E ← ∅3 F ← S[G]4 tant que F fi ∅5 faire u ← EXTRAIRE-MIN(F)6 E ← E ∪ {u}7 pour chaque sommet v ∈ Adj[u]8 faire RELÂCHER(u, v, w)
0
∞ ∞
∞ ∞
0
∞
∞
1
2
10
5
(c)
10
5
0
8
5
14
7
0
8
5
13
7
0
8
5
9
7
0
5
9
7
8
6432 9
7
s
t x
y z
1
2
10
5
(f)
6432 9
7
s
t x
y z
1
2
10
5
(b)
6432 9
7
s
t x
y z
1
2
10
5
(e)
6432 9
7
s
t x
y z
1
2
10
5
(a)
6432 9
7
s
t x
y z
1
2
10
5
(d)
6432 9
7
s
t x
y z
Figure 24.6 L’exécution de l’algorithme de Dijkstra. L’origine s est le sommet le plus à gauche.Les estimations de plus court chemin sont représentées à l’intérieur des sommets, et les arcs engris indiquent les prédécesseurs. Les sommets noirs sont dans l’ensemble E, et les sommets blancssont dans la file de priorités min F = S − E. (a) La situation juste avant la première itération dela boucle tant que des lignes 4–8. Le sommet gris contient la valeur minimale de d et est choisicomme sommet u à la ligne 5. (b)–(f) La situation après les itérations successives de la boucletant que. A chaque étape, le sommet gris est celui choisi comme sommet u à la ligne 5 del’itération suivante. Les valeurs d et p représentées en (f) sont les valeurs finales.
L’algorithme de Dijkstra relâche les arcs comme illustré à la figure 24.6. La ligne 1effectue l’initialisation habituelle des valeurs d et p, et la ligne 2 initialise l’ensembleE. L’algorithme conserve l’invariant suivant : F = S − E au début de chaque itération
s t x y z
0 ∞ ∞ ∞ ∞
10s ∞ 5s ∞
8y 14y 7y
8y 13z
9t
578 24 • Plus courts chemins à origine unique
L’algorithme de Dijkstra gère un ensemble E de sommets dont les longueurs finalesde plus court chemin à partir de l’origine s ont déjà été calculées. A chaque itération,l’algorithme choisit le sommet u ∈ S − E dont l’estimation de plus court chemin estminimale, ajoute u à E, puis relâche tous les arcs partant de u. Dans l’implémentationci-après, on gère une file de priorités min F de sommets, en prenant pour clé la valeurde leur attribut d.
DIJKSTRA(G, w, s)1 SOURCE-UNIQUE-INITIALISATION(G, s)2 E ← ∅3 F ← S[G]4 tant que F fi ∅5 faire u ← EXTRAIRE-MIN(F)6 E ← E ∪ {u}7 pour chaque sommet v ∈ Adj[u]8 faire RELÂCHER(u, v, w)
0
∞ ∞
∞ ∞
0
∞
∞
1
2
10
5
(c)
10
5
0
8
5
14
7
0
8
5
13
7
0
8
5
9
7
0
5
9
7
8
6432 9
7
s
t x
y z
1
2
10
5
(f)
6432 9
7
s
t x
y z
1
2
10
5
(b)
6432 9
7
s
t x
y z
1
2
10
5
(e)
6432 9
7
s
t x
y z
1
2
10
5
(a)
6432 9
7
s
t x
y z
1
2
10
5
(d)
6432 9
7
s
t x
y z
Figure 24.6 L’exécution de l’algorithme de Dijkstra. L’origine s est le sommet le plus à gauche.Les estimations de plus court chemin sont représentées à l’intérieur des sommets, et les arcs engris indiquent les prédécesseurs. Les sommets noirs sont dans l’ensemble E, et les sommets blancssont dans la file de priorités min F = S − E. (a) La situation juste avant la première itération dela boucle tant que des lignes 4–8. Le sommet gris contient la valeur minimale de d et est choisicomme sommet u à la ligne 5. (b)–(f) La situation après les itérations successives de la boucletant que. A chaque étape, le sommet gris est celui choisi comme sommet u à la ligne 5 del’itération suivante. Les valeurs d et p représentées en (f) sont les valeurs finales.
L’algorithme de Dijkstra relâche les arcs comme illustré à la figure 24.6. La ligne 1effectue l’initialisation habituelle des valeurs d et p, et la ligne 2 initialise l’ensembleE. L’algorithme conserve l’invariant suivant : F = S − E au début de chaque itération
60
Lélia Blin Algorithmique des graphes
Exemple
F={}E={s,y,z,t,x}
578 24 • Plus courts chemins à origine unique
L’algorithme de Dijkstra gère un ensemble E de sommets dont les longueurs finalesde plus court chemin à partir de l’origine s ont déjà été calculées. A chaque itération,l’algorithme choisit le sommet u ∈ S − E dont l’estimation de plus court chemin estminimale, ajoute u à E, puis relâche tous les arcs partant de u. Dans l’implémentationci-après, on gère une file de priorités min F de sommets, en prenant pour clé la valeurde leur attribut d.
DIJKSTRA(G, w, s)1 SOURCE-UNIQUE-INITIALISATION(G, s)2 E ← ∅3 F ← S[G]4 tant que F fi ∅5 faire u ← EXTRAIRE-MIN(F)6 E ← E ∪ {u}7 pour chaque sommet v ∈ Adj[u]8 faire RELÂCHER(u, v, w)
0
∞ ∞
∞ ∞
0
∞
∞
1
2
10
5
(c)
10
5
0
8
5
14
7
0
8
5
13
7
0
8
5
9
7
0
5
9
7
8
6432 9
7
s
t x
y z
1
2
10
5
(f)
6432 9
7
s
t x
y z
1
2
10
5
(b)
6432 9
7
s
t x
y z
1
2
10
5
(e)
6432 9
7
s
t x
y z
1
2
10
5
(a)
6432 9
7
s
t x
y z
1
2
10
5
(d)
6432 9
7
s
t x
y z
Figure 24.6 L’exécution de l’algorithme de Dijkstra. L’origine s est le sommet le plus à gauche.Les estimations de plus court chemin sont représentées à l’intérieur des sommets, et les arcs engris indiquent les prédécesseurs. Les sommets noirs sont dans l’ensemble E, et les sommets blancssont dans la file de priorités min F = S − E. (a) La situation juste avant la première itération dela boucle tant que des lignes 4–8. Le sommet gris contient la valeur minimale de d et est choisicomme sommet u à la ligne 5. (b)–(f) La situation après les itérations successives de la boucletant que. A chaque étape, le sommet gris est celui choisi comme sommet u à la ligne 5 del’itération suivante. Les valeurs d et p représentées en (f) sont les valeurs finales.
L’algorithme de Dijkstra relâche les arcs comme illustré à la figure 24.6. La ligne 1effectue l’initialisation habituelle des valeurs d et p, et la ligne 2 initialise l’ensembleE. L’algorithme conserve l’invariant suivant : F = S − E au début de chaque itération
s t x y z
0 ∞ ∞ ∞ ∞
10s ∞ 5s ∞
8y 14y 7y
8y 13z
9t
578 24 • Plus courts chemins à origine unique
L’algorithme de Dijkstra gère un ensemble E de sommets dont les longueurs finalesde plus court chemin à partir de l’origine s ont déjà été calculées. A chaque itération,l’algorithme choisit le sommet u ∈ S − E dont l’estimation de plus court chemin estminimale, ajoute u à E, puis relâche tous les arcs partant de u. Dans l’implémentationci-après, on gère une file de priorités min F de sommets, en prenant pour clé la valeurde leur attribut d.
DIJKSTRA(G, w, s)1 SOURCE-UNIQUE-INITIALISATION(G, s)2 E ← ∅3 F ← S[G]4 tant que F fi ∅5 faire u ← EXTRAIRE-MIN(F)6 E ← E ∪ {u}7 pour chaque sommet v ∈ Adj[u]8 faire RELÂCHER(u, v, w)
0
∞ ∞
∞ ∞
0
∞
∞
1
2
10
5
(c)
10
5
0
8
5
14
7
0
8
5
13
7
0
8
5
9
7
0
5
9
7
8
6432 9
7
s
t x
y z
1
2
10
5
(f)
6432 9
7
s
t x
y z
1
2
10
5
(b)
6432 9
7
s
t x
y z
1
2
10
5
(e)
6432 9
7
s
t x
y z
1
2
10
5
(a)
6432 9
7
s
t x
y z
1
2
10
5
(d)
6432 9
7
s
t x
y z
Figure 24.6 L’exécution de l’algorithme de Dijkstra. L’origine s est le sommet le plus à gauche.Les estimations de plus court chemin sont représentées à l’intérieur des sommets, et les arcs engris indiquent les prédécesseurs. Les sommets noirs sont dans l’ensemble E, et les sommets blancssont dans la file de priorités min F = S − E. (a) La situation juste avant la première itération dela boucle tant que des lignes 4–8. Le sommet gris contient la valeur minimale de d et est choisicomme sommet u à la ligne 5. (b)–(f) La situation après les itérations successives de la boucletant que. A chaque étape, le sommet gris est celui choisi comme sommet u à la ligne 5 del’itération suivante. Les valeurs d et p représentées en (f) sont les valeurs finales.
L’algorithme de Dijkstra relâche les arcs comme illustré à la figure 24.6. La ligne 1effectue l’initialisation habituelle des valeurs d et p, et la ligne 2 initialise l’ensembleE. L’algorithme conserve l’invariant suivant : F = S − E au début de chaque itération
61
Lélia Blin Algorithmique des graphes
Autre exemple
A
B C
D E
F
2
1
1
5
3 2
1
4
6
62
Lélia Blin
Propriétés des plus court chemins
Théorie des graphes Cours de Lélia Blin3eme année de Licence
63
Lélia Blin Algorithmique des graphes
Inégalités triangulaires
❖ Propriété:❖ Pour tout arc (u,v) ∈ A, on a 𝛿(s,v) ≤ 𝛿(s,u) + w(u,v).
❖ Preuve par l’absurde:❖ Hypothèse: 𝛿(s,v) est le plus court chemin de s au
sommet u.❖ Si il existe 𝛿’(s,v)=𝛿(s,u) + w(u,v) tel que 𝛿(s,v) ‘< 𝛿(s,v)❖ Alors l’hypothèse est fausse
64
Lélia Blin Algorithmique des graphes
Propriété du majorant
❖ Propriété:❖ On a toujours d[v] ≥ 𝛿(s, v) pour tous les sommets v ∈ S
❖ Preuve par récurrence:❖ Cas de base: à l’initialisation d[v]=∞ si G est connexe (ou fortement
connexe) alors il existe un chemin de longues l ∈R si G n’est pas connexe 𝛿(s, v)=∞.
❖ Hypothèse de récurrence: Au relâchement i concernant v on a d[v] ≥ 𝛿(s, v).
65
Lélia Blin Algorithmique des graphes
Propriété du majorant
❖ Hypothèse de récurrence: Au relâchement i concernant v on a d[v] ≥ 𝛿(s, v).❖ Prouvons qu’au relâchement i+1 concernant v on a toujours d[v] ≥ 𝛿(s, v).
❖ Puisque l’on peut faire un relâchement i+1 c’est que l’on a un voisin u de v tel que: d[v]> d[u]+w(u,v).
❖ On a d[v]> d[u]+w(u,v)≥ 𝛿(s, v)
66
Lélia Blin Algorithmique des graphes
Propriété de convergence❖ Propriété:
❖ Si il n’existe plus aucun relâchement possible alors ∀v ∈ S on a d[v]=𝛿(s, v).
❖ Preuve❖ Trivial
❖ Remarque:❖ Un plus court chemin est constitué de plus court
chemin.
67
Lélia Blin Algorithmique des graphes
Propriété de sous-graphe prédécesseurs
❖ Une fois que d[v] = 𝛿(s, v) pour tout v ∈ S, le sous-graphe des prédécesseur est une arborescence de plus courts chemins de racine s.
68