0% ont trouvé ce document utile (0 vote)
108 vues15 pages

Chap 2

Le document décrit des algorithmes pour trouver le plus court chemin dans un graphe. Il présente l'algorithme de Dijkstra et l'algorithme de Bellman-Ford pour résoudre ce problème du plus court chemin.

Transféré par

Djeffal Meriem
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
108 vues15 pages

Chap 2

Le document décrit des algorithmes pour trouver le plus court chemin dans un graphe. Il présente l'algorithme de Dijkstra et l'algorithme de Bellman-Ford pour résoudre ce problème du plus court chemin.

Transféré par

Djeffal Meriem
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Dr.

Bendiab Chapitre 02 Algorithmes de base en théorie des graphes

Chapitre 02
Algorithmes de Base en Théorie des Graphes

Partie1 : Le Problème du plus court chemin


1. Introduction

La recherche d'un plus "court" chemin d'un point à un autre est un problème de la vie courante.
On s’intéresse dans cette partie à la résolution de ce type de problème. On considère des graphes
orientés valués, tels qu’une valeur est associée à chaque arc, et l’on cherche le plus court chemin
entre deux sommets du graphe. Cela permettra de résoudre des problèmes comme la recherche
d’un itinéraire coûtant le moins cher, ou encore étant le plus rapide.

Il existe de nombreux problèmes spécifiques aux chemins. On en cite quelques uns:


1) Soient i et j ∈ X :
- Existe-t-il au moins un chemin de i à j ?
- Existe-t-il au moins un chemin de longueur p entre i et j ?
- Quel est le nombre de chemins de longueur inférieure ou égale à p entre i et j ?

2) Trouver le ou les chemins qui relient le sommet s à tous les autres sommets et qui satisfont
une propriété P.

3) Trouver les chemins qui relient tout couple de sommets et qui satisfont une propriété P.

2. Introduction au problème du plus court chemin

Etant donné un graphe G=(X,A) orienté tel que chaque arc (i,j) possède un nombre (i,j) appelé
longueur de l’arc (i,j). Le problème du plus court chemin (PCC) consiste à déterminer un chemin
Ch joignant les sommets i et j et qui soit de longueur extrémale (minimale ou maximale selon
l’objectif). La longueur du chemin optimal est égale à la somme des longueurs des arcs du
chemin.

On considère d’une manière plus générale deux types de problèmes :


- Problème P1 : Il s’agit de trouver le plus court chemin reliant un sommet à tous les autres.
- Problème P2 : il s’agit de trouver tous les plus courts chemins entre tous les couples de
sommets.

La figure 2.1 représente un réseau routier à deux extrémités (ou


réseau de transport) comportant un ensemble de sommets X
consistant en une entrée S, une sortie P et trois autres sommets.
Chaque arc du réseau est assigné d’une valeur représentant sa
longueur.

Figure 2.1 Exemple d'un réseau routier.

21
Dr. Bendiab Chapitre 02 Algorithmes de base en théorie des graphes

3. Algorithmes proposés pour trouver le PCC

Pour la résolution du problème du plus court chemin, plusieurs algorithmes ont été proposés
dans la littérature. Ces algorithmes de recherche de plus court chemin exploitent les propriétés du
graphe et dépendent souvent de sa nature. Si l’on considère un problème de type P1, on a le
choix entre les algorithmes de Dijkstra et de Bellman–Ford.

L'algorithme de Dijkstra n'est applicable que si les longueurs sont positives.


L'algorithme de Bellman n'est applicable que si le graphe est sans circuit. Une généralisation de
l'algorithme de Bellman est l’algorithme de Bellman-Ford. Ce dernier, est applicable en cas de
présence de circuits afin de détecter les circuits absorbants.

Pour les problèmes de type P2, on a également le choix entre deux algorithmes: l’algorithme de
Dantzig et celui de Floyd-Warshall qui sont des algorithmes matriciels applicables quelque soient
les longueurs des arcs.

Dans ce cours, on s’intéresse aux problème de type p1.

3.1 Quelques notions fondamentales :

3.1.1Graphe pondéré (Réseau)

Soit G=(X,U) un graphe orienté, On définit p : U −→ R une application qui associe pour chaque
arc u ∈ U de G une valeur réelle p(u) appelée poids de l’arc u. Un tel graphe, représenté par
G =(X,U, p), est appelé graphe pondéré, graphe valué ou réseau.

3.1.2Poids d’un chemin (Distance)

On définit le poids d’un chemin ch comme la somme des poids des arcs de ch,
∈ .

3.1.3 Circuit absorbant

Un circuit est dit absorbant si son poids est négatif.

Si un graphe possède un circuit absorbant, alors il n’existe pas de plus courts chemins entre
certains de ces sommets.

3.2 Résolution de problèmes de type P1

Dans cette section sont présentés les algorithmes suivants : l’algorithme de Dijkstra et
l’algorithme de Bellman-Ford.

Les algorithmes de Dijkstra et Bellman-Ford procèdent tous les deux par relâchements successifs
d'arcs. La différence entre les deux est que dans l'algorithme de Dijkstra, chaque arc est relâché
une et une seule fois, tandis que dans l'algorithme de Bellman-Ford, chaque arc peut être relâché
plusieurs fois.

22
Dr. Bendiab Chapitre 02 Algorithmes de base en théorie des graphes

3.2.1 Algorithme de Djikstra

Edgser Wybe Dijkstra (1930-2002) a proposé en 1959 un algorithme qui permet de calculer le
plus court chemin entre un sommet particulier et tous les autres. Le problème est le même que
celui traité par Bellman-Ford, il utilise aussi le principe de la programmation dynamique, sauf
qu’ici le réseau R=(X,U,p) peut être avec ou sans circuits mais à condition que les poids soient
tous positifs ou nuls. Donc, L'algorithme de Dijkstra ne permet pas de considérer les arcs
négatifs, car une fois qu’un sommet est marqué on ne peut changer ce marquage lors des
itérations suivantes. Le sommet de départ s n’est pas nécessairement une source.

Principe L’algorithme calcule le chemin de poids minimal en partant du sommet s et en


prolongeant le chemin à chaque itération. Cette méthode s’appelle, calcul de la plus courte
distance de proche en proche. A chaque étape, pour un sommet donné x, on ajuste les valeurs de
L pour tout sommet y successeur de x.

Algorithme : Dijkstra (G,s)

Etape 1 : initialisation
Soit s ∈ X /*sommet de départ*/
Soit L(x) : le label de x ou la longueur du pcc de s à x à l’etape i
Xm ← ; L(s) ← 0 ; /* Xm est l’ensemble des sommets marqués*/
∀ x ∈ X –{s} : L(x) = ∞;
Am ← ; /* Am est l’ensemble des arcs du PCC */

Etape 2 : Traitement

Tant que Card ( Xm )< n Faire


x ← Min (L(x)), ∀ / x ∈ X –Xm /*Choisir x de plus petit label parmi les sommets
non marques *
Xm ← Xm ∪ {x} ; /*marquer x */
Am ← Am ∪ {(pred(x), x)}; /*marquer l’arc de provenance du min*/
Pour tout y ∈ Voisins(x) et y Xm Faire
L(y) = Min(L(y), L(x)+ d(x,y)) ;
Fin pour
Fin tant que

Etape 3 : Résultat
Am contient les arcs du PCC
L(x) est la longueur du PCC
Fin

Exemple : On donne en figure 2.2 un


graphe représentant un réseau. Appliquer
l’algorithme de Dijkstra pour déterminer le
PCC entre les sommets S et P.

Figure 2.2 Plus court chemin de S à P de longueur 5.

23
Dr. Bendiab Chapitre 02 Algorithmes de base en théorie des graphes

Sommet Som Lmin


S A B C D E P met
Etapes fixé
Initi. 0 S 0
1 2S 3S A 2
2 2A 5A B 2
3 3B 5A 5B C 3
4 5A 4C E 4
5 5A - 8E D 5
6 5D P 5

Pour retrouver le PCC, on part du sommet P →D→ A→S


D’après le tableau de résolution, on conclut que :
- Le PCC de S à P est : S-A-D-P
- Sa valeur = 5

3.2.2 Algorithme de Bellman-Ford

L’algorithme de Bellman-Ford permet de calculer le PCC d’un sommet « s » à tous les autres
sommets dans un graphe orienté pondéré de longueur quelconque (Il est applicable même dans le
cas où certains arcs ont une longueur négative) et aussi de détecter la présence d’un circuit
absorbant.
L’algorithme de Bellman-Ford permet un marquage des sommets qui n’est pas définitif et qui
peut être modifié à chaque itération. Ce type d’algorithme est dit à correction d’étiquettes.
A chaque sommet x ∈ X, on veut associer un chemin de poids optimal joignant la source du
graphe r ∈ X a x dans le réseau R = (X,U, p)

Principe

L'algorithme de Bellman-Ford fonctionne selon le même principe que celui de Dijkstra : on


associe à chaque sommet xi une valeur d[xi ] qui représente une borne maximale du coût du plus
court chemin entre s0 et xi . L'algorithme diminue alors progressivement les valeurs d[xi] en
relâchant les arcs. Contrairement à Dijkstra, chaque arc va être relâché plusieurs fois. On relâche
une première fois tous les arcs ; après quoi, tous les plus courts chemins de longueur 1, partant de
s, auront été trouvés. On relâche alors une deuxième fois tous les arcs ; après quoi tous les plus
courts chemins de longueur 2, partant de s, auront été trouvés... et ainsi de suite... Après la kième
série de relâchement des arcs, tous les plus courts chemins de longueur k, partant de s, auront été
trouvés. Étant donné que le graphe ne comporte pas de circuit absorbant, un plus court chemin
est nécessairement élémentaire.

Algorithme : Bellman-Ford (G,s)

Déclaration des variable

Graphe (S,A)
Soit s ∈ X /*sommet de départ*/
Luv= /* S’il n’y a pas d’arc entre u et v */

24
Dr. Bendiab Chapitre 02 Algorithmes de base en théorie des graphes

Etape 1 : Phase d’Initialisation


d(s) 0
Pour chaque v ∈ S sauf (s) Faire
d(v)

Etape 2 : Traitement (Phase de Relaxation)

Pour i  l à S-1 faire


Pour chaque arc (u,v) ∈ A Faire /* Pour tous les arcs : min (d(v, d(u)+C(u,v)))*/
Si d(v) >d(u) +C(u,v) alors
d(v) d(u)+ C(u, v)
Fin
Fin

Etape 3 : Résultat (Phase de Contrôle de la présence d’une boucle


négative)
Pour chaque arc (u ,v) ∈ A Faire
Si d(v) > d(u)+ L(u,v) Alors
Existence d’une boucle négative
Sinon retourner d(v)

Exemple : Etant donné le graphe de la figure


2.3, appliquer l’algorithme de Bellman-Ford pour
déterminer le PCC entre les sommets S et P.

Figure 2.3 Plus court chemin de S à P de longueur 5.

Arc poids Sommet S A B C D P


S-A 4 itération
S-B 6 Initialisation 0
A-C 3 1 0 4S 6S
B-A 9 2 0 4S 6S 7A 10B
B-C -4 15B 2B
B-D 4 3 0 4S 6S 2B 3C 6C
C-D 1 12 D
C-P 4 4 0 4S 6S 2B 3C 6C
D-P 2 5D
5 0 4S 6S 2B 3C 5D
Pour retrouver le PCC, on part du sommet P →D→C→B→S
D’après le tableau de résolution, on conclut que :
- Le PCC de S à P est : S-B-C-D-P
- Sa valeur = 5

25
Dr. Bendiab Chapitre 02 Algorithmes de base en théorie des graphes

Remarques

- Si le chemin optimal est le chemin de poids maximal, on change dans l’algorithme min par max
et +∞ par −∞.

- Si ∀ x ∈ X , p(x) = 1, l’algorithme calculera le plus court chemin en nombre d’arcs.

- Dans le cas où il n’y a pas de circuits absorbants :


1. l’algorithme se termine (les valeurs se stabilisent) après au plus n passages dans la
boucle principale, n étant le nombre de sommets du graphe
2. Les valeurs L(x) obtenues à la fin de l’algorithme sont bien les distances des x au
sommet s.

- L’algorithme permet de détecter la présence de circuits absorbants (un cycle de poids négatifs) :
si les valeurs L(x) ne sont pas stabilisées après n passages de boucles (un nouveau tour de boucle
ferait diminuer une distance), alors le graphe contient au moins un circuit absorbant.

3.3 Résumé

Les algorithmes de résolution du PCC


Algorithme Type du Type du Avantages Inconvénients
PCC graphe
Dijkstra Orienté ou Un temps d’exécution • Ne s’applique qu’aux
non orienté assez rapide graphes à valuations positives
• Ne marche que pour trouver
les plus courts chemins.
Bellman Graphe Longueur quelconque - Ne s’applique qu’aux
orienté sans (nombre réel) graphes décomposables en
D’un circuit Un temps d’exécution niveaux (donc sans circuits,
sommet à assez rapide sommet d’origine doit être
tous les sans prédécesseur).
autres
Bellman sommets Graphe Fonctionne sur tous les - Un temps de calcul encore
Ford orienté graphes (Longueur d’arc relativement long .
quelconque, nombre réel)

consomme
moins de mémoire.

Floyd- Entre Graphe Fonctionne sur tous les


Warshell tous les orienté et sans graphes - Temps de calcul est très s
couples circuit long.
de - Consomme beaucoup de
sommets mémoire.
- Calcule l’ensemble des
distances entre tout couple de
sommets alors
qu’on peut souvent se
contenter des distances depuis
un sommet particulier.

26
Dr. Bendiab Chapitre 02 Algorithmes de base en théorie des graphes

Partie 2 : Les flots


1. Introduction

Dans cette partie du chapitre, seront examinés des réseaux dans lesquels les sommets sont reliés
par des arcs à travers lesquels une certaine quantité homogène peut s’écouler. Cette quantité est
appelée flot.
Les flots permettent de modéliser une très large classe de problèmes. Leur interprétation
correspond à la circulation de flux physiques sur un réseau : distribution électrique, réseau
d’adduction d’eau ou tout autre liquide, acheminement de paquets sur un réseau informatique, ...
Il s’agit d’acheminer la plus grande quantité possible de matière entre une source s et une
destination p. Les liens permettant d’acheminer les flux ont une capacité limitée, et il n’y a ni
perte ni création de matière lors de l’acheminement : pour chaque nœud intermédiaire du réseau,
le flux entrant (ce qui arrive) doit être égal au flux sortant (ce qui repart) (Conservation des flux
en chaque sommet : loi de Kirchhoff).

2. Définitions et propriétés

2.1 Arcs incidents à un sommet


Dans ce qui suit, les arcs du graphe sont supposés numérotés A = (a1, a2, ….., ap).
Si l’on considère un ensemble Y de sommets tel que Y ⊂ X, on désigne par:
- l’ensemble des arcs incidents à Y vers l’extérieur (ensemble
des arcs d'origine x et d'extrémité différente de x)
(Y) = {(x, y) ∈ A / x ∈ Y et y Y}
- l’ensemble des arcs incidents à Y vers l’intérieur (ensemble des
arcs d'extrémité y et d'origine différente de y)
(Y) = {(x, y) ∈ A / x Y et y ∈ Y}
Les arcs de ω+(y) sont les arcs "sortant de y" et ceux de ω-(y) les
arcs "entrant en y".

Sur le graphe G1 de la figure 2 .4 , on a :


ω+(a) = {u1 , u5} ω-(a) = {u4} ω+(b) = {u2} ω-(b) = {u1, u6} Figure 2.4 Le graphe G1.

2.2 Notion de flot


D’une manière générale, la notion de flot fait référence à une quantité homogène qui peut
s’écouler à travers les arcs d’un graphe. Une définition plus formelle peut être donner comme
suit :
2.2.1 Définition d’un flot
Définition 1 : Etant donné un graphe G = (X, A), un flot sur G est un vecteur,
=( ) ∈ Rp tel que :

- En tout sommet xi ∈ X, la loi de Kirchoff est vérifiée (loi de conservation de flot aux nœuds) :

Σi/ ∈ ∈

27
Dr. Bendiab Chapitre 02 Algorithmes de base en théorie des graphes

Exemple :
Dans le graphe de la figure 2 .5, nous avons représenté sur tous
les arcs un flot , = (3, 3, -2, 2, 1).

Figure 2.5 Représentation d'un flot dans un graphe.


2.3 Réseau de transport

Définition 2 : Soit un graphe G=(X, A) orienté et sans boucles. G est un réseau de transport si :

1. G est connexe.
2. G admet deux sommets particuliers s et p appelés source et puits :
 Une seule entrée S (sommet source) tel que
d- (S) = 0 et ∀ x ∈ X, il existe un chemin de S à x.
G admet une seule sortie P (sommet puits) tel que d+(P) = 0.
 Une seule sortie P (sommet puits) tel que d+(P) = 0.
3. Les arcs de G sont valués et la valeur de l’arc notée c(a) est la capacité de l’arc a. la fonction
capacité c : A → R+ limite les valeurs que peut prendre la fonction de flot sur les arcs.

Exemple :
Dans la figure 2.6, sont représentés deux graphes. Le graphe de la partie (a) est un réseau de
transport car il répond à toutes les conditions spécifiées dans la définition. Le graphe de la partie
(b) de la même figure n’est pas un réseau de transport car il contient deux sommets source.

Figure 2.6 Deux graphes en (a) est un réseau de transport et en (b) n'est pas un réseau.

2.4 Flot dans un réseau de transport

Dans un réseau de transport, la notion de flot est légèrement affinée.

Définition 3 : Etant donné un graphe G = (X, A) constituant un réseau de transport. Un flot


dans G est un vecteur , = ( ) ∈ Rp tel que :
- bi ≤ ≤ ci ⟺∀ i ∈ {1, 2,……. , p}
- En tout sommet xi ∈ X-{S,P}, la loi de Kirchoff est vérifiée (loi de conservation de flot
aux noeuds) : Σi/ ∈ ∈

28
Dr. Bendiab Chapitre 02 Algorithmes de base en théorie des graphes

Pour un réseau déterminé, toute fonction de flot satisfaisant ces équations est un flot réalisable,
ce qui signifie qu’il peut être réalisé dans le réseau.

Exemple :
La figure 2.7 présente deux réseaux de transport avec sur tous les arcs une capacité et un flot.

(a) (b)
Figure 2.7 Le flot dans un réseau de transport. (a) les borne inf bi=0 (b) les bi 0

Sur le graphe (a) :


- c = (1, 3, 4, 5, 2, 3, 5, 6, 1, 7, 2)
- = (1, 3, 4, 1, 0, 3, 1, 6, 0, 7, 1)

Définition 4 : La quantité de flot qui circule dans un réseau est calculée à l’entrée ou à la sortie
du réseau :
=Σi/ ∈ ∈

2.5 Flot complet


Dans un réseau de transport, on dit qu’un arc a ∈ A est saturé si ,

Définition 5: Un flot , est dit complet si chaque chemin de S à P contient au moins un arc
saturé.

Exemple :
Le flot présenté dans la figure 2.7 est un flot complet. On peut facilement vérifier que chaque
chemin de S vers P contient au minimum un arc saturé.
- c = (1, 3, 4, 5, 2, 3, 5, 6, 1, 7, 2)
- = (1, 3, 4, 1, 0, 3, 1, 6, 0, 7, 1)

2.6 La coupe
D’une manière générale, une coupe est un ensemble d’arcs dont la suppression sépare un graphe
connexe en deux composantes connexes, l’une contenant S et l’autre contenant P.

29
Dr. Bendiab Chapitre 02 Algorithmes de base en théorie des graphes

2.6.1 Définition d’une coupe


Définition 6 :
Etant donné un réseau de transport, une coupe S-P, notée C = <X1, X2>
tel que : S∈ X1 et P ∈ X2. La capacité d’une telle coupe (égale à la somme des flots sur ses arcs)
est :
C( C )= ∈

Définition 7
Soit S, un sous-ensemble de sommets, tel que s ∈ S et p S;
Une coupe séparant s et p est l'ensemble des arcs (S)= ( S) ∪ (S)
( S) = {u∈U / origine de u dans S et extrémité hors de S}
( S) = {u∈U / extrémité de u dans S et origine hors de S}
La capacité de la coupe est égale à : C(S)= ∈ ∈

Exemple :
Si l’on considère le réseau de transport de la figure 2.8
(a),
on peut représenter 3 coupes en indiquant la liste des
sommets dans cette coupe :C
Coupe 1 : C 1 = <(S, x1), (S, x2), (S, x3)>
Coupe 2 : C 2 = <(x1, x4), (x2, x4), (x2, x5), (x3, x5)>
Coupe 3 : C 3 = <(x4, P), (x5, P))

De plus, Figure 2.8 Représentation des différentes coupes


dans un réseau de transport.
, (C 1) = 1+3+4 = 8
, (C 2) = 1+6+0+1 = 8
, (C 3) = 7+1=8
La capacité d’une coupe C = <X1, X2> est également notée c(X1, X2). Par ailleurs, le flot d’une
coupe C = <X1, X2> est défini comme :



La valeur d’un flot peut à présent être obtenue à partir des flots de n’importe quelle coupe C.

2.7 Coupe minimale

On s’intéresse à présent à une coupe particulière d’un réseau de transport. Il s’agit d’une coupe C
telle que tous les arcs rentrant de C soient saturés et tous les arcs sortants de C portent un flot
nul. Cette coupe est appelée coupe minimale.

30
Dr. Bendiab Chapitre 02 Algorithmes de base en théorie des graphes

Définition 8 : Dans un réseau de transport, une coupe C est une coupe minimale si :
- L’arc (i, j) est saturé si i ∈ X1 et j ∈ X2
- = 0 si i ∈ X2 et j ∈ X1

2.8 Définition du problème du flot maximal


Le problème du flot maximal est celui de la détermination d'un flot sur G, compatible avec les
capacités, de telle façon qu’il soit le plus grand possible.

3. Recherche du flot maximum

Il est fréquent de faire recours à la représentation d’un réseau de transport de marchandises ou un


réseau électrique au moyen d’un graphe. Le problème de flot dans ces réseaux revient à étudier la
circulation de matière continue ou discrète sur les arcs du graphe et qui obéit au principe de
conservation de la matière.
Etant donné un réseau de transport, nous pouvons considérer deux problèmes. Le premier
consiste à rechercher la valeur du flot réalisable maximum dans le réseau. Le second consiste à
rechercher une fonction de flot satisfaisant cette valeur. Le premier est résolu par un théorème
alors que le second est résolu par un algorithme qui permet de former une fonction de flot
maximum. Le théorème et l’algorithme sont tous deux dus à Ford et Fulkerson.

3.1 Théorème de Ford-Fulkerson

Théorème 1 : (Théorème de Ford-Fulkerson) (Max-flow min-cut)


Etant donné G = (X, A) un réseau de transport et , un flot réalisable sur G.
La valeur du flot maximum réalisable de S vers P est égale à la capacité de la coupe minimale
séparant S et P.
Max ( ) = Min (c(C))
D’après ce théorème, nous pouvons affirmer que s’il existe un flot , de valeur v, égale à la
capacité d’une coupe (X1, X2) alors le flot est maximum et la coupe est de capacité minimale.

Remarques :

-Un flot non complet ne peut pas être maximum


maximum ⇒ complet, mais complet maximum ,

3.2 Algorithme de Ford-Fulkerson

L’algorithme de Ford-Fulkerson démarre avec un flot réalisable à travers le réseau ; Ce flot est
amélioré itérativement.
Dans le cas où ce flot est maximum, il permet de déterminer la fonction de flot satisfaisant cette
valeur ainsi que la coupe minimale.
Dans le cas où le flot n’est pas maximum, il a pour objectif de mettre en évidence une chaine
améliorante correspondant à ce flot.
L’algorithme comporte deux phases. La première consiste à rechercher la chaine améliorante qui
permet d’augmenter le flot. Si une telle chaine existe, la seconde phase montre comment modifier
la fonction de flot de manière à augmenter le flot. S’il n’existe aucune chaine, la fonction de flot
actuelle est optimale et le calcul est terminé.

31
Dr. Bendiab Chapitre 02 Algorithmes de base en théorie des graphes

3.2.1 Marquage utilisé


L’algorithme, qui est basé sur un processus de marquage, utilise pour les sommets des labels
comme suit :

- x et y sont des sommets du réseau de transport (ou / s’il est indéfini).


- sens est + ou – ou / s’il est indéfini
- est un nombre réel ≥ 0 ou ∞

Lorsqu’un sommet y porte ce label, ceci signifie qu’il existe une chaine Ch : S–y qui contient l’arc
(x, y) et dont le flot est . La direction est + si l’arc est dans le sens du chemin, et – dans le
cas contraire.

Un sommet y est marqué si le sommet x a été marqué. Deux cas peuvent se présenter :

- Si a = (x, y) est un arc et et si , , alors le label du sommet


y est où

- Si a = (y, x) est un arc et et si 0, alors le label du sommet y est


Procédure de marquage
Début
Marquer [+] le sommet S
Répéter
- sélectionner un sommet marqué x,
- marquer [+] tout sommet y non marqué, extrémité terminale d’un arc (x, y) non saturé
- marquer [-] tout sommet y non marqué, l’extrémité initiale d’un arc (y, x) tel que (y, x)
> b(y, x)
jusqu’ à (aucun sommet ne peut être marqué) ou ( P marqué)

Si P n’est pas marqué alors le flot est maximum


sinon le flot peut être amélioré
fin si
Fin
3.2.2 Principe de l’algorithme

Lors de la première phase de l’algorithme, les sommets, qui peuvent être marqués au maximum
une fois, sont marqués avec les labels indiqués ci-dessus.
La procédure de marquage se termine lorsque le sommet P est marqué ou bien lorsqu’on ne peut
plus marquer aucun sommet.
Dans le premier cas, le flot obtenu n’est pas maximum et l’algorithme passe à la seconde phase
pour augmenter le flot en utilisant les labels des sommets de la chaine Ch obtenue lors de la
phase 1. Dans le second cas, le flot obtenu est maximum et on s’arrête. L’ensemble des sommets
marqués détermine la coupe minimale.

32
Dr. Bendiab Chapitre 02 Algorithmes de base en théorie des graphes

Algorithme : Ford-Fulkerson (G, ,)


Etape 1 : Initialisation
/* Marquer le sommet S*/
= (/,/, /)
/* Choisir un flot initial qui satisfait la relation de conservation/
← ;
Etape 2 : Calcul du flot complet
Considérer tous les chemins de S vers P et
Augmenter le flot , façon à avoir un flot complet
Etape 3 : calcul du flot max et recherche de la coupe minimale
Phase 1 : Procédure de marquage
Tant que il existe un sommet y non marqué Faire
Marquer y selon l’une des deux conditions :
- (x, y) ∈ A, x marqué et ou
- (y, x) ∈ A, x marqué et >0
Fin tant que
Phase 2 : Augmenter le flot
Si P est marqué Alors
Améliorer ( ,Ch)
Enlever les labels des sommets et aller a Phase 1
Sinon
Déterminer (C) /* Définir la coupe minimale */
Max ( ) = Min (c (C))
Fin si
Etape 4 : Resultats
← /* , est la fonction de flot satisfaisant , */
c (Cmin) /* Cmin est la coupe minimale */
Fin

La procédure Améliorer ( , Ch) est la procédure qui permet d’améliorer le flot en utilisant les
labels des sommets du chemin Ch. (Recherche de la chaine améliorante)

Procédure Améliorer ( , Ch)


x←P;
Tant que x ≠ S Faire
Déterminer
Si Alors
← ; x←z;
Sinon /* */
← ; x←z;
Fin si
Fin tant que
Fin

33
Dr. Bendiab Chapitre 02 Algorithmes de base en théorie des graphes

Exemple :
On donne le réseau de transport de la figure 2.9, appliquer l’algorithme de Ford- Fulkerson afin
de déterminer le flot maximal que l’on peut faire passer à travers ce réseau.

S p

Figure 2.9 . Réseau de transport

Construire un flot complet lors de la première étape de l’algorithme → on part d’un flot complet
au lieu de . ( Partir d’un flot réalisable). Examiner tous les chemins de S à P de façon
systématique,

Pour chaque chemin Ch de S à P, faire passer un flot égal à la capacité résiduelle minimale des
arcs de Ch .

S p

S-3-d-P :10 S-3-c-P :10


S-2-c- P :5 S-2-b- P :5
S-2-a- P :15 S-1-d- P : 20
S-1-b- P :5 S-1-a- P :10 Total = 80

Phase 1 : Procédure de marquage

S p

S P
34
Dr. Bendiab Chapitre 02 Algorithmes de base en théorie des graphes

Phase 2 : Augmenter le flot procédure de changement de flot (rechercher une chaîne


améliorante) puis reprendre la phase de marquage.

S p

On ne peut plus marquer de sommets, P n’est pas marqué → le flot est maximum,
v( ) = 85.
La coupe de valeur minimale est engendrée par le sous-ensemble A des sommets marqués
(S , 1 , b, 3)
v(Cmin) = 85.

35

Vous aimerez peut-être aussi