• Aucun résultat trouvé

Algorithme de Floyd-Warshall

N/A
N/A
Protected

Academic year: 2022

Partager "Algorithme de Floyd-Warshall"

Copied!
9
0
0

Texte intégral

(1)

Algorithme de Floyd-Warshall

Judicaël Courant 2018-W04-4 (25 janvier)

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 sommets1à un sommets2pour toutcouple de sommets(s1, s2) =S2. Le but de l’algorithme deFloyd-Warshallest 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 algorithme 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 grapheG, donner une estimation asymptotique du nombre de chemins (simples) de longueur1,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.

Remarque 2 (Astuce de calcul) Considérons un grapheG0 = (S0, A0)pondéré par des réels, c’est-à-dire muni d’une fonctionw0 :A0 → R. On peut alors construire un grapheG = (S, A) pondéré par des éléments deR∪ {+∞ }, c’est-à-dire munit d’une fonctionw:A0→R∪ {+∞ } de façon suivante :

(2)

1. S=S0.

2. A=S2\∆ (S) =

(x, y)∈S2

x6=y .

3. wcoïncide avecw0surA0:∀(x, y)∈A w(x, y) =w0(x, y) 4. wvaut+∞surA\A0:∀(x, y)∈A\A w(x, y) = +∞.

Autrement dit, étant donné un grapheG0 pondé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 dansG0est un chemin de même poids dansG. Réciproquement, dansG, tout chemin de poids non infini est un chemin de même poids dansG, et aucun chemin de poids infini dansGn’est un chemin dansG0.

Trouver un plus court chemin dansG0est donc équivalent à trouver un plus court chemin qui ne soit pas de poids infini dansG.

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 quele grapheGest pondéré avec des éléments deR∪ {+∞ }et est complet. De plus, on supposera que son ensemble de sommetsS est un inter- valle[[0, n[[, oùn∈N. On noteMGla matrice(gij)(i,j)∈[[0,n[[2 avecgij ∈R∪ {+∞ }poids de l’arc allant deiàj.

1.2 Les plus courts chemins

Exercice 3 (Minimalité d’un sous-chemin) Soitkun entier non nul ets0, ...,sk−1des som- mets. Montrer que sis0, ...,sk−1est un plus court chemin entres0etsk−1, alors pour tout(i, j) vérifiant0≤α≤β≤k−1,sα, ...,sβ est un plus court chemin entresαetsβ.

Dans la suite on supposera queGne contient pas de cycle de poids strictement négatif.

Définition 1 Pour(i, j)∈S2, on appelle distance deiàjdans le grapheG, et on noted(i, j), comme la longueur du plus court chemin entreietj(comme somme des poids des arêtes).

On noteD= (d(i, j))(i,j)∈[[0,n[[2 la 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)∈S3 d(i, k)≤d(i, j) +d(j, k)

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 valeur0entre deux sommets distincts.

4. Elle peut prendre la valeur+∞(véniel).

Proposition 2 Pour tout(i, j, k) ∈S3, on ad(i, j) =d(i, k) +d(k, j)si et seulement s’il y a un plus court chemin deiàjpassant park.

(3)

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 som- mets bien choisis.

2.1 Principe de l’algorithme

Larelaxationdécrit une technique qui consiste à prendre une matrice donnant des majorants des distances dans le graphe et à diminuer (relâcher) ces majorants.

SoitM = (mij)(i,j)∈[[0,n[[2 une matrice carrée à valeurs dansR∪ {+∞ }.

Définition 2 Étant donné deux matricesAetBde coefficients respectifs(aij)(i,j)∈[[0,n[[2et(bij)(i,j)∈[[0,n[[2

à valeurs dansR∪ {+∞ }, on dira queAest majorée parBet on écriraA≤BouB ≥Apour signifier qu’on a

∀(i, j)∈0, n2 aij ≤bij

En particulier, on dira queM majore la matrice des distances dansGou que les coefficient de M majorent les distances dansGpour signifier qu’on aD≤M, c’est-à-dire

∀(i, j)∈[[0, n[[2 d(i, j)≤mij (1) Définition 3 (Relaxation élémentaire) Une étape élémentaire de relaxation sur le calcul de la distance entreietj à l’aide du sommet kconsiste à remplacer le coefficient mij deM par mik+mkjsimij > 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 ’ ; ;

Exercice 5 Si, avant une étape de relaxation, les coefficients deMmajorent les distances dansG, les majorent-ils encore nécessairement après ladite étape? Justifiez.

On rappelle qu’on s’intéresse à un grapheGorienté, 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[[2 et queGne 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 matricesW(k)pourk = 0, . . . ,nmajorant toutes la matrice des distances dansGet telle queW(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 taillen×npar relaxation.

(4)

Définition 4 On pose, pour(i, j) ∈ [[0, n[[2 etk ∈ [[0, n+ 1[[,Wij(k)la longueur du plus court chemin entreietjdont tout sommet intermédiairesvérifies < ket on note, pourk∈[[0, n+ 1[[, W(k)la matricen×nde coefficients

Wij(k)

(i,j)∈[[0,n[[2. Proposition 3 On a

∀(i, j)∈[[0, n[[2\∆ ([[0, n[[) Wij(0)=gij (2)

∀i∈[[0, n[[ Wii(0) = 0 (3)

Pour tout(i, j, k)∈[[0, n[[3,

Wij(k+1) = min

Wij(k), Wik(k)+Wkj(k)

(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 reliantiàjavec tous ses som- mets intermédiaires dans[[0, k[[. Il a pour longueurWij(k). De plus, tous ses sommets intermé- diaires sont dans[[0, k+ 1[[. On en déduit :

Wij(k+1)≤Wij(k) (5)

De même, un chemin de longueur Wik(k) (resp. Wkj(k)) relie ià k (resp. k à j), avec tous ses sommets intermédiaires dans[[0, k[[, donc

Wij(k+1) ≤Wik(k)+Wkj(k) (6)

D’après (5) et (6), on a

Wij(k+1) ≤min

Wij(k), Wik(k)+Wkj(k)

(7) Pour montrer l’autre inégalité, considérons un chemin le plus court reliantià jdont tous les sommets intermédiaires sont dans[[0, k+ 1[[. Il a pour poidsWij(k+1). Quitte à supprimer les cycles qu’il contient, on peut le supposer simple. On a alors deux possibilités :

— Ou bien il n’a pask pour sommet intermédiaire, donc tous ses sommets intermédaires sont dans[[0, k[[, d’oùWij(k+1) ≥Wij(k).

— Ou bien il akpour sommet intermédiaire. Comme il est simple, les autres sommets in- termédiaires sont tous dans[[0, k[[donc le chemin se décompose en un chemin deiàk dont tous les sommets intermédiaires sont dans[[0, k[[et un chemin dekàjdont tous les sommets intermédiaires sont dans[[0, k[[. D’oùWij(k+1)≥Wik(k)+Wkj(k).

Dans les deux cas, on a donc

Wij(k+1) ≥min

Wij(k), Wik(k)+Wkj(k)

(8)

Le résultat se déduit de (7) et (8).

(5)

2.2 L’algorithme

Nous pouvons maintenant donner une version de l’algorithme de Floyd-Warshall simplifiée pour ne calculer que les longueurs :

type ’ a m a t r i x == ’ a v e c t v e c t ; ;

l e t i n f t y = exp 1 0 0 0 . ; ; ( ∗ +∞, en f l o t t a n t ∗ ) ( ∗ f l o y d _ w a r s h a l l _ s i m p l e :

f l o a t m a t r i x −> f l o a t m a t ri x ∗ )

( ∗ ( f l o y d _ w a r s h a l l _ s i m p l e g ) r e t o u r n e une m a t r i c e m d e s d i s t a n c e s dans l e graphe g . ∗ )

l e t f l o y d _ w a r s h a l l _ s i m p l e g = l e t n = v e c t _ l e n g t h g in

l e t w = m a k e _ m a t r i x n n i n f t y in begin

( ∗ i n i t i a l i s a t i o n ∗ ) f o r i = 0 t o n−1 do

f o r j = 0 t o n−1 do then

begin

w . ( i ) . ( j ) <− g . ( i ) . ( j ) ; end

done done;

( ∗ on met l a d i a g o n a l e à z é r o ∗ ) f o r i = 0 t o n−1 do

w . ( i ) . ( i ) <− 0 . ; done;

( ∗ r e l a x a t i o n ∗ )

f o r k = 0 t o n−1 do ( ∗ w=W(k) e t p= Π(k) ∗ ) f o r i = 0 t o n−1 do

f o r j = 0 t o n−1 do

( ∗ ∀(a, b)≥(i, j) wab=Wab(k)

∀(a, b)<(i, j) wab=Wab(k+1) ∗ ) r e l a c h e w p i j k

done done done;

w ( ∗ on r e t o u r n e l a m a t r i c e d e s d i s t a n c e s ∗ ) end; ;

L’algorithme semble assez fidèle à la description faite précédemment, à un point près : à un instant donné, on mélange dans la matricemun morceau deW(k)et deW(k+1). Il reste à voir pourquoi cela ne met pas en péril sa correction.

(6)

2.3 Correction de l’algorithme simplifié

La difficulté ici est de montrer l’invariant le plus interne. Il s’agit de l’invariant I(i, j, k) vérifiant :

( ∀(a, b)≥(i, j) wab =Wab(k) et∀(a, b)<(i, j) wab =Wab(k+1)

La difficulté réside essentiellement dans le fait de montrer que siI(i, j, k) est vérifié juste avant l’exécution derelache w p i j k, alors après son exécution, on aI(i, j+ 1, k).

Lorsqu’on appellerelache, le coefficient dem.(i).(j)est mis à jour (ou non) à partir des valeurs dem.(i).(k)et m.(k).(j). Si(i, k) ≥ (i, j)et (k, j) ≥ (i, j), ces coefficients valent bien respectivementWik(k)etWkj(k)et dans ce cas,m.(i).(j)prend bien pour valeurWij(k+1)et comme les autres coefficients demsont inchangés, on a bienI(i, j+ 1, k).

Dans le cas contraire ces coefficients peuvent valoir respectivementWik(k+1)etWkj(k+1). D’où l’intérêt de la remarque suivante :

Remarque 3 Pour touti∈[[0, n[[et toutk∈[[0, n[[, on a Wik(k+1)=Wik(k) etWki(k+1)=Wki(k)

Dans tous les cas,m.(i).(j)contient donc bien la valeurWij(k+1)après l’appel derelacheet on a doncI(i, j+ 1, k).

Exercice 6 On pourrait envisager d’appliquer les étapes de relaxation dans un autre ordre. Par exemple, on pourrait les appliquer sur des triplets(i, j, k) pris au hasard uniformément parmi ceux qui permettent de faire diminuer au moins un coefficient dem, jusqu’à ce qu’il n’y ait plus moyen de faire évoluer la matricem.

Montrer que cet algorithme termine avec probabilité1et qu’il retourne alors une matricemqui est bien la matrice des distances.

2.4 Complexité

Exercice 7 Quelle est la complexité de cet algorithme en temps et en espace dans le cas le meilleur?

Le pire?

3 Calcul des chemins

3.1 Utilisation de matrices de prédécesseurs

Exercice 8 Quelle est la longueur, dans le cas le pire, d’un chemin simple dansG?

En déduire un majorant asymptotique de l’espace à utiliser si on veut représenter naïvement tous les plus courts chemin.

Ce majorant est-il serré? (Indication : considérez un graphe où les sommets sont des villes situées le long d’un axe routier, les arcs les moyens de transport et les pondérations le coût du transport en auto-stop ou en avion)

(7)

On peut faire mieux en ne stockant qu’une matrice indiquant simplement comment construire les chemins désirés en utilisant la remarque suivante :

Remarque 4 Si un plus court chemin relieiàj(aveci6=j), il est de la formes0, ...,sk−1avec i=s0etj =sk−1. On appelleprédécesseur dejsur un plus court chemin d’origineile sommet sk−2.

Exercice 9 Y a-t-il unicité du prédécesseur?

Donc au lieu de stocker des plus courts chemins, on va stocker une matriceΠ = (πij)(i,j)∈[[0,n[[2

telle que pour tout(i, j)∈[[0, n[[2ijest un prédécesseur dejsur un plus court chemin d’ori- ginei, ouπij =⊥si aucun chemin deiàjn’existe ou sii=j.

Reconstruire un plus court chemin entreietjvérifiantd(i, j)<+∞se fait récursivement : 1. Sii=j, c’est le chemin réduit ài, de longueur0.

2. Sinon, on calcule récursivement un plus court chemin entreietπij puis on lui ajoutej.

Exercice 10 Montrer que cet algorithme termine.

Remarque 5 1. On aurait pu stocker les successeurs plutôt que les prédécesseurs (les prédé- cesseurs sont plus naturels pour certains problèmes).

2. Le routage sur Internet fonctionne de cette façon : chaque nœud du réseau sait, pour chaque adresse de destination quel est le prochain nœud sur lequel envoyer le paquet et seulement le prochain nœud (et on abandonne les paquets qui bouclent). C’est aussi le principe des panneaux routiers de direction.

Nous allons en fait travailler sur une suite de matricesΠ(k) =

π(k)ij

(i,j)∈[[0,n[[ pourk = 0, . . . ,noù pour tout(i, j, k),πi,j(k)désigne un prédécesseur dejsur un plus court chemin deià jn’ayant paskcomme sommet intermédiaire:

Définition 5 On définit par récurrence pour(i, j, k)∈[[0, n[[2:

πij(0) =⊥ sigij = +∞oui=j π(k+1)ijkj(k) siWik(k)+Wkj(k)< Wij(k)

π(k+1)ijij(k) sinon

Et on pose, pourk∈[[0, n+ 1[[,Π(k)= πij(k)

(i,j)∈[[0,n[[2.

Exercice 11 Montrer que pour tout(i, j)∈[[0, n[[et toutk∈[[0, n+ 1[[, on a ainsi bien défini un prédécesseur dejsur un plus court chemin deiàjn’ayant paskcomme sommet intermédiaire.

Notons, pour i ∈ [[0, n[[ et k ∈ [[0, n+ 1[[ fixés, Gk,i le graphe d’ensemble de sommets Sk,i=n

j

πij(k)6=⊥o

∪ {i}et d’ensemble d’arcsAk,i =n

ij(k), j)

j∈Sk,i\ {i}o . Exercice 12 S’agit-il bien d’un graphe?

Proposition 4 Pour tout i ∈ [[0, n[[ et tout k ∈ [[0, n + 1[[, le graphe Gk,i est acyclique et l’algorithme de reconstruction donné précédemment termine surΠ(k).

(8)

Démonstration : Exercice (non trivial).

3.2 Algorithme de Floyd-Warshall

Comme précédemment pour la suite des matricesW(k), on peut en fait calculer la suite des matricesΠ(k)en utilisant une unique matrice.

On adapte la fonction de relaxation en lui donnant en argument la matrice des prédécesseurs : l e t r e l a c h e m p i j k =

l e t d = m . ( i ) . ( j ) and d ’ = m . ( i ) . ( k ) + m . ( k ) . ( j ) in i f d ’ < d then

begin

m . ( i ) . ( j ) <− d ’ ;

p . ( i ) . ( j ) <− p . ( k ) . ( j ) ; end; ;

On peut alors écrire comme précédemment l’algorithme. La valeur⊥est représentée par l’entier−1dans la matrice des prédécesseurs.

type ’ a m a t r i x == ’ a v e c t v e c t ; ;

l e t i n f t y = exp 1 0 0 0 . ; ; ( ∗ +∞, en f l o t t a n t ∗ ) ( ∗ f l o y d _ w a r s h a l l :

f l o a t m a t r i x −> f l o a t m a t ri x ∗ i n t m a t r ix ∗ ) ( ∗ ( f l o y d _ w a r s h a l l g ) r e t o u r n e une m a t r i c e m

d e s d i s t a n c e s dans l e graphe g a i n s i qu ’ une m a t r i c e p d e s pr é d é c e s s e u r s p e r m e t t a n t l e c a l c u l d e s p l u s c o u r t s chemins : pour t o u t ( i , j ) , p . ( i ) . ( j ) e s t un pr é d é c e s s e u r de j dans un p l u s c o u r t chemin r e l i a n t i à j s ’ i l en e x i s t e un , e t −1 s i n o n . ∗ )

l e t f l o y d _ w a r s h a l l g = l e t n = v e c t _ l e n g t h g in

l e t w = m a k e _ m a t r i x n n i n f t y in l e t p = m a k e _ m a t r i x n n (−1 ) in begin

( ∗ i n i t i a l i s a t i o n ∗ ) f o r i = 0 t o n−1 do

f o r j = 0 t o n−1 do i f g . ( i ) . ( j ) < + i n f t y then

begin

w . ( i ) . ( j ) <− g . ( i ) . ( j ) ; p . ( i ) . ( j ) <− j ;

end done

(9)

done;

( ∗ on met l a d i a g o n a l e à z é r o ∗ ) f o r i = 0 t o n−1 do

w . ( i ) . ( i ) <− 0 . ; done;

( ∗ r e l a x a t i o n ∗ )

f o r k = 0 t o n−1 do ( ∗ w=W(k) e t p= Π(k) ∗ ) f o r i = 0 t o n−1 do

f o r j = 0 t o n−1 do

( ∗ ∀(a, b)≥(i, j) wab=Wab(k)etpab = Π(k)ab

∀(a, b)<(i, j) wab=Wab(k+1)etpab= Π(k+1)ab ∗ ) r e l a c h e w p i j k

done done done;

( w, p ) end; ;

La correction se montre comme dans le cas de l’algorithme simplifié.

Exercice 13 Dans l’exerice 6 on avait envisagé d’appliquer les étapes de relaxation dans un ordre quelconque.

Les choses ne sont pas si simples pour le calcul de la matrice des prédécesseurs. Donnez un exemple de graphe sans cycle de poids négatif ou nul dans lequel, en appliquant des relaxations dans un ordre bien choisi, on obtient une matriceptelle que l’algorithme de reconstruction de plus court chemin ne termine pas (ce qui montre au passage que l’énoncé de l’exercice 10 est en fait faux).

3.3 Complexité

Exercice 14 Quelle est la complexité de cet algorithme en temps et en espace dans le cas le meilleur? Le pire?

Références

Documents relatifs

On peut le réaliser à partir du parcours (récursif) en profondeur en partant d'un sommet sur lequel aucun arc n'aboutit dans le graphe dual. Il suffira

On peut le réaliser à partir du parcours (récursif) en profondeur dans le graphe dual en partant d'un sommet sur lequel aucun arc n'aboutit.. Il suffira

Si un sommet est égal à son point d'attache at(x), et si pour tout descendant y de x dans T, on a at(y) &lt; y, alors l'ensemble des descendants de x forme

Mathias est dans sa maison et décide de rendre visite à quatre de ses amis (Julie, Léo, Fabien et Kevin) en VTT?. Dans quel ordre doit-il rencontrer ses amis pour effectuer le

Ils sont alors obligés de prendre un autre cap avant de virer vers la bouée d’arrivée, qui est aussi la bouée de départ.. Doc

Ils sont alors obligés de prendre un autre cap avant de virer vers la bouée d’arrivée, qui est aussi la bouée de départ.. Doc

Pour ceci, on définit d k ij le poids d’un plus court chemin de i à j dont tous les sommets intermédiaires sont dans { 1,.. En particulier pour k = 0, un tel chemin n’a pas de

TOME s eu, Metodâ pentru determinarea drumului de cea mai mica lungime dintre doua noduri aie unui graf finit, Analele Univ. TOMESCU, Sur les méthodes matricielles dans la théorie