Chapitre 2 Arbres et Arborescences

publicité
Dr C. Bachtarzi
Filière : L2 Socle commun informatique
Chapitre 2 Arbres et Arborescences
1. Introduction
Ce chapitre présente un type spécial de graphes que l’on appelle arbres. Les arbres
sont des graphes particulièrement importants qui ont donné lieu à des applications très
variées. Ils peuvent parfois être le support de réseaux de communication ou de transport.
2. Construction d’un arbre
Définition 1: Un arbre est défini comme un graphe connexe et sans cycles.
2.1 Caractérisation des arbres
2.1.1 Théorème 1 : conséquence de l’ajout d’un arc dans un graphe
L’ajout d’un arc (a,b) dans un graphe G=(X,A) entraine l’une des 2 conséquences :
-
Soit il diminue le nombre de composantes connexes de 1 si a et b appartiennent
à 2 CC différentes.
-
Soit il ne change pas le nombre de CC si a et b appartiennent à la même CC.
D’après le théorème 1, on peut envisager le résultat suivant :
Résultat : la suppression d’un arc (a,b) a l’une des conséquences suivantes :
-
L’augmentation du nombre de CC de 1 si a et b n’appartiennent pas au même
cycle.
-
Le nombre de CC reste inchangé si a et b appartiennent au même cycle.
L’arc dont la suppression augmente le nombre de CC dans G est appelé isthme.
2.1.2 Théorème 2 : Cardinalité de A dans un graphe connexe et sans cycles
Etant donné G=(X,A) un graphe d’ordre n.
i.
Si G est connexe alors |A| ≥ n-1
ii.
Si G est sans cycles alors |A| ≤ n-1
Corollaire : Un graphe G=(X,A) possède un graphe partiel (ou couvrant) qui constitue un
arbre.
2.1.3 Théorème 3 : Théorème de caractérisation des arbres
Etant donné un graphe G=(X, A) d’ordre n ≥ 2. Les propriétés suivantes sont
équivalentes et caractérisent un arbre.
(1) G est connexe et sans cycles
(2) G est sans cycles et admet n-1 arcs
12
Dr C. Bachtarzi
Filière : L2 Socle commun informatique
(3) G est sans cycles et l’ajout d’un arc crée un cycle unique
(4) G est connexe et admet n-1 arcs
(5) G est connexe et la suppression d’un arc déconnecte G
(6) Tout couple de sommets est relié par une chaine et une seule
2.2 Définition d’une forêt
Définition 2 : Une forêt est un graphe dont chaque composante connexe est un arbre.
3. Arborescence
En informatique, plusieurs applications nécessitent l’utilisation d’arborescences,
particulièrement pour les arbres binaires. Comme exemple d’applications les arbres
généalogiques.
3.1 Définition d’une arborescence
Si un arbre possède un sommet particulier s qui peut mener vers tous les autres
sommets ( ∀ x ∈ X il existe un chemin de s vers x), alors cet arbre est qualifié
d’arborescence.
Définition 3 : Une arborescence est un graphe G =(X,A) tel que :
-
x ∈ X est racine de G
-
G est un arbre
Remarques :
-
Une arborescence est donc un arbre mais l’inverse n’est pas toujours vrai.
-
Le concept d’arborescence est orienté puisque la notion de racine et de chemin
sont utilisées dans sa définition.
3.2 Caractérisation des arborescences
3.2.1 Théorème 4 : Théorème de caractérisation des arborescences
Etant donné un graphe G=(X,A) d’ordre n ≥2, les conditions suivantes sont
équivalentes et caractérisent une arborescence :
(1) G est un arbre admettant le sommet r pour racine
(2) ∀ x ∈ X il existe un chemin unique de r vers x
(3) G admet r pour racine et est minimal pour cette propriété (Si on supprime un
arc, r n’est plus racine)
(4) G est connexe et d-(r) = 0 et ∀ x ∈ X d-(x) = 1
(5) G est sans cycles et d-(r) = 0 et ∀ x ∈ X d-(x) = 1
13
Dr C. Bachtarzi
Filière : L2 Socle commun informatique
(6) G admet r comme racine et est sans cycles
(7) G admet r comme racine et possède n-1 arcs
4. Parcours d’un arbre
Parfois on est amené à parcourir tous les sommets d’un arbre en vue d’effectuer
certains traitements comme rechercher un élément particulier ou afficher les éléments de
l’arbre. A cet effet, plusieurs algorithmes ont été proposés pour le parcours d’un arbre en
profondeur et en largeur.
Pour un parcours donné, il est possible de parcourir de gauche à droite ou de droite
à gauche.
5. Problème de l’arbre de poids minimal
Le problème de l’arbre de poids minimal se pose pour les graphes dont les arcs sont
valués. On appelle ces valeurs des poids. Cette section est dédiée à la présentation du
problème et aux solutions proposées pour sa résolution.
5.1 Présentation du problème
On considère un graphe G=(X, A) connexe dont les arcs ont des valeurs. Le
problème de l’arbre de poids minimal revient à trouver un graphe partiel de G qui soit un
arbre et pour lequel la somme des poids des arcs soit minimale. Le problème de l’arbre de
poids minimal ou maximal a plusieurs applications comme les réseaux téléphoniques, les
réseaux électriques, etc.
Exemple : Dans une ville possédant plusieurs quartiers on veut construire un réseau
d’alimentation en eau reliant tous les quartiers et qui coute le moins cher possible. Ce
problème peut être représenté par un graphe dont les sommets sont les différents quartiers
et les arcs sont les branches du réseau qui relient deux quartiers. Chaque branche possède
une valeur qui représente son cout de construction. La solution revient à déterminer un
graphe partiel qui soit connexe (pour relier tous les quartiers) et qui ne possède pas de
cycles (ces derniers sont inutiles et entrainent un cout d’installation supplémentaire). On
cherche donc un arbre de poids minimal.
5.2 Résolution du problème
Plusieurs algorithmes ont été proposés pour la résolution de ce genre de problèmes.
Dans ce qui suit, sont présentées deux méthodes : l’algorithme de Kruskal et l’algorithme
de Sollin.
14
Dr C. Bachtarzi
Filière : L2 Socle commun informatique
5.2.1 Algorithme de Kruskal
Cet algorithme mis au point par J. Kruskal permet de trouver un arbre de poids
minimal pour un graphe connexe et valué. Il retrouve un sous ensemble d’arcs qui
forment un arbre touchant tous les sommets, c'est-à-dire un arbre couvrant. Si le graphe
n’est pas connexe, l’application de l’algorithme permet de trouver une forêt de poids
minimal (un arbre de poids minimal pour chaque CC).
Algorithme : Soit G=(X,A)/ |X| = n, |A| = p
Etape 1 : Initialisation
/* numéroter les arcs par ordre croissant selon leur poids */
v(a1) ≤ v(a2) ≤ v(a3) ≤ ……….≤ v(ap) ;
Am ← ∅ ; /* Am contient les arcs de l’arbre de poids min*/
V←0;
/* Valeur de l’arbre de poids minimal */
I←1;
Etape 2 : traitement
Pour I = 1, p faire
Si Am ∪ {ai} ne comporte pas de cycles alors
Am ← Am ∪ {ai} ;
V = V+ v(ai) ;
Fin si
Fin pour
Etape 3 : Résultat
(X, Am ) est l’arbre de poids min
Fin
Remarques :
-
Pour trouver l’arbre de poids maximal, il suffit d’ordonner les arcs dans un
ordre décroissant selon leur poids.
-
Si toutes les valeurs sont différentes, alors l’arbre couvrant de poids minimal est
unique.
5.2.2 Algorithme de Sollin (Borůvka)
L’algorithme de Borůvka est un algorithme pour la recherche d’un arbre de poids
minimal pour un graphe dont tous les poids des arcs sont distincts. Il a été publié en 1926
par O. Borůvka comme une méthode permettant de construire un réseau électrique
optimal. L’algorithme a été redécouvert en 1965 par Sollin. Le principe de l’algorithme
est de réduire G en contractant des arêtes : on choisit peu à peu les arêtes qui seront dans
l'arbre, et à chaque fois que l'on en choisit une, on fusionne les nœuds que cette arête
relie. Ainsi, il ne reste plus qu'un sommet à la fin.
15
Dr C. Bachtarzi
Filière : L2 Socle commun informatique
Algorithme : Soit G=(X,A)/ |X| = n, |A| = p et tous les v(aj) distincts
Etape 1 : Initialisation
Am ← ∅ ; /* Am contient les arcs de l’arbre de poids min*/
V←0;
/* Valeur de l’arbre de poids minimal */
Etape 2 : traitement
Tant que |X| > 1 /* G n’est pas réduit à un sommet */ faire
Détruire les boucles de G
Remplacer les arêtes multiples entre 2 sommets par une seule dont
le poids est minimum
Pour tout xi ∈ X faire
Trouver l’arête ax de poids min adjacente à x
Am ← Am ∪ {ax} ;
V = V+ v(ax) ;
Contracter ax ; /* fusionner les sommets extrémités de ax
Fin pour
Fin tant que
Etape 3 : Résultat
(X, Am ) est l’arbre de poids min
Fin
16
Téléchargement