Lycée La Martinière Monplaisir
Option Informatique 2eannée
Année 2016-2017
Algorithme de Floyd-Warshall
Algorithme de Floyd-Warshall
Judicaël Courant
13 décembre 2016
1 Introduction
Dans ce document, on considère un graphe G= (S, A)orienté et pondéré par des réels.
Notre objectif est de trouver un plus court chemin allant d’un sommet s1à un sommet
s2pour tout couple de sommets (s1, s2) = S2. Le but de l’algorithme de Floyd-Warshall
est de calculer ces plus courts chemins et leurs longueurs.
1.1 Cadre : graphe orienté pondéré complet
Remarque 1 1. La longueur d’un chemin est défini comme la somme des poids de
ses arcs.
2. Les pondérations sont des réels non nécessairement positifs.
3. S’il y a un cycle de poids strictement négatif, il n’y a pas de plus court chemin.
4. S’il n’y a pas de cycle de poids négatif, tout plus court chemin est simple.
5. S’il n’y a pas de cycle de poids strictement négatif, il y a toujours un plus court
chemin simple entre deux sommets fixés.
Démonstration : Exercice.
Exercice 1 Donner un minorant de la complexité en espace des résultats d’un algo-
rithme qui calcule ces longueurs. En déduire un minorant en temps.
La représentation du graphe par une matrice d’adjacence semble-t-elle pertinente ?
Justifiez.
Exercice 2 Dans un graphe G, donner une estimation asymptotique du nombre de che-
mins (simples) de longueur 1,2,3,4dans le cas le pire.
On peut donc craindre que la complexité du calcul des plus courts chemins soit très
élevée.
Judicaël Courant- 13 décembre 2016 1/10 Document sous licence Art Libre (http://artlibre.org)
Lycée La Martinière Monplaisir
Option Informatique 2eannée
Année 2016-2017
Algorithme de Floyd-Warshall
Remarque 2 (Astuce de calcul) Considérons un graphe G0= (S0, A0)pondéré par
des réels, c’est-à-dire muni d’une fonction w0:A0R. On peut alors construire un
graphe G= (S, A)pondéré par des éléments de R { +∞ }, c’est-à-dire munit d’une
fonction w:A0R∪ { +∞ } de façon suivante :
1. S=S0.
2. A=S2\∆ (S) = (x, y)S2
x6=y.
3. wcoïncide avec w0sur A0:(x, y)A w(x, y) = w0(x, y)
4. wvaut +sur A\A0:(x, y)A\A w(x, y)=+.
Autrement dit, étant donné un graphe G0pondéré par des réels, on peut lui ajouter tous
les arcs manquants pour obtenir un graphe complet, ces nouveaux arcs ayant un poids
+.
Alors tout chemin dans G0est un chemin de même poids dans G. Réciproquement,
dans G, tout chemin de poids non infini est un chemin de même poids dans G, et aucun
chemin de poids infini dans Gn’est un chemin dans G0.
Trouver un plus court chemin dans G0est donc équivalent à trouver un plus court
chemin qui ne soit pas de poids infini dans G.
On peut même s’autoriser des arêtes de la forme (x, x)S2, auxquelles on donnera
un poids +.
Dans la suite on supposera donc que le graphe Gest pondéré avec des éléments de
R∪ { +∞ } et est complet. De plus, on supposera que son ensemble de sommets Sest
un intervalle [[0, n[[, où nN. On note MGla matrice (gij )(i,j)[[0,n[[2avec gij R∪{ +∞ }
poids de l’arc allant de iàj.
1.2 Les plus courts chemins
Exercice 3 (Minimalité d’un sous-chemin) Soit kun entier non nul et s0, . . . ,
sk1des sommets. Montrer que si s0, . . . , sk1est un plus court chemin entre s0et
sk1, alors pour tout (i, j)vérifiant 0αβk1,sα, . . . , sβest un plus court
chemin entre sαet sβ.
Dans la suite on supposera que Gne contient pas de cycle de poids strictement
négatif.
Définition 1 Pour (i, j)S2, on appelle distance de iàjdans le graphe G, et on note
d(i, j), comme la longueur du plus court chemin entre iet j(comme somme des poids
des arêtes).
On note D= (d(i, j))(i,j)[[0,n[[2la matrice des distances dans le graphe.
Exercice 4 Justifiez que cette définition a un sens.
Proposition 1 dvérifie l’inégalité triangulaire :
(i, j, k)S3d(i, k)d(i, j) + d(j, k)
Judicaël Courant- 13 décembre 2016 2/10 Document sous licence Art Libre (http://artlibre.org)
Lycée La Martinière Monplaisir
Option Informatique 2eannée
Année 2016-2017
Algorithme de Floyd-Warshall
Démonstration : Exercice.
Attention, dn’est pas une distance au sens mathématique usuel car :
1. Elle n’est pas symétrique.
2. Elle peut prendre des valeurs strictement négatives.
3. Elle peut prendre la valeur 0entre deux sommets distincts.
4. Elle peut prendre la valeur +(véniel).
Proposition 2 Pour tout (i, j, k)S3, on a d(i, j) = d(i, k) + d(k, j)si et seulement
s’il y a un plus court chemin de iàjpassant par k.
2 Calcul des longueurs
Avant de s’intéresser au calcul des plus courts chemins eux-mêmes, on va calculer
leurs longueurs, c’est-à-dire calculer itérativement la matrice des distances entre deux
sommets du graphe.
Pour cela, on va faire appel à une technique dite de relaxation, qu’on appliquera à des
sommets bien choisis.
2.1 Principe de l’algorithme
La relaxation décrit une technique qui consiste à prendre une matrice donnant des
majorants des distances dans le graphe et à diminuer (relâcher) ces majorants.
Soit M= (mij )(i,j)[[0,n[[2une matrice carrée à valeurs dans R∪ { +∞ }.
Définition 2 Étant donné deux matrices Aet Bde coefficients respectifs (aij )(i,j)[[0,n[[2
et (bij )(i,j)[[0,n[[2à valeurs dans R{ +∞ }, on dira que Aest majorée par Bet on écrira
ABou BApour signifier qu’on a
(i, j)0, n2aij bij
En particulier, on dira que Mmajore la matrice des distances dans Gou que les
coefficient de Mmajorent les distances dans Gpour signifier qu’on a DM, c’est-à-
dire
(i, j)[[0, n[[2d(i, j)mij (1)
Définition 3 (Relaxation élémentaire) Une étape élémentaire de relaxation sur le
calcul de la distance entre iet jà l’aide du sommet kconsiste à remplacer le coefficient
mij de Mpar mik +mkj si mij > mik +mkj et à ne rien faire sinon.
En Caml, cela s’écrit
l e t r e l a c h e m i j k =
l e t d = m. ( i ) . ( j ) and d = m. ( i ) . ( k ) + m. ( k ) . ( j ) in
i f d ’ < d then m. ( i ) . ( j ) <d ’ ; ;
Judicaël Courant- 13 décembre 2016 3/10 Document sous licence Art Libre (http://artlibre.org)
Lycée La Martinière Monplaisir
Option Informatique 2eannée
Année 2016-2017
Algorithme de Floyd-Warshall
Exercice 5 Si, avant une étape de relaxation, les coefficients de Mmajorent les dis-
tances dans G, les majorent-ils encore nécessairement après ladite étape ? Justifiez.
On rappelle qu’on s’intéresse à un graphe Gorienté, d’ensemble de sommets S= [[0, n[[,
complet, dont les arcs sont pondérés par des éléments de R∪ { +∞ }, représenté par une
matrice (gij )(i,j)[[0,n[[2et que Gne possède pas de cycle de poids strictement négatif.
L’algorithme de Floyd-Warshall repose sur trois idées :
1. Définir une suite finie de matrices W(k)pour k= 0, . . . , nmajorant toutes la
matrice des distances dans Get telle que W(n)soit exactement la matrice des
distances.
2. Donner une formule de récurrence permettant de calculer cette suite de matrice.
3. Faire le calcul en place dans une unique matrice de taille n×npar relaxation.
Définition 4 On pose, pour (i, j)[[0, n[[2et k[[0, n + 1[[,W(k)
ij la longueur du plus
court chemin entre iet jdont tout sommet intermédiaire svérifie s < k et on note,
pour k[[0, n + 1[[,W(k)la matrice n×nde coefficients W(k)
ij (i,j)[[0,n[[2.
Proposition 3 On a
(i, j)[[0, n[[2\∆ ([[0, n[[) W(0)
ij =gij (2)
i[[0, n[[ W(0)
ii = 0 (3)
Pour tout (i, j, k)[[0, n[[3,
W(k+1)
ij = min W(k)
ij , W (k)
ik +W(k)
kj (4)
Démonstration : Les égalités (2) et (3) sont évidentes. Montrons (4).
Soit (i, j, k)[[0, n[[3. Considérons un chemin le plus court reliant iàjavec tous ses
sommets intermédiaires dans [[0, k[[. Il a pour longueur W(k)
ij . De plus, tous ses sommets
intermédiaires sont dans [[0, k + 1[[. On en déduit :
W(k+1)
ij W(k)
ij (5)
De même, un chemin de longueur W(k)
ik (resp. W(k)
kj ) relie iàk(resp. kàj), avec tous
ses sommets intermédiaires dans [[0, k[[, donc
W(k+1)
ij W(k)
ik +W(k)
kj (6)
D’après (5) et (6), on a
W(k+1)
ij min W(k)
ij , W (k)
ik +W(k)
kj (7)
Pour montrer l’autre inégalité, considérons un chemin le plus court reliant iàjdont
tous les sommets intermédiaires sont dans [[0, k + 1[[. Il a pour poids W(k+1)
ij . Quitte à
supprimer les cycles qu’il contient, on peut le supposer simple. On a alors deux possibi-
lités :
Judicaël Courant- 13 décembre 2016 4/10 Document sous licence Art Libre (http://artlibre.org)
Lycée La Martinière Monplaisir
Option Informatique 2eannée
Année 2016-2017
Algorithme de Floyd-Warshall
Ou bien il n’a pas kpour sommet intermédiaire, donc tous ses sommets intermé-
daires sont dans [[0, k[[, d’où W(k+1)
ij W(k)
ij .
Ou bien il a kpour sommet intermédiaire. Comme il est simple, les autres sommets
intermédiaires sont tous dans [[0, k[[ donc le chemin se décompose en un chemin de
iàkdont tous les sommets intermédiaires sont dans [[0, k[[ et un chemin de kàj
dont tous les sommets intermédiaires sont dans [[0, k[[. D’où W(k+1)
ij W(k)
ik +W(k)
kj .
Dans les deux cas, on a donc
W(k+1)
ij min W(k)
ij , W (k)
ik +W(k)
kj (8)
Le résultat se déduit de (7) et (8).
2.2 L’algorithme
Nous pouvons maintenant donner une version de l’algorithme de Floyd-Warshall sim-
plifiée pour ne calculer que les longueurs :
type ’ a matrix == ’ a v e c t vect ; ;
l e t i n f t y = exp 1 0 0 0 . ; ; (+, en flottant )
(floyd_warshall_simple :
f l o a t matrix > f l o a t matrix )
(( floyd_w ars hal l_s imple g ) retourne une matrice m
des d is ta n ce s dans l e graphe g . )
l e t floyd_warshall_simple g =
l e t n = vect_length g in
l e t w = make_matrix n n i n f t y in
begin
(initialisation )
for i = 0 to n1do
for j = 0 to n1do
then
begin
w. ( i ) . ( j ) <g . ( i ) . ( j ) ;
end
done
done ;
(on met l a di ag on al e à z é ro )
for i = 0 to n1do
w. ( i ) . ( i ) <0.;
done ;
(relaxation )
for k = 0 to n1do (w=W(k)et p= Π(k))
for i = 0 to n1do
for j = 0 to n1do
Judicaël Courant- 13 décembre 2016 5/10 Document sous licence Art Libre (http://artlibre.org)
1 / 10 100%