Sie sind auf Seite 1von 15

Chapitre 3 :Arbre couvrant minimal

Position du problème : Supposons qu’on souhaite mettre en place un réseau informatique


entre les villes A; B; C; D; E et F . Une estimation des coûts d’installation entre certaines de
ces villes a donné les valeurs suivantes :

Comment câbler le réseau a moindre coût ?

De…nition 1 On dé…nit les types de graphes suivants :


– Un arbre est un graphe non orienté, connexe, sans cycle.
– Une forêt est un graphe non orienté sans cycle.

Remark 1 Dans un arbre, une feuille est un sommet de degré 1. Les composantes connexes
d’une forêt sont donc des arbres.

Le théorème suivant fournit plusieurs caractérisations alternatives des arbres.

Theorem 1 Soit G un graphe non orienté à n sommets. Les propiétés suivantes sont équiv-
alentes :

1. G est un arbre

2. deux sommets quelconques de G sont joints par une chaîne et une seule

3. G est connexe et a n 1 arêtes

4. G est connexe et si on supprime une arête, le graphe obtenu n’est plus connexe

5. G est sans cycle et a n 1 arêtes

6. G est sans cycle et l’ajout de n’importe quelle arête crée un cycle

On rencontre également des arbres particuliers dans lesquels un sommet est distingué et les
arcs son orientés de ce sommet vers les autres :

De…nition 2 Une arborescence est un graphe orienté muni d’un sommet particulier r
appelé racine tel que
– le graphe obtenu en oubliant l’orientation est un arbre
– tout sommet di¤érent de r peut être atteint par un chemin partant de r

On peut caractériser une arborescence via la proposition suivante :

Proposition 2 Un graphe orienté est une arborescence lorsque


– il est connexe
– il a un unique sommet sans prédécesseur (la racine)
– tous ses autres sommets ont exactement un prédécesseur.

De…nition 3 Soit G un graphe orienté ou non. Un arbre couvrant est un sous-graphe de G


(i.e. contenant tous les sommets) qui est un arbre. Si le graphe est valué, on dé…nit le poids
de l’arbre couvrant comme la somme des poids de ses arêtes (ou arcs dans le cas orienté).

1
Remark 2 Un arbre étant connexe, on peut déterminer si un graphe G est connexe en
essayant de construire un arbre couvrant pour G. Pour cela, on peut faire un parcours en
profondeur ou en largeur du graphe (voir TD).

De…nition 4 Soit G un graphe valué non orienté connexe. Un arbre couvrant de poids
minimal est un arbre couvrant dont le poids est le plus petit possible parmi les arbres couvrants
de G.

Formulation du problème
Soit G = (S; A) un graphe connexe de n sommets et m arêtes. On suppose que G est valué
par une fonction de valuation V positive.
Un arbre couvrant T = (S; T ) est un graphe partiel de G qui a la propriété d’un arbre (
ç-à-d sans cycle). On a donc jT j = n 1: Le poids de T est
X
v (T ) = lij :
(xi ;xj )2T

Objectif : Etant donné


T = fT ; T arbre couvranr de Gg ;
trouver T 2 T tel que
v (T ) = min (v (T ))
T 2T

T est appelé arbre couvrant de poids minimal.


Nous allons étudier deux algorithmes qui permettent de déterminer un arbre couvrant de
poids minimal pour un graphe G non orienté connexe donné.
Ces deux algorithmes sont de type glouton. Dans chaque cas, on va construire l’arbre
couvrant petit à petit, en s’assurant à chaque étape :
–que l’on reste couvrant sans cycle (algorithme de Kruskal)
–que l’on reste connexe sans cycle (algorithme de Prim)
Il s’agit d’enlever des arêtes au graphe de façon qu’il reste connexe, et que la somme des
valuations des arêtes soit minimale.

2
Il est clair que le graphe partiel cherché est sans cycle (si on enlève une arête a un cycle d’un
graphe connexe, le graphe reste connexe), c’est donc un arbre : le problème se ramène donc
au Problème de l’arbre recouvrant de poids minimal : étant donné un graphe non
orienté connexe G dont les arêtes sont valuées par des nombres positifs (poids), déterminer
un arbre qui soit un graphe partiel de G (arbre recouvrant G) de poids total minimum.

Algorithme de Kruskal
L’algorithme de Kruskal suppose que les n arêtes a1 ; a2 ; : : : ; an du graphe G sont numérotées
par ordre croissant de poids.
Le principe consiste à construire un sous-graphe en ajoutant des arêtes une par une. A
chaque étape, on cherche l’arête de plus petite valuation parmi celles que l’on n’a pas déjà
explorées. Si elle ne crée pas de cycle, on l’ajoute au sous-graphe, sinon on la laisse de côté.
On termine dès que l’on a sélectionné (n 1) arêtes ou qu’il ne reste plus d’arêtes ne créant
pas de cycles.

3
Preuve de l’algorithme : A peut s’obtenir en enlevant successivement a G des arêtes
faisant partie d’un cycle, donc A est connexe; comme A ne comporte pas de cycle, c’est un
arbre.
Soit B un arbre recouvrant de G : à chaque arête a de A, on peut associer une et une seule
arête b de B reliant les deux composantes connexes de A privé de l’arête a. Mais l’arête b
n’a
pu être éliminée par l’algorithme de Kruskal que si elle etait de poids supérieur ou egal
à a (puisqu’elle ne crée pas de cycle dans A privé de a): le passage de A à B ne peut
qu’augmenter
le poids total, et par conséquent A est de poids minimal.
( A noter que si toutes les arêtes sont de poids di¤érents, la solution est unique; il ne peut y
avoir plusieurs solutions que si, parmi des arêtes de même poids, un choix d’élimination se
propose.)
Complexité : la boucle POUR de l’algorithme est exécutée jAj fois; le test permettant de
savoir si une arête crée ou non un cycle dans A peut se faire en moins de jSj opérations (le
nombre d’arêtes de l’arbre A étant jSj 1). La complexité est donc de l’ordre de jAj jSj
(le tri des arêtes, qui peut se faire en jAj log A opérations, est négligeable).

Algorithme de Prim
Principe : On construit un sous-graphe en ajoutant arêtes et sommets les uns après les autres.
A chaque étape, on cherche l’arête sortante de plus petite valuation. Une arête est sortante

4
si elle joint un sommet du sous-graphe à un sommet qui n’est pas dans le sous-graphe. On
termine dès que l’on a sélectionné (n 1) arêtes.

L’algorithme de Prim se base sur la caractérisation des arbres comme des graphes connexes
minimaux au sens de l’inclusion : on ne peut enlever une arête à un arbre sans le déconnecter
(cf caractérisation des arbres). L’idée de l’algorithme est de maintenir un sous-graphe partiel
connexe, en connectant à nouveau sommet à chaque étape. L’algorithme de Prim va ainsi
faire grossir un arbre jusqu’à ce qu’il couvre tous les sommets du graphe. Si à une étape
un ensemble U de sommets sont connectés entre eux, pour choisir le prochain sommet à
connecter, l’algorithme part d’une constatation simple : dans un arbre couvrant, il existe
nécessairement une arête qui relie l’un des sommets de U avec un sommet en dehors de U .
Pour construire un arbre couvrant de poids minimum (M ST ), il su¢ t de choisir parmi ces
arêtes sortantes celle de poids le plus faible.
Pour détecter les arêtes sortantes, nous pouvons marquer au fur et à mesure de l’algorithme
les sommets déjà connectés. Une arête sortante relie alors nécessairement un sommet marqué
et un sommet non marqué. L’algorithme de Prim apparaît ainsi comme une adaptation de
l’algorithme de recherche pour le problème du M ST . Reste une question : de quel sommet
partir ? Eh bien le choix du sommet initial n’a pas d’importance... tout sommet doit de
toute manière être relié aux autres dans l’arbre …nal.
Algorithme : Algorithme de Prim (arbre couvrant de poids minimal)
Prim(G(S,A,v))

fonction T = prim(G)

5
poids = poids total de l’arbre couvrant (initialisé à 0)
marquer le sommet 1
tant que il reste des sommets non-marqués faire
fx; yg = arête de coût minimal joignant un sommet marqué x et un sommet non-marqué y
marquer le sommet y et ajouter l’arête fx; yg à T
poids = poids +V (x; y)
…n faire

1: A = ensemble des arêtes du graphe G


2: F = ; (ensemble des arêtes de l’arbre couvrant)
3: M = fx0 g (on marque un sommet quelconque de G)
4: tantque il y a des arêtes sortantes de M faire
5: chercher l’arête sortante a = (x; y) de plus petite valuation (x 2 M et y 2
= M)
6: M = M [ fyg
7: F = F [ fag
8: …n tantque

De…nition 5 (Cocycle) Dans un graphe G = (S; A), le cocycle d’un ensemble de sommets
U est l’ensemble des arêtes (u; v) telles que u 2 U et v 2 V nU .

Remark 3 Les algorithmes de Prim et de Kruskal sont tous deux des algorithmes gloutons.
Le premier consiste à choisir arbitrairement un sommet et à faire croître un arbre à partir de
ce sommet. Le second consiste à faire croître une forêt jusqu’à couverture complète. Chaque
augmentation se fait de la manière la plus économique possible.

Theorem 3 L’algorithme de Prim construit en temps O(jSj2 ) un arbre couvrant de poids


minimum sur tout graphe connexe G = (S; A):

Proof. Remarquons tout d’abord que l’algorithme de Prim retourne un arbre couvrant.
En e¤et, lorsque l’algorithme s’arrête, il ne reste plus de sommet non marqué adjacent à
un sommet marqué. Le graphe G étant connexe, tous les sommets sont donc marqués.
Le marquage d’un sommet allant de paire avec l’ajout de l’une de ses arêtes incidentes
le connectant à un sommet déjà marqué, le graphe T = (S; F ) est connexe et comporte
exactement (jSj 1) arêtes : c’est un arbre couvrant. Il nous reste à établir que T est
de poids minimum. Pour cela nous allons montrer par induction qu’à chaque étape, si F
est l’ensemble des arêtes sélectionnées, alors il existe un arbre couvrant de poids minimum
comportant les arêtes de F . Initialement F est vide : la propriété est évidemment véri…ée
Considérons une étape où un ensemble U de sommets sont marqués et un ensemble F d’arêtes
ont été sélectionnées, et suppososns qu’il existe un arbre couvrant de poids minimum T
comportant les arêtes de F . L’étape suivante consiste au marquage d’un sommet y et à
l’ajout à F de l’arête e = (x; y). Il nous faut montrer qu’il existe un M ST comportant les
arêtes de F 0 = F [ feg. Si l’arête e appartient à T , nous en avons terminé. Sinon ajoutons
e aux arêtes de T . Les caractérisations des arbres montrent que nous créons alors un cycle.
Ce cycle parcours à la fois des sommets de U (parmi eux x) et des sommets en dehors de
U (parmi eux y). Il existe donc nécessairement au moins une arête e0 = (x0 ; y 0 ) du cycle,
di¤érente de e, telle que x0 soit marqué et y 0 soit non marqué. Le graphe T ’ obtenu en
retirant cette arête redevient un arbre couvrant pour G. De plus il est optimal. En e¤et

6
l’arête e0 est une arête sortante pour U : par construction e est donc de poids inférieur ou
égal.

Example 1 Nous allons appliquer l’algorithme de Prim au même problème que précédem-
ment. Partons par exemple du sommet A. A…n de visualiser le déroulement de l’algorithme,
nous représenterons les arêtes de l’arbre couvrant par des arêtes doubles, les arêtes sortantes
par des arêtes simples et les autres arêtes en pointillé.
La première étape consiste à choisir l’arête partant de A de valuation minimale : c’est l’arête
(A; B). On l’intègre donc à l’arbre couvrant puis on cherche l’arête de valuation minimale
parmi les arêtes qui sortent du sous-ensemble de sommets fA; Bg. On continue le procédé
jusqu’à avoir les (n 1) arêtes.

7
Problèmes de ‡ots
Réseaux de transport
De…nition 6 Un graphe fortement connexe (il existe un chemin joignant deux sommets
quelconque), sans boucle et ayant plus d’un sommet, est appelé un réseau.
On appelle noeud d’un réseau un sommet qui a plus de deux arcs incidents. Les autres
sommets sont appelés antinoeuds.
On appelle branche tout chemin pour lequel seuls les premiers et derniers sommets sont des
noeuds.

De…nition 7 Un réseau de transport G = (S; A; s; p; c) est un graphe orienté G = (S; A)

1. sans circuit
1
2. muni d’une source : un sommet s 2 S tel que d (s) = 0 ( ou encore (s) = ;)

3. muni d’un puits : un sommet p 2 S tel que d+ (p) = 0 ( ou encore (p) = ;)

4. dont chaque arc a 2 A est valué par une capacité c(a) 0

c : A ! ]0; +1[

8
5. il existe au moins un chemin de s vers p.

Les capacités sont habituellement notées entre crochets.

Example 2 Le graphe suivant est un réseau de transport

Remark 4 Ce type de graphe permet de modéliser de nombreuses situations :


– Réseau routier ; les capacités représentent le nombre maximal de voitures par heure.
– Réseau de distribution d’eau, électricité, etc. ; les capacités représentent alors le débit
maximal pouvant être fourni par chaque partie du réseau.

Flot dans un réseau de transport


Dans un graphe orienté G; un ‡ot est l’a¤ectation d’une valeur réelle à chaque arc de G;
représentant une quantité transportée sur cet arc, de telle sorte que, en chaque sommet, la
somme des ‡ots entrants soit égale à le somme des ‡ots sortants (Loi de Kircho¤ : conser-
vation des ‡ux en chaque sommet).
Parmi les problèmes les plus classiques, on peut citer celui de la recherche d’un ‡ot maximal.
On se donne une capacité maximale sur chaque arc qui sera une borne supérieure du ‡ot
autorisé sur cet arc. Le problème du ‡ot maximal consiste à déterminer un ‡ot dont la valeur
en un certain lieu est maximale. On peut, en outre, se donner un coût de transport d’une
unité de ‡ot sur chaque arc et chercher le ‡ot maximal de coût minimal.

De…nition 8 Notons Ax l’ensemble des arcs sortants du sommet x et A+ x l’ensemble des


arcs entrants de ce même sommet x: Soit un réseau de transport G = (S; A; s; p; c). Un ‡ot
sur G est une application

' : A ! [0; +1[


véri…ant

9
1. 8 a 2 A, '(a) c(a) ( il ne dépasse pas la capacité des arcs)
2. 8x 2 S; x 6= s; x 6= p
X X
' (a) = ' (a) ( loi des noeuds de Kirchho¤)
a2Ax a2A+
x
‡ot entrant en x ‡ot entrant en x

En d’autres termes, ce qui rentre égale ce qui sort. On appelle alors valeur du ‡ot f la
quantité X X
'x = ' (a) = ' (a) :
a2Ax a2A+
x

Example 3 On indique sur chaque arc la valeur du ‡ot à côté de la capacité. Le graphe
ci-dessous représente un ‡ot dans le réseau de transport de l’exemple 5.1.

On véri…e qu’en chaque sommet, la somme des ‡ots des arcs entrants est égale à la somme
des ‡ots des arcs sortants. La valeur du ‡ot est, de façon équivalente, le ‡ot sortant de s ou
le ‡ot entrant de p. Ici, 'x = 2.
Objectif : optimiser le parcours global du réseau en tenant compte des contraintes données
par les capacités limitées de chaque partie du réseau.

Recherche d’un ‡ot complet


De…nition 9 Soit un réseau de transport G = (S; A; s; p; c). Un arc a est dit saturé par le
‡ot si '(a) = c(a).
Dans l’exemple ci-dessus, les arcs (s; a); (a; b) et (b; p) sont saturés.
Le ‡ot est dit complet si tout chemin allant de x1 = s à xn = p contient au moins un arc
saturé.

10
Si l’on considère le graphe partiel engendré par les arcs non saturés par le ‡ot et si le ‡ot
n’est pas complet, il existe nécessairement un chemin allant de l’entrée à la sortie. On
peut alors dé…nir un nouveau ‡ot pour le réseau en augmentant de 1 le ‡ot de chacun des
arcs constituant le chemin ; la valeur du ‡ot est alors également augmentée de 1: On peut
donc progressivement augmenter la valeur d’un ‡ot incomplet jusqu’à ce qu’il soit complet.
En tenant compte des di¤érences entre les capacités et la valeur du ‡ot sur les arcs de ;
on peut connaitre d’avance l’augmentation possible du ‡ot. cependant, le ‡ot complet ainsi
obtenu n’est pas en général, le ‡ot maximal.

Amélioration du ‡ot
Soit ' un ‡ot complet. On va utiliser une procédure itérative pour identi…er et marquer tous
les sommets du graphe où il est possible de faire une unité de ‡ot supplémentaire.
On dé…nit un processus d’étiquetage de certains sommets du graphe. En x1 ; on place une
étiquette [+] : Soit x un sommet déja marqué :
-) on marque avec une étiquette (+x) tout successeur y non maqué de x pour lequel le ‡ot
n’est pas à son maximum
(x; y) 2 A et ' (x; y) < c (x; y) :
-) on marque avec une étiquette ( x) tout prédécesseur y non maqué de x pour lequel le
‡ot n’est pas nul
(x; y) 2 A et ' (x; y) > 0:
L’étiquette a pour rôle de donner le nom d’un prédécesseur ou d’un successeur d’un sommet
donné en indiquant si le ‡ot peut être augmenté dans le sens du parcours ( étiquette (+x) )
ou diminué s’il est dans le sens contraire ( étiquette ( x) ).
Si l’on parvient jusqu’au marquage du sommet xn avec cette procédure, c’est qu’il existe
une chaîne de x1 à xn dont tous les sommets sont marqués avec l’indice du sommet
précédent au signe près. Notons que l’on est pas obligé de marquer tous les sommets ( tous
les successeurs ou prédécesseurs d’un sommet donné); l’objectif étant simplement d’élaborer
une chaîne marquée de x1 à xn :
Soit alors
8
< '0 (a) = ' (a) si a2
=
0
' (a) = ' (a) + 1 si a 2 et si a est orienté dans le sens de
: 0
' (a) = ' (a) 1 si a 2 et si a est orienté dans le sens contraire de :
On véri…e aisément que '0 est encore un ‡ot. Comme '0xn = 'xn + 1; la valeur du ‡ot ' est
supérieure, donc meilleure que celle de ':
On peut alors systématiser l’idée précédente en introduisant la notion de graphe d’écart ou
réseau résiduel.

De…nition 10 Soit un réseau de transport G = (S; A; s; p; c) possédant un ‡ot complet '.


On appelle graphe d’écart ou réseau résiduel, le réseau G b (') = (S; A; s; p; c) tel que
-) si a 2 A et ' (a) < c (a) alors a 2 A et c (a) = c (a) ' (a)
-) si a = (x; y) 2 A et ' (a) > 0 alors a 1 = (y; x) 2 A et c (a 1 ) = ' (a).

Le réseau résiduel indique le long de quels arcs on peut augmenter ou diminuer le ‡ot.
L’intérêt du graphe d’écart apparaît dans le théorème suivant.

11
Theorem 4 Soit ' un ‡ot de G ( de x1 à xn ) et G b (') le réseau résiduel associé à ': Une
condition nécessaire et su¢ sante pour que le ‡ot ' soit maximal est qu’il n’existe pas de
chemin de x1 à xn dans G b (') :

Proof. Basée sur le lemme des arcs colorés de Minty.

Recherche d’un ‡ot maximal : algorithme de Ford et Fulkerson


Nous donnos ici une méthode constructive de recherche d’un ‡ot maximal.
Principe : Le principe de l’algorithme de Ford et Fulkerson consiste à

1. construire un ‡ot complet

2. améliorer itérativement ce ‡ot.

: Ford et Fulkerson
(a) - Itération k = 0
-Partir d’un ‡ot initial '0 (compatible avec les contraintes de capacité), par exemple '0 =
(0; 0; ; 0) :
(b) - A l’itération k; soit 'k le ‡ot courant.
-Rechercher un chemin k de x1 à xn dans le graphe d’écart G b 'k :
k k
(c) - Soit " la capacité résiduelle du chemin (minimum des capacités résiduelles des arcs
du chemin)
-Dé…nir le ‡ot 'k+1 par :

'k+1
a = 'ka + "k si a 2 et si a est orienté dans le sens de
k+1 k k
'a = 'a " si a 2 et si a est orienté dans le sens contraire de :

Faire k k + 1 et retourner en (b) :

Remark 5 Par dé…nition du graphe d’écart, les ‡ots 'k sont tous compatibles avec les ca-
pacités. Par ailleurs, "k est positif à chaque itération et par suite, l’algorithme produit une
séquence de ‡ots compatibles de valeurs strictement croissantes.
D’autre part, le principe consiste à rechercher une chaîne joignant x1 à xn : Il est évident que
le choix d’une telle chaîne n’est pas unique.

12
Chemin augmentant / Chaîne augmentante
Idée : (1) Considérons une nouvelle fois le réseau de transport de l’exemple 5.1.1. On
commence par y faire passer le ‡ot nul, puis on remarque que pour chaque arc u du chemin
s; a; b; p, on a :
f (u) < c(u):
On a donc

On peut donc augmenter la valeur du ‡ot sur chaque arc de ce chemin. On peut ensuite
faire la même chose avec le chemin s; b; p, on obtient alors le ‡ot suivant :

Il n’y a plus de tel chemin et nous avons trouvé un ‡ot de valeur 2. Peut-on cependant
encore améliorer le ‡ot ?

13
(2) La réponse est oui, comme le prouve le ‡ot suivant, de valeur 3 :

A…n de trouver ce type d’amélioration, il su¢ t de rechercher ce qu’on va appeler une chaîne
augmentante, c’est-à-dire une chaîne de s vers p telle que les arcs pris dans le bon sens
peuvent être augmentés et les arcs pris à l’envers peuvent être diminués. Dans l’exemple
ci-dessus, c’est le cas de la chaîne s; b; a; p puisque les arcs (s; b) et (a; p) n’étaient pas saturés
et l’arc (a; b), pris à l’envers, avait une valeur positive.

De…nition 11 Soit R = (S; A; s; p; c) un réseau de transport et f un ‡ot sur R.


–Un chemin C(s; p) qui relie la source au puits par des arcs u tels que f (u) < c(u) est appelé
chemin augmentant. (on peut alors augmenter le ‡ot de 1 sur chaque arc du chemin)
– Une chaîne C(s; p) qui relie la source au puits par des arêtes u véri…ant :
– f (u) < c(u) si l’arête est orientée dans le sens s vers p
– f (u) > 0 si l’arête est orientée dans le sens p vers s est appelée chaîne augmentante. (on
peut alors augmenter le ‡ot de 1 sur les arêtes allant de s vers p et le diminuer de 1 sur les
arêtes allant dans l’autre sens)

Flot complet / Flot maximal


De…nition 12 Un ‡ot sur un réseau de transport est dit
– complet s’il n’admet pas de chemin augmentant
– maximal s’il n’admet pas de chaîne augmentante

L’algorithme de Ford-Fulkerson permet de trouver un ‡ot complet et un ‡ot maximal pour


un réseau de transport donné.

Algorithme de Ford-Fulkerson (recherche de ‡ot complet/maximal)


Ford-Fulkerson(R(S; A; s; p; c))
1: initialiser le ‡ot à 0 sur chaque arc
2: tantque il existe un chemin augmentant de s à p faire
3: augmenter le ‡ot
4: …n tantque

14
5: (le ‡ot obtenu à cette étape est un ‡ot complet)
6: tantque il existe une chaîne augmentante de s à p faire
7: augmenter le ‡ot
8: …n tantque
9: (le ‡ot obtenu à cette étape est un ‡ot maximal)

Remark 6 Les ‡ots sont un modèle des réseaux de communication (circuits electriques,
réseau de machines, réseau de transport...)

Remark 7 Il faut toujours commencer par les chemins augmentants, jusqu’à ce qu’il n’y en
ait plus.

Le théorème suivant permet de trouver une coupe de capacité minimale associée à un ‡ot
maximal.

Theorem 5 Soit f un ‡ot maximal dans un réseau de transport. Alors

X = fsg [ fx 2 S; il existe une chaîne augmentante de s à xg

est une coupe de capacité minimale.

15

Das könnte Ihnen auch gefallen