Telechargé par MOHAMED MOHAMED

Cours Algorithmique de graphe et optimisation

publicité
Support de Cours : Algorithmique de graphe &
optimisation
 Enseignante: Naziha Dhibi
 Niveau: 1ére année II (Ingénieur en Informatique)
 Horaire: 1.5 heure par semaine
 Etablissement: École supérieure d’ingénieure privé de Gafsa
[email protected]
 Résumé du cours :
 Le cours «Théorie des graphes» couvre les notions et les concepts de base de la
théorie des graphes, ainsi que les algorithmes fondamentaux d’optimisation pour
résoudre le problème de recherche d'un plus court chemin.
 Objectifs:
 Introduction aux concepts de la théorie des graphes, des algorithmes
fondamentaux sur les graphes, et à leurs applications
 Définir les Problèmes de coloriage et d’optimisation sur les graphes,
algorithmes : arbre de coût minimum, chemins maximaux ou minimaux.
 Apprendre comment résoudre le problème de recherche d'un plus court chemin
par des algorithmes d’optimisation.
 Présenter les réseaux de transport, flots, circuits, séparateurs; algorithmes de
Ford-Fulkerson, Problèmes d’affectation, couplages maximaux.
 Apprendre comment planifier des projets par les réseaux.
2
 Chapitre 1 : Concepts fondamentaux de la théorie des graphes
 Chapitre 2 : Cheminements et connexités
 Chapitre 3 : Arbres et arborescences
 Chapitre 4 : Plus courts chemins
 Chapitre 5 : Réseaux de transport
 Bibliographie
3
Chapitre1: Concepts fondamentaux de la
théorie des graphes
4
I.
Pourquoi la théorie des graphes?
 Modélisation

Plusieurs problèmes dans différentes disciplines :
• Réseaux informatique,
• Télécommunications,
• Chimie,
• Applications industrielles, …

Un graphe peut représenter simplement la structure, les connexions, les
cheminements possibles d’un ensemble complexe comprenant un grand nombre
de situations

Un graphe est une structure de données puissante pour l’informatique
5
II. Notions et vocabulaire de théorie des graphes
1. Un graphe orienté
Un graphe orienté est un couple G(X,U) :
 X ensemble de sommets ou noeuds (|X|=n ).
 U ⊂ X × X ensemble d’arcs (|U|=m).
2
4
1
3
5
X = { 1, 2, 3, 4, 5 }
U = { (1, 2), (1, 3), (2, 3), (3, 2), (4, 4), (4, 5) }
 Pour un arc u = (i, j), i est l’extrémité initiale, j l’extrémité finale
(ou bien origine et destination).
6
2. Un graphe non orienté
 Un graphe non orienté est un couple G(X,U) :
 U ⊂ X × X ensemble d’arrêtes.
 C'est a dire que (Xi,Xj) est équivalent a (Xj,Xi). Une paire (Xi,Xj) est appelée
une arrête, et est représentée graphiquement par Xi
1
5
 Par exemple:
4
2
Xj.
6
3
Représente le graphe non orienté G = (X, U) avec X = {1, 2, 3, 4, 5, 6}
et A = {(1, 2),(1, 5),(5, 2),(3, 6)}
7
3. Autre Définitions et concepts de base

On appelle graphe valué et on note G = (X,U,C) un graphe où on associe une
fonction f : U
IR appelée coût ou poids des arcs ou valeur des arcs. Le coût
d'un arc (i, j) est noté c(i, j) ou

Un Graphe est dit symétrique si :
 Un Graphe est dit complet si :
8
 i est successeur ou suivant de j si (j, i)
; l'ensemble des successeurs de i est
noté S(i).
 i est prédécesseur ou précédent de j si (i, j)
; l'ensemble des prédécesseurs de
i est noté P(i).
 Degrés
 Dans un graphe non orienté, le degré d'un sommet est le nombre d'arêtes
incidentes à ce sommet(dans le cas d'un graphe simple, on aura
 Le degré extérieur de i,
, est le nombre de sommets suivants de i ;
• Le degré intérieur de i,
, est le nombre de sommets précédents de i ;
 Le degré de i est:
9
 Deux sommets sont adjacents (ou voisins) s’ils sont joints par un arc.
 Deux arcs sont adjacents s’ils ont au moins une extrémité commune.
 Un arc (i, i) est appelé une boucle.
 L’ordre d’un graphe est le nombre de ses sommets.
 Une boucle est un arc ou une arête reliant un sommet à lui-même.
 Un graphe non-orienté est dit simple s’il ne comporte pas de boucle, et s’il ne
comporte jamais plus d’une arête entre deux sommets.
10
 Considérons par exemple le graphe orienté suivant :

Un chemin élémentaire dans ce graphe est < 1, 4, 2, 5 >.

Un chemin non élémentaire dans ce graphe est < 3, 6, 6, 6 >.

Un circuit élémentaire dans ce graphe est < 1, 2, 5, 4, 1 >.

Un circuit non élémentaire dans ce graphe est < 1, 2, 5, 4, 2, 5, 4, 1 >.
11
 i est dit ascendant de j s'il existe un chemin d'origine i et de destination j; j est
alors un descendant de i.
 Soit
.On dit qu'un arc de U est incident à A de l'extérieur si son extrémité
terminale est dans A et son extrémité initiale dans X\A
 Il est dit incident à A de l'intérieur s'il est incident à X\A de l'extérieur.
12
4. Exercice d’application
 Dessiner un graphe non orienté complet à 4 sommets.
 Quel est le degré des sommets de ce graphe ?

Combien d’arêtes possède-t-il ?
 Généralisez ces résultats à un graphe simple complet ayant n sommets.
13
III. Représentation d’un graphe
 Il existe deux façons classiques de représenter un graphe en machine: par une
matrice d'adjacence ou par un ensemble de listes d'adjacence.
1. Représentation par matrice d'adjacence:
 Soit le graphe G = (X, U). On suppose que les sommets de X sont numérotés de
1 à n, avec n =
. La représentation par matrice d'adjacence de G consiste en
une matrice booléenne M de taille n x n telle que:
14
2. Représentation par listes d'adjacence
 Soit le graphe G = (X, U). On suppose que les sommets de X sont numérotés de
1 à n, avec
. La représentation par listes d'adjacence de G consiste en un
tableau T de n listes, une pour chaque sommet de X. Pour chaque sommet
la liste d'adjacence
est une liste chainée de tous les sommets
existe un arc ou une arête
Autrement dit,
,
tels qu'il
.
contient la liste de tous les sommets successeurs de
. Les
sommets de chaque liste d'adjacence sont généralement chainés selon un ordre
arbitraire.
Si le graphe est valué (par exemple, si les arêtes représentent des distances), on
peut stocker dans les listes d'adjacence, en plus du numéro de sommet, la valuation
de l'arête.
15
3. Représentation par matrice d’incidence
 Pour un graphe orienté G=(X,U),
 La matrice d'incidence C(n,m) est déterminée tel que :
16
4. Exercice d'application
 1. Donnez les représentations par matrice d’adjacence et listes d’adjacence du
graphe non orienté suivant :
 2. Donnez les représentations par matrice d’adjacence et listes d’adjacence du
graphe orienté suivant :
 3. Donner la Matrice d’incidence du graphe suivant:
x2
V2
V1
x1
V3
V4
x3
17
5. Des définitions
 Longueur d'un chemin (ou d’une chaîne) :nombre d'arcs du chemin (ou d’arêtes
de la chaîne)
 Distance: la distance entre deux sommets d’un graphe est la plus petite longueur
des chaînes, ou des chemins, reliant ces deux sommets.
 Ordre d'un graphe : nombre de sommets du graphe
 Diamètre : Le diamètre d’un graphe est la plus longue des distances entre deux
sommets.
 Sous Graphe : le graphe G' est un sous graphe de G si l'ensemble des sommets de
G' est inclus dans l'ensemble des sommets de G, et si l'ensemble des arcs de G' est
égal au sous-ensemble des arcs de G reliant entre eux tous les sommets de G’ ; on
a donc retiré de G certains sommets, et tous les arcs adjacents à ces sommets.
18
Chapitre 2: Cheminements et connexités
19
I.
Notions de chemin, chaine, cycle et circuit
 Un chemin dans un graphe orienté est une suite (x,…,y) de sommets 2 à 2
distincts telle que si i suit j dans cette suite (i,j) est un arc.
 Un chemin est élémentaire si les sommets qu’il contient sont tous distincts.
 Une chaîne est un chemin dans un graphe non orienté
 Un chemin qui se referme sur lui–même est un circuit.
 Une chaîne qui se referme sur elle–même est un cycle.
20
II. Cheminements et connexités
1. Notions de connexité

Graphes non orientés:
 Un graphe non orienté est connexe si chaque sommet est accessible à partir de
n'importe quel autre. Autrement dit, si pour tout couple de sommets distincts
il existe une chaine entre
; et
. Par exemple, le graphe non orienté
suivant n'est pas connexe car il n'existe pas de chaîne entre les sommets a et e.
• En revanche, le sous-graphe défini par les sommets {a, b, c, d} est connexe.
21
 Un graphe G = (X,U) est dit simplement connexe ou connexe si :
il existe une chaîne entre i et j.
 Graphes orientés:
• On retrouve ces différentes notions de connexités dans les graphes orientés, en
remplaçant naturellement la notion de chaine par celle de chemin : on parle de
graphe fortement connexe au lieu de connexe, de composante fortement
connexe au lieu de composante connexe.
• un graphe orienté est fortement connexe si chaque sommet est accessible à partir
de n'importe quel autre. Autrement dit, si pour tout couple de sommets distincts
il existe un chemin de
vers
et un chemin de
vers
• Par exemple, le graphe de gauche ci-dessous est fortement connexe, tandis que
celui de droite ne l'est pas :
22
2. Exercices
 Exercice 1
 Trois pays envoient chacun à une conférence deux espions; chaque espion doit
espionner tous les espions des autre pays.
1) Représentez cette situation par un graphe d’ordre 6 dans lequel chaque
arête reliant i et j signifie que i espionne j, et j espionne i.
2) Ce graphe est-il complet? Est-il connexe?
3) a- Quelle est le degrés de chaque sommet?
b- En déduire le nombre d’arêtes du graphe.
23
 Exercice 2
Etant donné un groupe de dix personnes, le tableau suivant indique les paires de
personnes qui ont une relation d'amitié.
1) Représentez cette situation par un graphe d'ordre 10 dans lequel une arête
entre les sommets i et j signifie qu'il y a une relation d'amitié entre i et j.
2)
Ce graphe est-il complet ? connexe ?
3)
Si l'adage "les amis de nos amis sont nos amis" était vérifié, que pourrait-on
en conclure sur la structure du graphe ?
24
III. Notion de graphe eulérien
1.
Définition
 Dans un graphe non orienté, une chaine eulérienne est une chaine qui emprunte
une et une seule fois chaque arête du graphe.

De même, un cycle eulérien est un cycle qui emprunte une et une seule fois
chaque arête du graphe.
 Un graphe comportant une chaine ou un cycle eulérien est appelé graphe eulérien.
 Un graphe (simple ou multiple) connexe admet un cycle eulérien si et seulement
s’il n’a pas de sommet de degré impair.
25
 Un graphe (simple ou multiple) connexe admet une chaine eulérienne entre
deux sommets u et v si et seulement si le degré de u et le degré de v sont
impairs, et les degrés de tous les autres sommets du graphe sont pairs.
 On retrouve ces différentes notions sur les graphes orientés :
 un chemin eulérien est un chemin qui emprunte une et une seule fois
chaque arc du graphe.
 De même, un circuit eulérien est un circuit qui emprunte une et une seule
fois chaque arc du graphe.
26
2.
Exercices d’application
 Exercice1
• Montrer que le graphe suivant est eulérien
27
 Exercice 2
 On considère le graphe G suivant:
1- Justifier que G n’admet pas un cycle eulérien mais qu’il admet des chaînes
eulériennes.
2- Déterminer une chaîne eulérienne dans G.
28
 Exercice 3
Pour les graphes suivants dites s’ils admettent au moins une chaîne eulérienne et dans
l’affirmatique indiquez en une
4-3-2-5-1
29
 Exercice 4
30
IV. Notion de graphe hamiltonien
 Dans un graphe simple non orienté comportant n sommets, une chaine
hamiltonienne est une chaine élémentaire de longueur n- 1. Autrement dit, une
chaine hamiltonienne passe une et une seule fois par chacun des n sommets du
graphe. On appelle cycle hamiltonien un cycle élémentaire de longueur n. Un
graphe possédant un cycle ou une chaine hamiltonienne sera dit graphe hamiltonien.
 Par exemple, le graphe suivant possède un cycle hamiltonien
(< a; e; b; d; c; a >)
 En revanche, le graphe suivant ne possède pas de cycle hamiltonien, mais possède
une chaine hamiltonienne (< a; b; e; d; c >).
31
V. Coloriage d’un graphe
1. Coloriages
 Un coloriage du graphe G est une manière d’attribuer une couleur à chacun de ses
sommets. On dit qu’un coloriage est propre si deux sommets reliés par une arête
ont des couleurs différentes. Le graphe G étant fini,
 Remarque : le problème du coloriage d’un graphe avec un nombre limité de
couleurs est un problème combinatoire (on dit qu’il s’agit d’un problème NPcomplet). Cela signifie que tout algorithme résolvant ce problème de façon exacte
pourra prendre un temps exponentiel par rapport au nombre de sommets du
graphe (de l’ordre de 2n pour n sommets). Le problème de déterminer le nombre
chromatique d’un graphe est également exponentiel, et est en fait encore plus
difficile.
32
2. Nombre chromatique
 On peut définir le nombre chromatique X(G) d’un graphe fini G comme le plus
petit nombre n tel que G puisse être colorié avec n couleurs.
 Le nombre chromatique est le plus petit nombre de couleurs permettant de
colorier tous les sommets du graphe sans que deux sommets adjacents soient de la
même couleur.
 Le nombre chromatique d'un graphe est inférieur ou égal au plus grand degré de
ses sommets k majoré par 1: X(G)< K + 1
 Le nombre chromatique d'un graphe est supérieur ou égal à l'ordre de tous ses
sous graphes complets.
33
3. Exercices


Exercice 1
1. A quoi
ressemble un graphe de nombre chromatique 1 ?
 2. Quel est le nombre chromatique d’un graphe bipartite ?
 3. Quel est le nombre chromatique d’un graphe complet ?
 Correction:
 1. Dès qu’il y a une arête, il faut au moins deux couleurs. Un graphe de nombre
chromatique 1 est donc un graphe sans arêtes.
 2. Soit un graphe bipartite (on suppose qu’il a au moins une arête), et soient I et J les deux
ensembles de sommets indépendants de ce graphe. Alors on peut colorier tous les
éléments de I avec une même couleur, et tous les éléments de J avec une autre couleur. Le
nombre chromatique d’un graphe bipartite est donc égal à 2.

3. Dans un graphe complet, deux sommets quelconques sont reliés. Son nombre
chromatique est donc égal au nombre de sommets
34
 Exercice 2
 Colorier un graphe en respectant les contraintes suivantes ?
 Utiliser le minimum de couleurs ;
 Faire en sorte que deux sommets ayant une arc commune soient coloriés de deux
couleurs différentes...
35
4. Algorithme de Welch-Powell: algorithme glouton
Colorer un graphe c'est colorer les sommets de telle façon que deux sommets distincts et
adjacents aient toujours des couleurs différentes.
• Méthode :
1- Ranger les sommets par ordre décroissant de leurs degrés ;
2- Choisir une couleur ;
3- Affecter cette couleur au premier sommet de la liste non encore coloré ;
4- Suivre la liste en attribuant cette même couleur à tout sommet qui:
- n'est pas encore coloré ;
- et qui n'est pas adjacent à un sommet coloré avec cette couleur.
 Continuer jusqu'à ce que la liste soit finie.
 Si tous les sommets ne sont pas colorés, choisir une couleur qui n'est pas encore utilisée et
recommencer les étapes 3 et 4 ;
 Continuer tant que chaque sommet n'est pas coloré.
36
VI. Exercices d’application
 Exercice 1
Déterminer le nombre chromatique des graphes suivants:
Correction
Tout graphe contenant un triangle (K3) ne peut être colorié en moins de trois couleurs.
Ces graphes ont respectivement pour nombre chromatique 3, 2 et 3
37
 Exercice 2
 Déterminer le nombre chromatique des graphes suivants:
38

Exercice 3
 Recopier le graphe ci-dessous et utiliser l’algorithme de welch-Powell pour le
colorier.
39
 Exercice 4
 T est le graphe ci-contre:
 1) On note G (T) le nombre chromatique de T.
a- Pourquoi le sous graphe constitué des sommets C, D, E et F est complet.
b- Démontrer que 4 ≤ G (T) ≤ 6.
c- Déterminer la valeur de G (T)
 2) On considère un groupe d’élèves notés A, B, C, D, E, F et G.
Pour un exposé, les élèves se mettent en équipes, mais il faut respecter les
incompatibilités entre les élèves.
Dans le tableau ci-après, chaque croix indique une incompatibilité entre les élèves
correspondants.
a- Si l’on décide de modéliser ce tableau d’incompatibilité par le graphe T, quel sens
faut-il donner à l’existence d’une arrête entre deux sommets?
b- Combien d’équipes faudra-t-il créer en minimum?
Proposer une répartition des élèves en équipes :
(une équipe peut comporter un seul élève).
40
 Exercice 5
41
 Exercice 6
 Dans la ville de GRAPHE, on s’intéresse aux principales rues permettant de
relier différents lieux ouverts au public, à savoir la mairie (M), le centre
commercial (C), la bibliothèque (B), la piscine (P) et le lycée (L). Chacun de
ces lieux est désigné par son initiale. Le tableau ci-dessous donne les rues
existant entre ces lieux.
 a) Dessiner un graphe représentant cette situation.
 b) Montrer qu’il est possible de trouver un trajet empruntant une fois et une
seule toutes les rues de ce plan. Justifier?
 c) Proposer un tel trajet.
 d) Est-il possible d’avoir un trajet partant et arrivant du même lieu et passant
une fois et une seule par toutes les rues ?
42
 Exercice 7
Soit le graphe ci-dessous constitué des sommets A, B, C, D, E, F et G.
1) Quel est son ordre et le degré de chacun de ces sommets ?
2) Construire un tableau indiquant les distances entre deux sommets de G :
3) En déduire le diamètre de ce graphe.
4) Donner un sous-graphe complet de G d’ordre 3. Qu’en déduire pour le nombre
chromatique de G ?
5) Proposer une coloration du graphe G et en déduire son nombre chromatique.
6) Donner la matrice M associée à G (vous numéroterez les lignes et les colonnes dans
l’ordre alphabétique).
43
Chapitre 3:Arbres et arborescences
44
I.
Définition
 Les arbres et les arborescences sont des graphes particuliers très souvent utilisés en
informatique pour représenter des données.
 Etant donné un graphe non orienté comportant n sommets, les propriétés suivantes
sont équivalentes pour caractériser un arbre :
1. G est connexe et sans cycle,
2. G est sans cycle et possède n -1 arêtes,
3. G est connexe et admet n -1 arêtes,
4. G est sans cycle, et en ajoutant une arête, on crée un et un seul cycle
élémentaire,
5. G est connexe, et en supprimant une arête quelconque, il n’est plus connexe,
6. Il existe une chaine et une seule entre 2 sommets quelconques de G.
45
 Par exemple, le graphe suivant est un arbre :
On appelle forêt un graphe dont chaque composante connexe est un arbre.
 Un arbre est un graphe non orienté connexe sans cycle simple
46
 Dans un graphe G=(X,U), on appelle racine, un point a tel que tout autre sommet
du graphe puisse être atteint par un chemin issu de a. Une racine n’existe pas
toujours.
 La racine r de l'arbre est l'unique nœud ne possédant pas de parent
47
 Tout sommet x qui n’est pas la racine a.

un unique parent, noté parent(x) (appelé père parfois)

0 ou plusieurs fils. fils(x) désigne l’ensemble des fils de x
 Si x et y sont des sommets tels que x soit sur le chemin de r à y alors
- x est un ancêtre de y
- y est un descendant de x
Un sommet qui n’a pas de fils est une feuille
 Quand il n’y a pas d’ambiguïté, on regarde les arêtes d’un arbre comme étant orienté
de la racine vers les feuilles
48
1 est la racine
9,10,6,3,11,12,8 sont les feuilles
11 est un descendant de 4, mais pas de 2
2 est un ancêtre de 10
49
1 est la racine
2,3,4 sont à la profondeur 1
5,6,7,8 à la profondeur 2
La hauteur de 2 est 2, celle de 9 est 4, celle de 3 est 2, celle
de 1 est 1.
50
 Exercice
 On considère le graphe non orienté suivant :
Combien faut-il enlever d’arêtes à ce graphe pour le transformer en arbre ?
Donnez un graphe partiel de ce graphe qui soit un arbre.
 Correction
Le graphe comporte 7 sommets et 11 arêtes. Pour le transformer en arbre il faudra
donc enlever 5 arêtes.
Par exemple, les arêtes (f; g), (b; g), (b; c), (b; d)
et (g; c).
51
II. Les Arborescences

Une arborescence est un graphe orienté sans circuit admettant une racine
telle que, pour tout autre sommet
, il existe un chemin
unique allant de vers . Si l'arborescence comporte n sommets, alors
elle comporte exactement n-1 arcs.
 Par exemple, le graphe suivant est une arborescence de racine a :
52
 Exercice
 L’ile du Nivéou, en Camargue, se consacre à la culture du riz. Sur cette ile se trouvent
9 champs entourés de murs et disposés de la façon suivante :
 La culture du riz suppose que l’on puisse périodiquement inonder l’ensemble des
champs. Cela est réalisé en ouvrant des vannes placées dans les murs séparant les
champs et le Rhône ou les champs entre eux. Etant donné que l’installation d’une
vanne est coûteuse,
 il s’agit de déterminer le nombre minimum de vannes et leur emplacement pour
pouvoir, quand on le désire, inonder tous les champs.
53
 Correction :

Pour résoudre ce problème, on peut considérer le graphe non orienté comportant
un sommet pour chaque intersection de mur, et une arête pour chaque mur :
54
 En considérant que lorsqu’on place une vanne sur un mur, on supprime l’arête
correspondante dans le graphe, le problème revient à supprimer des arêtes jusqu’à
ce que le graphe ne comporte plus de cycles (autrement dit, placer des vannes
jusqu’à ce qu’il n’y ait plus de champ entouré de murs sans vanne). Comme on
souhaite poser le moins de vannes possible, on cherche un graphe partiel sans cycle
tel que si l’on rajoute une arête on crée un cycle : selon la proposition 4, il s’agit
d’un arbre. Ici, étant donné que le graphe a 12 sommets et 20 arêtes, l’arbre devra
posséder 12-1= 11 arêtes (selon la proposition 2), et on devra donc installer 2011=9 vannes. On obtiendra (par exemple) l’arbre suivant :
55
III. Le problème de recherche d'un arbre de poids minimum
 Le problème de recherche d'un arbre de poids minimum (minimum tree of pods)
Si on associe à chaque arc d'un graphe G=(X,U) une valeur (un poids).
 Le problème de l'arbre de coût minimum consiste à trouver un sous graphe qui est
un arbre, dont la somme des poids des arcs est minimale.

Par exemple: minimiser le coût d'installation des lignes téléphoniques dans une
localité peut être représenté comme un problème de recherche d'un arbre de coût
minimum. En effet, on veut relier tous les points de la localité sans avoir de lignes
inutiles, d'où la recherche d'un arbre.
 Ensuite on veut avoir un coût d'installation minimum, alors on associera à chaque
possibilité d'installation d'une ligne le coût nécessaire et on cherchera à minimiser
le coût total de toute l'installation.
56
En 1956, Kruskal a donné un algorithme qui permet de résoudre ce problème.
 Algorithme de kruskal pour construire un arbre de poids
minimum:
57
1. Algorithme de kruskal
 Le principe: L'idée de l'algorithme de Kruskal est tout d'abord de numéroter les
arcs par ordre des poids croissants. Ensuite de construire progressivement l'arbre A
en rajoutant dans leurs ordre, les arcs un par un. Un arc est ajouté seulement si son
adjonction à A ne détermine pas de cycle, c'est-à-dire si A ne perd pas sa notion
d'arbre, sinon on passe à l'arc suivant dans l'ordre de la numérotation.
Application: Soit G=(X,U) un graphe connexe représentant le projet d'installation
de lignes téléphoniques. Les poids représentent le coût d'installation des lignes. On
veut donner un plan d'installation minimisant le coût total de l'installation.
58
2. Algorithme de Prim
 Principe: Construction incrémentale d'un arbre de poids minimum:
 Au départ, un sommet
est choisi arbitrairement, ce sommet constitue l'arbre
couvrant de poids minimum.
 Parmi toutes les arêtes incidentes à
,choisir celle de plus faible poids
 Le nouvel arbre obtenu est constitué des sommets
et
.
et de l'arête
 Tant qu'il reste des sommets en dehors de l'arbre :
 Parmi l'ensemble des arêtes incidentes aux sommets de l'arbre et ayant une
extrémité hors de l'arbre, choisir celle dont le poids est le plus faible.
 On construit un arbre en partant d'un sommet initial et en ajoutant chaque fois une
arête du poids min qui le touche par une extrémité.
59
60
61
3. Parcours de graphes
Beaucoup de problèmes sur les graphes nécessitent que l’on parcourt l’ensemble des
sommets et des arcs/arêtes du graphe. On étudie dans la suite les deux principales
stratégies d’exploration :
 Le parcours en largeur consiste à explorer les sommets du graphe niveau par
niveau, à partir d’un sommet donné.
 Le parcours en profondeur consiste, à partir d’un sommet donné, à suivre un
chemin le plus loin possible puis à faire des retours en arrière pour reprendre tous
les chemins ignorés précédemment.
62
a.
Arborescence couvrante associée à un parcours
 On parcourt un graphe à partir d'un sommet donné
. Ce parcours va permettre
de découvrir tous les sommets accessibles depuis
sommets pour lesquels il existe un chemin depuis

, c'est à dire tous les
.
En même temps que l'on effectue ce parcours, on construit l'arborescence de
découverte des sommets accessibles depuis
de
, appelée arborescence couvrante
.
 Cette arborescence contient un arc
été découvert à partir du sommet
entrer
si et seulement si le sommet
(autrement dit, c'est le sommet
a
qui a fait
dans la file d'attente).
 Ce graphe est effectivement une arborescence, dans la mesure où chaque
sommet a au plus un prédécesseur, à partir duquel il a été découvert. La racine
de cette arborescence est
parcours
, le sommet à partir duquel on a commencé le
63
b.

Parcours en profondeur (Depth-FirstSearch)
Un parcours en profondeur (DFS) d’un graphe G:
 Un parcours en profondeur (DFS) d’un graphe G
 Visite tous les sommets et toutes les arêtes de G
 Détermine si G est connexe ou non
 Calcule les composantes connexes de G
 Calcule une forêt couvrante pour G
 L’algorithme de parcours en profondeur (DFS) d’un graphe G prend un temps O(n+m)
 L’algorithme de parcours en profondeur peut être étendu pour résoudre d’autres
problèmes sur les graphes:
 Trouver un chemin entre 2 sommets
 Trouver un cycle dans un graphe
64
65
 Propriétés du parcours en profondeur:
Propriété 1: DFS(G,S) visite tous les sommets et les
arêtes de la composante connexe de s
Propriété 2: Les arêtes sélectionnées lors du parcours
DFS(G,s) forme un arbre couvrant pour la composant
connexe de s
66
 Complexité en temps du parcours en profondeur:
 Étiquetter ou "lire" l'étiquette d'un sommet ou d'une arête Ο(1)
 Chaque sommet est étiquetté deux fois
 une fois "non exploré "
O(n)
 une fois "visité "
 Chaque arête est étiquettée deux fois
 une fois "non explorée "
O(m)
 une fois "sélectionnée" ou "de retour "
 L'opération incidents (U) est appelée une fois pour chaque sommet U
 Si notre graphe est représenté par une liste d'adjacences, la complexité en temps
de l'algorithme DFS est O(m+n)
67
c.
Applications du parcours en profondeur
 On peut étendre l’algorithme DFS en
un algorithme pour trouver un chemin
entre 2 sommets donnés v et z.
 L’idée est d’appeler DFS(G,v), sur v le
premier sommet.
 On utilise une pile P qui garde en
mémoire un chemin entre le sommet de
départ et le sommet courant.
 Quand le sommet final z est atteint on
retourne le contenu de la pile
qui
contient le chemin cherché.
68
 On peut étendre l’algorithme DFS
en un algorithme pour trouver un
cycle dans un graphe (s’il en existe
un).
 On utilise une pile P qui garde en
mémoire un chemin entre le
sommet de départ v et le sommet
courant.
 Si on trouve une arête de retour vers
v, on retourne le cycle trouvé qui est
contenu dans la pile.
69
 Parcours en profondeur
 Ordre de visite préfixé
On marque quand on atteint le nœud.
1, 2, 5, 9, 10, 6, 3, 4, 7, 11, 12, 8
 Ordre de visite postfixé
On marque quand on quitte le nœud.
9, 10, 5, 6, 2, 3, 11, 12, 7, 8, 4, 1
70
 Exercices d'application
 Exercice 1
 Indiquer l’ordre de visite et de post-visite des sommets du graphe non orienté ci-
dessous dans un parcours en profondeur.
71
 Exercice 2
 Existe-t-il un graphe G de huit sommets, numérotés de 1 à 8, de façon que, dans
un parcours en profondeur de G l’ordre de visite des sommets soit 1,2,3,4,5,6,7,8
et l’ordre de post-visite soit:
i) 5, 3, 2, 4, 7, 6, 8, 1?
ii) 4, 3, 5, 2, 7, 6, 8, 1?
 S’il y a une solution, est-elle unique?
72
d. Parcours en largeur (Breadth-First Search)
 Un parcours en largeur (BFS) d’un graphe G
 Visite tous les sommets et toutes les arêtes de G
 Détermine si G est connexe ou non
 Calcule les composantes connexes de G
 Calcule une forêt couvrante pour G
 L’algorithme de parcours en largeur (BFS) d’un graphe G prend un temps
O(n+m)
 L’algorithme de parcours en largeur peut être étendu pour résoudre d’autres
problèmes sur les graphes:
 Trouver le plus court chemin entre 2 sommets
 Trouver un cycle simple dans un graphe
73
74
 Propriétés du parcours en largeur:
Propriété 1: BFS(G,s) visite tous les sommets
et les arêtes de la composante connexe de s
Propriété 2: Les arêtes sélectionnées lors du
parcours DFS(G,s) forme un arbre couvrant
pour la composant connexe de s
Propriété 3: Pour tous sommets u dans L ,le
chemin de s à u suivant les arêtes de l’arbre
couvrant contient exactement i arêtes et i+1
sommets. C’est un plus court chemin de s à u.
75
• Complexité en temps du parcours en largeur:
 Étiquetter ou “lire” l’étiquette d’un sommet ou d’une arête O(1)
 Chaque sommet est étiquetté deux fois:
 une fois “non exploré
O(n)
 une fois “visité
 Chaque arête est étiquettée deux fois

une fois “non explorée

une fois “sélectionnée” ou “de traverse”
O(m)
 Chaque arête est insérée au plus une fois dans un ensemble Li
 L’opération Incidents (U) est appelée une fois pour chaque sommet U
 Si notre graphe est représenté par une liste d’adjacences, la complexité en temps de
l’algorithme DFS est O(m+n).
76
e.
Applications du parcours en largeur
77
 Exemple
 En fait, c’est une généralisation des parcours hiérarchiques des arbres (on regarde la
racine puis les voisins, puis les voisins des voisins, . . .). On va donc gérer la variable à
traiter comme une file FIFO (First In First Out).
 Pour parcourir le graphe en largeur, on va ajouter deux règles : on fait défiler les sommets
dans l’ordre des numéros ; on examine les successeurs d’un sommet dans le même ordre.
 On commence par 1 et ses voisins 2, 4 et 5.
 On regarde le plus petit voisin, c’est 2.
 On regarde les voisins de 2, ce sont 3 et 4. On a déjà vu 4
 (il est déjà dans la pile). On ne tient donc pas compte de l’arc(2,4).
 Le sommet suivant est 4. Son seul voisin est 3, que l’on a déjà vu.
 Le sommet suivant est 5. Son seul voisin est 4, que l’on a déjà empilé ́.
 Le sommet suivant est 3. Le seul voisin, qui est 1, a déjà été traité.
 La file est alors vide. On remonte donc `a un sommet non-atteint, dans l’ordre des
numéros.
 On traite donc le sommet 6. Ses voisins sont 7 et 8.
 On traite le sommet 7 dont le seul voisin est 5, qui a déjà été traité.
 On passe ensuite au sommet 8 dont les voisins 4, 6 et 7 ont tous déjà été traités.
 La file est alors vide et on a traité tous les sommets.
78
DFS vs BFS
79
IV. Exercice d'application
 Exercice1

Effectuez un parcours en largeur/profondeur d’abord en partant de 0 pour construire
une arbre.
80
 Exercice 2
Effectuez un parcours en largeur en partant de 5 pour construire une arbre.
81
Chapitre 4: Plus courts chemins
82
I.
Définitions
 Un automobiliste souhaite découvrir le plus court chemin possible (en nombre de
kilomètres) pour circuler de Strasbourg à Bordeaux. Etant donnée une carte
routière de France, avec les distances de chaque portion de route, comment peut-il
déterminer la route la plus courte ?
 Un parcours en largeur du graphe associé à la carte de France ne permettra pas de
résoudre ce problème : il permettra de trouver l’itinéraire comportant le moins
d’étapes (traversant le moins de sommets), mais cet itinéraire n’est pas
nécessairement le plus court en nombre de kilomètres.
 Une possibilité consiste à énumérer tous les chemins entre Strasbourg et
Bordeaux, additionner les distances pour chacun d’eux, et distinguer le plus court.
Cependant, on s’aperçoit rapidement que, même en n’acceptant pas les chemins
qui contiennent des circuits, il existe des milliers de possibilités, dont la plupart ne
valent même pas la peine d’être considérées.
83
 Soit G = (S;A) un graphe orienté valué tel que la fonction
Cout: A
R associe à chaque arc
de A un coût réel cout
• Le coût d'un chemin p =< S0, S1; S2, ... ... ; Sk > est égal à la somme des coûts des
arcs composant le chemin, c'est-à-dire:
 Le coût d'un chemin sera aussi appelé poid du chemin.
 Le coût (ou poid) d'un plus court chemin entre deux sommets
et
est noté
est défini par :
84
 Considérons par exemple le graphe valué orienté suivant :
on a δ(a; b) = 3, δ(a; e) = 5, δ(a; c) = 9 et δ(a; d) = 11.
85
II. Le problème de recherche d'un plus court chemin
Conditions d'existence d'un plus court chemin :
s'il existe un chemin entre deux sommets u et v contenant un circuit de coût négatif,
alors (u; v) = -oo, et il n'existe pas de plus court chemin entre u et v. Un circuit
négatif est appelé un circuit absorbant.
Considérons par exemple le graphe orienté valué suivant
Le chemin < s ; e; f; e;f; g > contient le circuit < e; f; e > de coût négatif -3.
Autrement dit, à chaque fois que l'on passe dans ce circuit, on diminue de 3 le coût
total du chemin. Par conséquent,
et il n'existe pas de plus court chemin
entre s et g.
86
 On va maintenant étudier 2 algorithmes qui permettent de résoudre
des problèmes de recherche de plus courts chemins à origine unique :
 L'algorithme de Dijkstra résout ce problème lorsque tous les coûts sont positifs
ou nuls,
 L'algorithme de Ford-Bellman résout ce problème lorsque les coûts sont positifs,
nuls ou négatifs, sous réserve qu'il n'y ait pas de circuit absorbant (de coût
négatif).
 Les deux algorithmes procèdent de la même façon, selon une stratégie dite
"gloutonne". l'idée est d'associer à chaque sommet
qui
une valeur
représente une borne maximale du coût du plus court chemin entre
et
87
 C'est-à-dire
• L'algorithme
ainsi au départ:
diminue alors progressivement les valeurs d[si] associées aux
différents sommets, jusqu'à ce qu'on ne puisse plus les diminuer, autrement dit,
jusqu' à ce que
88
 Pour réduire les valeurs de d, on va répétitivement examiner chaque arc
graphe, et observer si on ne peut pas améliorer la valeur de
Cette opération de diminution est appelée relâchement de l'arc
• Les
du
en passant par
, et s'écrit
algorithmes de Dijkstra et Bellman-Ford découlent 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.
89
III. Algorithme de Dijkstra
 L'algorithme de Dijkstra ne marche pas toujours quand le graphe contient des arcs
dont les coûts sont négatifs.
 Considérons par exemple le graphe suivant, où l'on cherche les plus courts chemins à
partir du sommet 1. On voit immédiatement que la plus courte distance entre les
sommets 1 et 2 est 2, alors que l'algorithme de Dijkstra donne 3.
90
 Algorithme de MOORE-DUKSTRA : énoncé
 Les données
 un graphe dont les arcs sont valués par des nombres positifs,
 un sommet s racine du graphe à partir duquel on veut déterminer les plus courts
chemins aux autres sommets,
 pour chaque sommet x de X, l'ensemble succ(x) de ses successeurs.
 Initialisation
 Pour tous les sommets x dans S Poser
, poser
 Corps de l'algorithme
91
 Les résultats
 Pour chaque sommet,
est égal à longueur d'un plus court chemin de S à X.
 Père(y) = x indique que le sommet x est le prédécesseur de y sur le plus court
chemin de s à y.
 En comparaison avec l'algorithme de
Dijkstra l'algorithme de Bellman-Ford
permet de trouver les plus courts chemins à origine unique dans le cas où le
graphe contient des arcs dont le coût est négatif, sous réserve que le graphe ne
contienne pas de circuit absorbant (dans ce cas, l'algorithme de Bellman-Ford va
détecter l'existence de circuits absorbants).
92
IV. Algorithme de Bellman-Ford
 Algorithme de Bellman

Données
• Un graphe valué sans circuit dont les sommets sont numérotés dans l'ordre du tri
topologique
• Le sommet de départ s est racine du graphe et il est numéroté 1
•On connaît pour chaque sommet x ses prédécesseurs Pred(x).
 Initialisation
Poser λ(1) = 0
93
 Corps de l'algorithme
POUR x de 2 à n
FAIRE (on examine les prédécesseurs du sommet x)
Calculer λ (x) = min ( λ(y) +l(y,x)) pour y dans Pred(x) (on parcourt les
prédécesseurs de x, on calcule ( λ(y) + l(y,x) et on prend le minimum de ces
quantités)
POSER père(x) = y avec y prédécesseur y de x pour lequel ce minimum est
atteint
FINFAIRE
FINPOUR
FIN
 Résultats
λ(x) est égale à la longueur d'un plus court chemin de s à x.
Père(x) détermine le sommet prédécesseur de x sur le plus court chemin de s à x.
94
 L'algorithme de BelIman-Ford fonctionne selon le même principe que celui de
Dijkstra : on associe à chaque sommet
une valeur
borne maximale du coût du plus court chemin entre
qui représente une
et
 L'algorithme diminue alors progressivement les valeurs
.
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
, 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
, 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
, auront ete trouves.
95
V. Synthèse
96
VI. Exercices d'application

Exercice1
 Cherchons les plus courts chemins d’origine A dans ce graphe:
97

Exercice 2
• Cherchons les plus courts chemins d’origine E dans ce graphe:
98

Exercice 3
 Déterminer l’autoroute reliant A et I de cout minimum (Application d’un
algorithme)
99

Exercice 4
• Cherchons les plus courts chemins d’origine 1 dans ce graphe
100

Exercice 5
• Cherchons les plus courts chemins d’origine S dans ce graphe en utilisant
l’algorithme de Dijkstra
101

Correction
102
 Algorithme de Bellman
Il s'agit d'abord de numéroter les sommets du graphe dans l'ordre du tri topologique.
Num(s) = 1 num(c) = 2 num(a) = 3 num(b) = 4 num(d) = 5 num(e) = 6
Pred(s) = ∅, Pred(c) = {s}, Pred(a) = {s, c}, Pred(b) = {a, c}, Pred(d) = {a, b, c},
Pred(e) = {b, d}
On calcule successivement : λ(s) = 0, λ(c) = λ(s) + l(s, c) = 0+ 1 = 1,
père(c) = s
λ(a) = Min(λ(s) + l(s, a), λ(c) + l(c, a)) = min(0 + 5, 1 + 2) = 3 père(a) = c
λ(b) = Min(λ(a) + l(a, b), λ(c) + l(c, b)) = min(3 + 1,1 + 2) = 3 père(b) = c
λ(d) = Min(λ(a) + l(a, d), λ(b) + l(b, d), λ(c) + l(c, d)) = min(3 + 2, 3 + 1, 1 + 5) = 4,
père(d )= b
λ(e) = Min(λ(b) + l(b, e), λ(d) + l(d, e)) = min(3 + 4, 4 + 2) = 6,
père(e) = d
103
 Ces résultats sont reportés sur le graphique suivant :
 Les longueurs des plus courts chemins sont dans les étiquettes et les arcs en gras
montrent pour chaque sommet l'arc le reliant à son père.
104

Exercice 6
 On recherche les plus courts chemins à partir du sommet a.
105

Exercice 7
 Considérons l’exemple suivant.
 On recherche les plus courts chemins à partir du sommet a.
106
Chapitre 5: Le problème central de
l'ordonnancement
107
I.
Introduction
La réalisation de projets complexes comme par exemple la construction d’un
barrage, l’installation d’une nouvelle chaîne de production, l’installation d’un
nouveau système d’information,… requiert une planification au préalable et un
contrôle au cours de l’exécution. Les problèmes liés à ces objectifs sont des
problèmes d’ordonnancement .
On cherche un ordre d’exécution des
différentes tâches de manière à optimiser un certain critère
Calendrier d’exécution
108
 Résoudre un pb d’ordonnancement = trouver l’ordre et le calendrier suivant lequel
devront être exécutées les tâches afin d’optimiser un projet donné en tenant comptes
d’un certain nbr de contraintes
 Les contraintes sont de type:
 Potentiel : contraintes d’antériorité (ou postériorité), contrainte de localisation
temporelle
 Disjonctif: La non réalisation simultanée de 2 tâches
 Cumulatif : les moyens disponibles (hommes, machines, budgets…)
109
II. Le problème central de l'ordonnancement

Les seules contraintes considérées dans ce problème sont les contraintes
d’antériorité
 On cherche à réaliser un ensemble de tâches appelé projet, chaque tâche est
caractérisée par sa durée et par les contraintes qui la lie aux autres tâches

Objectif :Finir le projet le plus tôt possible
 La représentation de ce problème pour un graphe permet d’identifier les tâches
prioritaire et donne pour chaque tâche le temps d’exécution permettant de finir le
projet au plus tôt.
110
III. Le graphe potentiel-Tâches
À partir d’un prj donné on construit le graphe suivant:
À chaque tâche i on associe un sommet du graphe
On définit l’arc (i,j) si la tâche i précède la tâche j
La longueur de l’arc (i,j) représente la durée d’exécution de la tâche i
On rajoute deux sommets fictifs :
 dp correspondant au début du projet et reliés aux sommet sans précédents
fp correspondant à la fin du projet et relié aux sommet sans suivants
Le graphe ainsi construit doit être sans circuit
111
 Exemple : Situation où l’on doit construire une maison
112
Le graphe potentiel-Tâches
113
1. Exercice
114
Pour chaque tâche, on définit la date du début d’exécution au plus tôt et au
plus tard permettant de finir le projet au plus tôt
Algorithmes:
1- Calcul des dates au plus tôt
1.Prendre les sommet par rang
2.
115
116
117
2. Définitions
1- On appelle marge
de la tâche i,
2- Les tâches dont les marges sont nulles sont dites tâches critiques
3- On appelle chemin critique, tout chemin de dp à fp passant par les sommets
critiques et de longueur égale à la durée min du projet.
 Remarques:
1- En cas de présence d’un circuit négatif, pour calculer les
il faut calculer la
longueur du plus long chemin μ du i à fp puis
2- Si un retard est pris sur une des tâches critiques, la durée minimale du projet sera
augmentée d’autant.
118
119
3. Le diagramme de gantt
a.
Principe:
On représente au sein d’un tableau, en ligne les différentes tâches et en colonne
les unités de temps( exprimées en mois, semaines, jours, heures…) La durée
d’exécution d’une tâche est matérialisée par un trait au sein du diagramme.
b. Réalisation:
1. On détermine les différentes tâches (ou opérations) à réaliser et leur durée.
2. on définit les relations d’antériorité entre tâches.
3. on représente d’abord les tâches n’ ayant aucune antériorité,
puis les tâches
dont les tâches antérieures ont déjà été représentées, et ainsi de suite…
4. on représente par un trait parallèle en pointillé à la tâche planifiée la
progression réelle du travail.
120
c.
Exemple
Tracer le graphe potentiels-Tâches associé, ainsi que le diagramme de Gantt
121
122
123
IV. Traduction des contraintes

Si les contraintes de type potentiel ne sont pas uniquement des contraintes
d’antériorité, on modifie le graphe potentiel-tâches ainsi:
 La contraint j ne doit pas commencer avant la moitié du temps de réalisation
de la tâche i se représente par un arc (i,j) de valeur di/2
 La contraint j ne doit commencer qu’après un temps t de la fin de i
 un arc(i,j) de valeur di +t
 La contraint j ne doit commencer qu’après la date bj
 arc(dp,j) de durée bj
124
• La contraint j doit commencer avant la date cj
de durée –cj
un arc entre dp et j
 La contraint j ne doit suivre immédiatement la tâche i se représente
par un arc entre(i,j)
 REMARQUES
1.Attention, l’ajout des contraintes peut introduire des circuits dans le graphe.
125
V. Le graphe potentiel étapes(PERT)
Â partir d’un projet donné on construit le graphe suivant:
►Chaque tâche est un arc de longueur di ( durée de i)
►Les sommets : Étapes du prj , i.e: le début et la fin de chaque tâche
►Si une tâche j succède à une tâche i L’extrémité initiale de j coïncide avec
l’extrémité terminale de i
►On rajoute au graphe deux étapes fictives : dp et fp
On définit ainsi un multigraphe sans circuit
126
 Les dates au plus tôt et au plus tard de l’exécution d’une tâche sont calculées de
la même manière que pour le graphe potentiel-tâche.
►La durée min du projet est la longueur du plus long chemin entre le début et la
fin du projet.
127
REMARQUES:
1.un sommet est une étape signifiant toutes les tâches qui y arrivent sont terminées
toutes les tâches qui en partent peuvent commencer
2.il est quelque fois nécessaire d'introduire des tâches fictives de durée nulle
128
3. deux arcs ne peuvent avoir à la fois la même origine et la même extrémité. Il est
nécessaire de rajouter une tâche fictive dans ces conditions
129
Graphe potentiel étapes(PERT)
130
 Exemple
131
132
Chapitre 6: Réseaux de transport
133
I. Introduction
 Les réseaux de transport peuvent être utilisés pour modéliser l’écoulement de liquide
à l’intérieur de tuyaux, la circulation de pièces dans une chaîne de montage, du
courant dans les réseaux électriques, de l’information à travers les réseaux de
communication, ...

D’une façon plus générale, un réseau de transport désigne le fait qu’un “matériau”
(de l’eau, de l’électricité, de l’information,...) doit s’écouler depuis une source, où il
est produit, jusqu’à un puits, où il est consommé. La source produit le matériau à un
certain débit, et le puits consomme ce matériau avec le même débit.
 Entre la source et le puits, ce matériau est transporté par des conduits ; chacun de ces
conduits a une capacité qui représente la quantité maximale de matériau pouvant
transiter par le conduit pendant une unité de temps (par exemple, 200 litres d’eau par
heure dans un tuyau, ou 20 ampères de courant électrique à travers un câble).
134
II. Modélisation de réseaux de transport
 Les réseaux de transport peuvent être modélisés par des graphes :

Chaque arc du graphe correspond à un conduit du réseau de transport, par lequel le
matériau est acheminé.
 Chaque arc est valué par la capacité du conduit correspondant.
 Chaque sommet du graphe correspond à une jonction de plusieurs conduits du
réseau de transport.
 Le graphe possède en plus deux sommets particuliers, notés s et p et correspondant
respectivement à la source et au puits du réseau de transport.
135
 De façon plus formelle, un réseau de transport sera défini par un quadruplet
(G; c; s; p) tel que:
 G = (S;A) est un graphe orienté,

est une fonction qui associe à chaque arc sa capacité,

est la source,

est le puits.
136
 On suppose qu'il n'y a pas de sommet "inutile", c'est-à-dire que pour tout
sommet
il existe un chemin de s à p passant par
 Pour des raisons de commodité d'écriture, on supposera que la fonction de
capacité c est définie pour tout couple de sommets
n'est pas un arc du réseau, alors C
137
=0 .
, de telle sorte que si
 Exemple :
l’usine “Max & Fils”, localisée à Lille, produit des voitures. Ces voitures sont
acheminées en train jusqu’à Lyon, où elles sont stockées dans un entrepôt puis
vendues.
Les capacités des trains sont :
 sur la ligne Lille/Reims : 16 voitures par jour,
 sur la ligne Lille/Paris : 13 voitures par jour,
 sur la ligne Paris/Reims : 4 voitures par jour,
 sur la ligne Reims/Paris : 10 voitures par jour,
 sur la ligne Reims/Dijon : 12 voitures par jour,
 sur la ligne Paris/Nevers : 14 voitures par jour,
 sur la ligne Dijon/Paris : 9 voitures par jour,
 sur la ligne Nevers/Dijon : 7 voitures par jour,
 sur la ligne Nevers/Lyon : 4 voitures par jour,
 sur la ligne Dijon/Lyon : 20 voitures par jour.
 Ce réseau de transport sera modélisé par le graphe suivant :
138
La source est Lille, et le puits Lyon.
139
III. Problème du flot maximal
 On s'intéresse ici au problème du flot maximal dans un tel réseau de transport.
 Il s'agit de déterminer la plus grande quantité de matériau pouvant voyager depuis
la source jusqu'au puits, sans violer aucune contrainte de capacité, et tout en
préservant la propriété de "conservation de flot" : excepté la source et le puits, le
matériau doit s'écouler d'un sommet à l'autre sans perte ni gain.
 Autrement dit, le débit à l'entrée d'un sommet doit être égal au débit en sortie.
 De façon plus formelle, un flot d'un réseau de transport
 (G = (S;A); c; s; p) est une fonction
telle que :
140
1.
Contrainte de capacité :
2.
Contrainte de symétrie :
3.
Conservation du flot :

La valeur d'un flot f, notée est égale à la somme des flots partant de la
source, et du fait de la propriété de conservation des flots, est aussi égale à
la somme des flots arrivant au puits :
141
Exemple : Un flot pour le réseau de transport de l’usine “Max & Fils” est :
Ce flot sera généralement représenté en ne faisant figurer que les arcs de valeurs
positives :
142
 Définition du problème du flot maximal : Etant donné un réseau de transport
(G; c; s; p), il s’agit de trouver un flot f tel que |f | soit maximal.
 Modélisation en programmation linéaire : Le problème du flot maximal peut
être exprimé comme un problème de programmation linéaire, c’est-à-dire comme
une fonction linéaire à maximiser tout en respectant un certain nombre de
contraintes linéaires. Etant donné le réseau de transport (G = (S;A); c; s; p), il
s’agit de résoudre le problème linéaire suivant :
143
1. Algorithme de Ford Fulkerson
 On étudie ici l'algorithme de Ford-Fulkerson permettant de résoudre le problème
du flot maximal sans passer par sa modélisation linéaire.
 L'algorithme procède selon une approche "gloutonne", en augmentant
progressivement un flot :
•
Au départ, le flot est nul, c'est-à-dire que
pour tout couple de
sommets
 On augmente ensuite itérativement le flot f en cherchant à chaque fois un
"chemin améliorant", c'est-à-dire un chemin allant de la source s jusqu'au
puits p et ne passant que par des arcs dont le flot actuel est inférieur à la
capacité.
144
 Pour cela, à chaque itération, on calcule la "capacité résiduelle" de chaque arc,
c'est-à-dire la quantité de flot pouvant encore passer.
 De façon plus formelle, étant donné un réseau de transport (G = (S;A); c; s ; p),
et un flot f, on définit :
 La capacité résiduelle d'un couple de sommets
est la quantité de flot pouvant encore passer par
notée
sans dépasser la
capacité:
145
 Le réseau résiduel de G, noté
est le graphe partiel de G ne
contenant que les arêtes dont la capacité résiduelle est positive:
 Un chemin améliorant est un chemin sans circuit allant de s à p dans le réseau
résiduel
 La capacité résiduelle d'un chemin améliorant ch , notée
est la plus
grande quantité de flot transportable par les arcs du chemin.
 Théorème : Soient
 (G; c; s; p), un réseau de transport,
 f, un flot de G,
 Ch un chemin améliorant dans le réseau résiduel
146

un flot défini par:
 Alors, f ' est un flot de (G; c; s; p) tel que
.
147
148
 Principe:
 L'idée de l'algorithme de Ford Fulkerson est de faire passer un flot compatible
dans le réseau, le plus évident est le flot nul, puis l'améliorer jusqu'à ce qu'on
obtienne un flot complet.
 Une chaine pour laquelle le flot peut être augmenté est une chaine dont les arcs
dans le sens direct n'ont pas atteint leur limite et les arcs dans le sens indirect ont
un flux non nul qui les traverse.
 Autrement dit: une chaine C est dite augmentante si:
 Pour tout arc U direct de C, c'est-à-dire:
 Pour tout arc U indirect de C, c'est-à-dire
149
 Le flot sur cette chaine C peut être augmenté de la valeur suivante:
 Pour améliorer le flot on ajoute Ɛ . au flot des arcs
, c'est-à-dire
les arcs directs dans la chaine.
 On retranche au flot des arcs de
, c'est-à-dire, les arcs indirects,
dans la chaine.
150
2. Exemple du problème du flot maximal :
 Voici une chaine C reliant les sommets s et p prise d'un réseau de transport dont le
flot peut être augmenté:
On augmentera donc le flot de cette chaine de 1, ce qui signifie:
- Augmenter de 1 le flux entre s et x1.
- Augmenter de 1 le flux entre x1 et x2.
- Diminuer de 1 le flux entre x3 et x2.
- Augmenter de 1 le flux entre x3 et p. On obtient alors le nouveau flot sur la chaine:
151
 Recherche d’un chemin améliorant dans le réseau résiduel : Il s’agit d’un point critique
de l’algorithme, qui peut faire varier considérablement l’efficacité de l’algorithme.
Considérons par exemple le réseau de transport suivant :
 Au départ, on peut trouver plusieurs chemins améliorants différents pour ce réseau, à
savoir <s,s1,s2,p>, ou <s,s1,p>, ou encore <s,s2,p>. Si l’on choisit le premier chemin
(<s,s1,s2,p>), de capacité résiduelle 1, alors le réseau résiduel devient :
152
 On peut alors trouver un deuxième chemin améliorant <s,s2,s1,p>, de capacité
résiduelle 1, et le réseau résiduel devient :
On peut continuer ainsi, de telle sorte qu’à chaque fois on trouve un chemin
améliorant de capacité résiduelle égale à 1. Par conséquent, ce n’est qu’au bout de
2000 étapes successives que l’on trouvera le flot maximal et que l’algorithme
s’arrêtera.). l’algorithme converge plus rapidement, et nécessite au plus n*p calculs de
chemins améliorants successifs (avec n = nombre de sommets et p = nombre d’arcs).
Par conséquent, pour chercher le chemin améliorant à chaque étape de l’algorithme de
Ford-Fulkerson, il faudra utiliser un parcours en largeur d’abord, permettant de
trouver un plus court chemin améliorant (en nombre d’arcs).
153
3. Complexité
 Si on considère un réseau de transport ayant n sommets et p arcs, l'initialisation
(première boucle pour) nécessitera de l'ordre de
opérations.
 On passera ensuite au plus n*p fois dans la boucle "tant que". A chaque passage dans
cette boucle, on effectue un parcours en largeur pour chercher le chemin améliorant,
ce qui nécessite de l'ordre de n + p opérations, puis on parcourt les arcs du chemin
améliorant trouvé pour calculer la capacité résiduelle du chemin et mettre à jour le
flot et la capacité résiduelle du réseau. Le chemin améliorant étant acyclique, il
comporte au plus n-1 arcs, et donc cette série de traitements nécessite de l'ordre de n
opérations.
 Au total, on fera de l'ordre de
réseau est connexe, on a
+ (n*p)*(n + p) opérations. Etant donné que le
.
 Par conséquent, la complexité globale de l'algorithme est en
.
154
4. Flot compatible et flot complet:
Soit le réseau R=(X,U,C) suivant:
Dans le réseau R, le flot qui traverse chaque arc ne dépasse pas sa capacité, alors se
flot est compatible.
Flot complet:
Un flot est complet si pour tout chemin allant de la source au puits il y'a au moins un
arc saturé, c'est-à-dire: le flux qui le traverse est égal à sa capacité (f(u)=c(u)).
155
 Exemple:
Dans la figure précédente, on a 3 chemins qui mènent de s à p pour lesquels on a au
moins un arc saturé. Le flot est complet.
156
IV. Exercice d’application
 Une usine à gaz alimente une ville V par l'intermédiaire du réseau de distribution
ci-dessous.
 Les nombres associés aux arcs représentent les capacités de transport.
On voudrait connaitre la quantité maximale que peut écouler l'usine. Ce qui revient
à chercher un flot maximum sur le réseau.
157
[1] Christine Solnon, Théorie des graphes et optimisation dans les graphes.
[2] Aimé Sache, La théorie des graphes, Presse universitaires de France.
[3] Lilia Horchani, algorithmique de graphe et optimisation, ENSI, 2012.
[4] Michel COUPRIE, Graphes et algorithmes Notes de cours et exercices,2017
158
Téléchargement