Vous êtes sur la page 1sur 6

Théorie des Graphes 13

Arbres et Arborescences.

II.1. Définitions et Théorème :

Les arbres sont des graphes particuliers, très populaires en algorithmiques et en informatique.
Une forêt étant un graphe sans cycle, chacune de ses composantes connexes est acyclique, et par définition
connexe. La définition d'une forêt correspond donc bien au sens usuel d'un ensemble d'arbres, chacune de ses
composantes connexes étant un arbre.

1. Nombre d'arcs dans un graphe :


Soit G = (X ; U) un graphe, n le nombre de nœuds n = |X| et m le nombre d'arcs m = |U|.
Si G est connexe, m  n - 1.
Si G est sans cycle, m ≤ n - 1.

2. Arbre
Un arbre est un graphe connexe sans cycle. Il a donc n - 1 arcs, m = n - 1. On peut donc dire qu'un arbre est un
graphe qui connecte tous les nœuds entre eux avec un minimum d'arcs.

REMARQUES

 L'ajout du moindre arc supplémentaire dans un arbre crée un cycle.


 Un graphe connexe possède un graphe partiel qui est un arbre.

EXEMPLE
Un graphe connexe :

Un arbre extrait du graphe :

3. Forêt :
On appelle forêt un graphe dont chaque composante connexe est un arbre.

4. Racine, anti-racine :
Souvent, pour manipuler un arbre, nous particularisons un sommet du graphe que nous appelons racine. Dans
le cas des graphes non orientés, le choix d'une racine r dans l'arbre est arbitraire. Dans le cas des graphes
orientés, la racine est définie de manière unique comme le sommet sans prédécesseur de l'arbre.
Le choix d'une racine revient dans un certain sens à orienter l'arbre, la racine apparaissant comme l'ancêtre
commun à la manière d'un arbre généalogique. Le vocabulaire de la théorie des graphes s'en inspire
directement : on parle de fils, de père, de frère,...

Recherche Opérationnelle
14 Arbres et Arborescences

- Un nœud a d'un graphe G est une racine de G s'il existe un chemin joignant a à chaque nœud du graphe
G.
- Un nœud a d'un graphe G est une anti-racine de G s'il existe un chemin joignant chaque nœud du graphe
G à a.

EXEMPLE

A est une racine du graphe.


I est une anti-racine du graphe.

5. Arborescence, anti-arborescence
- Un graphe G est une arborescence de racine a si G est un arbre et si a est une racine.
- Un graphe G est une anti-arborescence d'anti-racine a si G est un arbre et si a est une anti-racine.
On appelle arborescence un arbre avec un sommet distingué, que l'on appelle la racine. On représente
généralement une arborescence avec la racine en haut du dessin et les feuilles en bas.
On peut, dans une arborescence, assigner un rang aux sommets. Le rang sera en fait la distance du sommet à
la racine.
On dira que la hauteur de l'arborescence est le rang maximum (4 dans l'exemple ci-contre).

EXEMPLE :

La racine est le sommet 4. Les sommets 5, 6, 7 et 9 sont les feuilles.


Le sommet 4 (la racine) a rang 0, le sommet 1 a rang 1, les sommets 2 et
10 ont rang 2, les sommets 3, 5 et 8 ont rang 3 et les sommets 6, 7 et 9 ont
rang 4.
La hauteur de l'arborescence est 4

II.2. Arbre couvrant :

1. Définition :
Soit G = (X ; U) un graphe simple. Un arbre couvrant de G est un sous-graphe de G qui est un arbre contenant
chaque sommet de G :
Un arbre couvrant pour un graphe G=(X, U) est un arbre construit uniquement à partir des arêtes de U et qui
connecte ("couvre") tous les sommets de X. Un arbre couvrant d'un graphe G est donc un graphe T tel que

 Le graphe T est un arbre.


 Le graphe T est un graphe partiel de G.

2. Algorithme de construction d’un arbre couvrant :


On choisit un sommet arbitraire du graphe, puis on construit à partir de ce sommet une chaîne élémentaire en
ajoutant des arêtes de G tant que c’est possible. Si la chaîne ainsi construit contient tous les sommets du
graphe, la chaîne est un arbre couvrant. Sinon, on retourne à l’avant-dernier sommet de la chaîne et à partir de
celui-ci, et si c’est possible, on construit une nouvelle chaîne simple aussi longue que possible et ne contenant
aucun sommet du premier chemin construit. Si ce n’est pas possible, il faut remonter à l’antépénultième
Théorie des Graphes 15

sommet et recommencer. Si le graphe est connexe, on peut réitérer ce processus jusqu’à épuisement des
sommets pour obtenir un arbre couvrant.

EXEMPLE :

– Partons par exemple du sommet a


– 1ère étape : on construit la chaîne simple a; b; c; d; g; h; i; j; k; l; f
– 2ème étape : on remonte jusqu’au sommet g pour former la chaîne g, e
– Un arbre de recouvrement est alors :

II.3. Arbre couvrant de poids minimal :

1. Valeur totale d’un arbre couvrant :


Soit G = (X ; U) un graphe à chaque arête (ou arc), on lui associe un nombre c(u) appelé "coût, poids, valeurs,
…" de l’arc "u". (G un graphe valué)
On appelle valeur totale du graphe couvrant H = (X, U’) la somme S(H)= ∑u∈U' c(u)

PB :
Le problème de l'arbre couvrant de poids minimum consiste à trouver un arbre couvrant dont la somme des
poids S(H) des arêtes est minimum.

EXEMPLE :
Minimiser le coût d’installation des lignes électriques entre des maisons, c'est-à-dire, on veut connecter
toutes les maisons entre elles sans avoir des lignes inutiles d’où la recherche d’un arbre couvrant. Ensuite,
on associe à la longueur des câbles le coût donc on veut minimiser la longueur totale des câbles utilisés.
Il existe 2 algorithmes célèbres pour résoudre le problème de l'arbre couvrant de poids minimum. Chacun de
ces 2 algorithmes utilise plus particulièrement l'une des caractérisations des arbres pour trouver un arbre
couvrant de poids minimum (MST, Minimum Spanning Tree) : soit en considérant les arbres comme des
graphes connexes avec le minimum d'arêtes, soit en considérant les arbres comme des graphes acycliques
avec le maximum d'arêtes. Ces 2 algorithmes utilisent également 2 techniques de résolution très différentes :
 Algorithme de Prim Il maintient au fur et à mesure de la construction un sous-graphe connexe qui grossit
petit à petit.

Recherche Opérationnelle
16 Arbres et Arborescences

 Algorithme de Kruskal Il maintient au fur et à mesure de la construction d’un graphe partiel acyclique. Si
les algorithmes de recherche sont spécifiques aux graphes, lui il utilise un paradigme de résolution plus
général : les algorithmes gloutons.

2. Algorithme de KRUSKAL :
a. Principe :
Le principe de l'algorithme de Kruskal pour trouver un arbre de poids minimum dans un graphe G est tout
d'abord de trier les arcs par ordre croissant de leur poids. Ensuite, dans cet ordre, les arcs sont ajoutés un par
un dans un graphe G' pour construire progressivement l'arbre. Un arc est ajouté seulement si son ajout dans G'
n'introduit pas de cycle, autrement dit, si G' reste un arbre. Sinon, on passe à l'arc suivant dans l'ordre du tri.
b. Algorithme :
Titre : Kruskal
Entrées : G = (X ; U) un graphe.
Sortie : U' un ensemble d'arcs.
Variables intermédiaires : i un entier.
Début
Trier les arcs de G dans l'ordre croissant des poids ;
[On les notera u1, u2, ..., um.]
U'  ;
Pour i  1 à m faire
Si le graphe (X ; U’  {ui}) ne contient pas de cycle alors
U' U'  {ui} ;
Fin si ;
i suivant ;
Fin

EXEMPLE :

b 3 d
u1 u8
2
0 u6
1
2
a u2 u5 f
2 u9
u4 4
2
c u7 e

1
u3

u1, u2, u3, u4, u5, u6, u7, u8 et u9.


U'  ; b d
u1
i  1 ; U'  {u1} ;
0
i  2 ; U'  {u1, u2} ; 1
i  3 ; U'  {u1, u2, u3} ;
2
a u2 u5 f
i  4 ; U'  {u1, u2, u3} ;
i  5 ; U'  {u1, u2, u3, u5} ;
2
i  6 ; U'  {u1, u2, u3, u5} ; c e
u7
i  7 ; U'  {u1, u2, u3, u5, u7} ;
i  8 ; U'  {u1, u2, u3, u5, u7} ;
1
u3
i  9 ; U'  {u1, u2, u3, u5, u7} ;
Théorie des Graphes 17

c(e) = 6

JUSTIFICATION
Supposons que l'algorithme est effectué quelques itérations. Considérons maintenant l'ajout de l'arc u = (x;y)
dans l'arbre. On suppose que cet ajout n'introduit pas de cycle dans G'. Est-on certain que u permet la
construction de l'arbre de coût minimum ? En fait, x et y doivent être connectés d'une manière ou d'une autre.
Donc si ce n'est pas u qui les relie, ce sera une autre chaîne C = (x,s,t,u,y) de x à y comme le montre la figure
ci-dessous. Comme u n'introduit pas de cycle, cette autre chaîne n'est pas encore construite, elle le sera plus
tard. Cela signifie que tous les arcs de cette chaîne ont un coût supérieur ou égal à celui de u. Donc, le fait de
choisir la chaîne C pour connecter x à y est plus onéreuse que de connecter x à y par u. En effet, supprimons
n'importe quel arc de la chaîne C et remplaçons le par u. On obtiendra toujours un arbre mais de coût plus
faible. Cela justifie le choix de u et donc la démarche globale de l'algorithme de Kruskal.

3. Algorithme de PRIM :
a. Principe :
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
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 (MST), il suffit 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
MST. 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 final.

b. Algorithme :
Titre : Prim ;
Entrées : G=(X ; U) un graphe connexe avec une valuation positive des arêtes ;
Sortie : T un arbre couvrant de poids minimum ;
Variables intermédiaires : F : Ensemble des arêtes de l'arbre ;
Début
Initialiser F à vide
Marquer arbitrairement un sommet
Tant Que il existe un sommet non marqué adjacent à un sommet marqué
Sélectionner un sommet y non marqué adjacent à un sommet marqué x
tel que (x ; y) est l'arête sortante de plus faible poids
F := F  {(x ; y)}

Recherche Opérationnelle
18 Arbres et Arborescences

Marquer y
Fin Tant Que
Retourner T=(X ; F)
Fin

EXEMPLE :

10

c 1 b

3 2 9
6
a 8 f
11
5 7

d 4 e

b c b

a
a a

F = {(a ; b)} F = {(a ; b), (b ; c)}

c b
c b c b

a f
a a

d e
e d e
F = {(a ; b), (b ; c), (a ; e), (e ; d),
F = {(a ; b), (b ; c), (a ; e)} F = {(a ; b), (b ; c), (a ; e), (e ; d)}
(e ; f)}

Vous aimerez peut-être aussi