Uploaded by Rekriss Mohamed

Partie 1 Cours Notions Fondamentales de la théorie des graphes

advertisement
Notions fondamentales de la Théorie des Graphes.
Définitions :
Graphe :
Un graphe est un ensemble de nœuds (ou sommets) qui sont reliés entre eux par des arcs.  Un graphe est
représenté par un couple de deux ensembles G = (X;U).
Où X : l'ensemble des nœuds (ou sommets)
U : l'ensemble des arêtes (graphe non orienté) ou arcs (orienté).
Nœud (Sommet) :
Un nœud est un élément de base d’un graphe, il peut être un objet (une ville, un poste, un nombre, …), un concept,
une connaissance, une idée.
Arc, arête :
Un arc relie deux nœuds entre eux, il est représenté par un couple (x ; y) où x et y sont des nœuds.
Un arc peut être orienté, c'est-à-dire que l'ordre de x et de y est important dans le couple
(x ; y), donc (x ; y) ≠ (y ; x).
 Graphe Orienté ou Digraphe
Un arc peut être non orienté (arête) et dans ce cas, l'ordre de x et de y dans le
couple (x ; y) n'a aucune importante,
donc (x ; y) = (y ; x).
 Graphe Non-Orienté.
REMARQUE :
Un arc non orienté peut toujours être transformé en une situation où l'on n'a que des arcs orientés.
EXEMPLE :
Soit le graphe suivant :
Déterminez l'ensemble des nœuds et l'ensemble des arcs.
Boucle :
Une boucle est un arc dont l'extrémité initiale est égale à son extrémité finale.
Par exemple, (x ; x) est une boucle.
x
Adjacence :
Deux sommets x et y sont adjacents si il existe l'arc (x ; y) dans U. Les sommets x et y sont alors dits voisins
Pour un arc u = (x ; y) on dit que:
x est adjacent à y et y est adjacent à x,
x et y sont adjacents à u et
u est adjacent à x et y.
U1
Al
Tu
EXEMPLE :
Al : Algérie ;
Ma : Maroc ;
Tu : Tunisie ;
Lb : Libbie ;
U6
U2
U3
U4
Lb
Ma
U5
M
r
Mr : Mauritanie.
Incidence :
Une arête est incidente à un sommet x si x est l'une de ses extrémités.
EXEMPLE :
Les arêtes incidentes à d sont :
(d ; a),
(d ; b),
(d ; e),
(d ; h),
(d ; g).
Degré :
Demi-degré extérieur :
est le nombre d'arcs adjacents qui en partent. On le note d+(x) : l’ensemble des arcs de G sortants du nœud x,
d+(x) = | {u  U | u = (x ; y) où y  X} | : y est un successeur de x.
Demi-degré intérieur :
est le nombre d'arcs adjacents qui y arrivent. On le note d-(x) : l’ensemble des arcs de G entrant du nœud x, d-(x) = |
{u  U | u = (y ; x) où y  X} | : y est un prédécesseur de x.
Degré d'un nœud x :
est le nombre d'arcs adjacents à x. Il est noté d(x). d(x) = d+(x) + d-(x).
d(x) = | {u  U | u = (x ; y) ou u = (y ; x) où y  X}|.
EXEMPLE :
Successeurs : d+(x) = 3,
Prédécesseurs : d-(x) = 2,
Degré : d(x) = 5.
PROPRIETES :
1. Lemme des poignées de mains : La somme des degrés des sommets d'un graphe est égale à 2 fois son nombre
d'arêtes. Une arête e=(x ; y) du graphe est comptée exactement 2 fois dans la somme des degrés : une fois
dans d(x) et une fois dans d(y)
2. Pour un graphe simple d'ordre n, le degré d'un sommet est un entier compris entre 0 et n-1. Un sommet de
degré 0 est dit isolé : il n'est relié à aucun autre sommet.
Chemin et chaîne
Dans un graphe il est naturel de vouloir se déplacer de sommet en sommet en suivant les arcs (les arêtes).
Chaîne :
Une chaîne de x à y est une séquence d’arcs où :
 Deux arcs qui se suivent sont adjacent ;
 x est une extrémité du premier arc,
 y est une extrémité du dernier arc.
Chemin :
Un chemin de x à y est une chaîne dans laquelle les arcs sont orientés et tels que:
 x est l'extrémité initiale du premier arc, ²
 y est l'extrémité terminale du dernier arc,
 l'extrémité terminale d'un arc est l'extrémité initiale de l'arc qui le suit dans la séquence.
 tous les voisins suivants d’un sommet dans un chemin (orienté) sont ses descendants
 tous les voisins précédents d’un sommet dans un chemin (orienté) sont ses ancêtres
La longueur du chemin ou chaîne correspond au nombre d’arcs ou d'arêtes parcourues
EXEMPLE :
ch1 = ((A; C), (C;E)) est un chemin de A à E de longueur 2
ch2 = ((A;C),(C;F),(F;A),(A;C),(C;E)) est un chemin de A à E de longueur 5.
ch3 = ((A;C),(C;F),(F;D),(D;C),(C;E)) est un chemin de A à E de longueur 5.
ch4 = ((A; B), (B; D), (D;E)) est une chaîne de A à E de longueur 2.
ch5 = ((A;B),(B;D),(D;C),(C;A),(A;B),(B;D),(D;E)) est une chaîne de A à E de
longueur 7.
ch6 = ((A;B),(B;D),(D;C),(C;F),(F;D),(D;E)) est une chaîne de A à E de longueur
6.
Chemin simple, chaîne simple :
Un chemin simple (une chaîne simple) est un chemin (une chaîne) qui ne contient pas plusieurs fois le même arc.
EXEMPLE :
ch1 et ch3 sont des chemins simples mais pas ch2.
ch4 et ch6 sont des chaînes simples mais pas ch5.
Chemin élémentaire, chaîne élémentaire :
Un chemin élémentaire (une chaîne élémentaire) est un chemin (une chaîne) qui ne passe pas plus d'une fois par un
nœud.
EXEMPLE :
ch1 est un chemin élémentaire mais pas ch2, ni ch3.
ch4 est un chemin élémentaire mais pas ch5, ni ch6.
Circuit, cycle
Circuit :
Un circuit contenant un nœud x est un chemin de x à x  un chemin qui revient à son point de départ.
Cycle :
Un cycle contenant un nœud x est une chaîne de x à x  une chaîne qui revient à son point de départ.
Un circuit (un cycle) est élémentaire si le chemin (la chaîne) associé(e) est élémentaire.
EXEMPLE :
REMARQUE :
Les termes de chemin et de circuit s'emploient en propre pour les graphes orientés. Pour les graphes non orientés,
on parle de chaîne et de cycle. Cependant la définition formelle est exactement la même dans les 2 cas, seule
change la structure (graphe orienté ou non) sur laquelle ils sont définis.
Circuit, chemin Hamiltonien :
Un circuit/chemin est Hamiltonien s’il est élémentaire et passe par tous les sommets du graphe.
Cycle, chaîne Hamiltonien
Un cycle/chaîne est Hamiltonien s’il est élémentaire et passe par tous les sommets du graphe.
Circuit, chemin Eulérien
Un circuit/chemin est eulérien s’il est simple et passe par tous les arcs du graphe.
Cycle, chaîne Eulérien
Un cycle/chaîne est eulérien s’il est simple et passe par toutes les arêtes du graphe.
Représentations des graphes :
Représentation par dictionnaire :
On peut définir entièrement un graphe en donnant pour chaque nœud l’ensemble de ses successeurs ou de ses
prédécesseurs.
Précédent d’un nœud :
On dit que le nœud y est le précédent du nœud x
si  (x ; y)  U. Précédent  prédécesseur  antécédent
Suivant d’un nœud :
On dit que le nœud y est le suivant du nœud x
si  (x ; y)  U. Suivant  successeur
Représentation matricielle :
Matrice d’incidence nœud-arc :
Un graphe peut être représenté par une matrice n x m (n = |X| et m = |U|), dite d'incidence, pouvant contenir
uniquement les valeurs 0, 1, -1. Chaque ligne de la matrice est associée à un nœud et chaque colonne à un arc.
Ainsi, une case indique la relation qu'il existe entre un nœud et un arc.

0 signifie que le nœud et l'arc ne sont pas adjacents,

1 signifie que le nœud est l'extrémité initiale de l'arc,

-1 signifie que le nœud est l'extrémité terminale de l'arc.
EXEMPLE :
n = 5, m = 8  M = (5x8)
a
b
c
d
1
1
1
0
0
2 -1 0 -1 1
3
0 -1 1
0
4
0
0
0 -1
5
0
0
0
0
e
0
0
-1
1
0
f
0
0
0
1
-1
g
0
0
-1
0
1
h
0
0
0
-1
1
REMARQUE :
 Chaque colonne contient une seule fois ‘-1’ et une seule fois ‘+1’ (graphe orienté).
 Seulement 2m cases de la matrice sont non nulles sur mn cases.
 Les boucles ne peuvent être représentées.
 Cette représentation occupe beaucoup de place en mémoire.
 De plus, son utilisation apporte rarement de bons résultats au niveau des algorithmes. Notamment, pour parcourir
le graphe, son emploi est difficile.
 Par contre, pour quelques problèmes comme le flot de coût minimum, cette matrice a une signification directe
importante et peut donc s'avérer utile.
Matrice d’adjacence nœud-nœud :
Un graphe peut être représenté par une matrice n x n (n = |X|), dite d'adjacence, pouvant contenir uniquement les
valeurs 0, 1. Chaque ligne et chaque colonne de la matrice représente un nœud. Ainsi, une case indique la relation
qu'il existe entre deux nœuds.

0 signifie que les deux nœuds ne sont pas reliés par un arc,

1 signifie que les deux nœuds sont reliés par un arc orienté.
EXEMPLE :
n = 5  M = (5x5)
1
2
3
1
0
1
0
2
0
0
0
3
0
1
0
4
0
0
1
5
0
0
1
4
0
1
0
0
1
5
0
0
0
1
0
Connexité d’un graphe :
Lors de la conception d'un réseau de communication notamment, il peut être intéressant de savoir si la configuration
choisie permet une communication de n'importe quel point à n'importe quel autre. Un moyen de le vérifier est de
représenter le réseau sous la forme d'un graphe et de vérifier qu'il est fortement connexe. Pour cela, l'algorithme
suivant est proposé. Il détermine la composante fortement connexe d'un graphe contenant un point donné. Ensuite,
pour le problème énoncé, il suffit de choisir un point au hasard, d'exécuter l'algorithme et de vérifier que la
composante fortement connexe trouvée est bien le graphe en entier. Un algorithme permettant de trouver toutes les
composantes fortement connexes est également proposé.
Connexité, forte connexité
- On définit la connexité par une relation entre deux nœuds de la manière suivante :
x et y ont une relation de connexité   une chaîne entre x et y ou bien x = y (sommet isolé).
- On définit la forte connexité par une relation entre deux nœuds de la manière suivante.
x et y ont une relation de forte connexité  ( un chemin de x à y et un chemin de y à x) (circuit) ou bien x = y
(sommet isolé).
Graphe connexe, fortement connexe
-
Un graphe est dit connexe si tous ses nœuds ont deux à deux la relation de connexité.
-
Un graphe est dit fortement connexe si tous ses nœuds ont deux à deux la relation de forte connexité.
EXEMPLES :
Graphe non connexe :
Graphes connexes mais non fortement connexes :
Graphe fortement connexe :
Composante connexe, fortement connexe
On appelle composante connexe un ensemble de nœuds qui ont deux à deux la relation de connexité. De plus, tout
nœud en dehors de la composante n'a pas de relation de connexité avec aucun des éléments de la composante.
On appelle composante fortement connexe un ensemble de nœuds qui ont deux à deux la relation de forte connexité.
De plus, tout nœud en dehors de la composante n'a pas de relation de forte connexité avec aucun des éléments de la
composante.
Dans l'exemple précédent du graphe non connexe, {A, B, C} est une composante fortement connexe du graphe et {D,
E} est une composante connexe.
Graphe réduit
On appelle graphe réduit du graphe G le graphe G' pour lequel chaque nœud est associé à une composante
fortement connexe de G. De plus, un arc relie un nœud x' à un nœud y' dans le graphe G' s'il existe un arc qui relie x
à y dans G où x appartient à la composante fortement connexe de G associée à x' et où y appartient à la composante
fortement connexe de G associée à y'.
EXEMPLE
Ce graphe G n'est pas fortement connexe, car on ne peut pas
trouver de chemin de A à D par exemple.
Par contre, on identifie deux composantes fortement connexes
A' = {A,B,C} et B' = {D,E}. Le graphe réduit du graphe G' est:
Algorithmes de connexité :
Recherche d'une composante fortement connexe
PRINCIPE :
Pour la recherche d’une composante fortement connexe d'un graphe G contenant un sommet ‘a’. On parcourt le
graphe à partir du point ‘a’ dans le sens direct (i.e. en suivant les flèches des arcs) et de créer un ensemble des
nœuds parcourus D(a). La même chose est effectuée dans le sens indirect (i.e. en suivant les flèches des arcs en
sens inverse) et de créer un deuxième ensemble des nœuds parcourus A(a). Le premier ensemble regroupe les
nœuds accessibles à partir de ‘a’ et le deuxième ensemble regroupe les nœuds qui peuvent atteindre ‘a’.
L'intersection de ces deux ensembles donne les nœuds qui à la fois peuvent atteindre ‘a’ et sont accessibles à partir
de ‘a’. Cette intersection est donc la composante fortement connexe qui contient ‘a’.
ALG&EORITHME
Titre :
ComposanteFortementConnexe ;
Entrées :
G = (X;U) : un graphe, a : un sommet ;
Sortie :
C : un sous-ensemble de sommets ;
Variables intermédiaires: X1 et X2 : 2 sous-ensembles de sommets ;
examiné() : une fonction ; x : un nœud ;
Début
X1  {a}; pour tout x  X faire examiné(x)  faux;
Tant que  x  X1 | non examiné(x) faire
examiné(x)  vrai;
Pour tout u = (x ; y)  U | y  X1 faire X1  X1  {y};
Fin tant que;
X2  {a}; pour tout x  X1 faire examiné(x)  faux;
Tant que  x  X2 | non examiné(x) faire
examiné(x)  vrai; pour tout u = (y ; x)  U | y  X2 faire X2  X2  {y};
Fin tant que;
C  X1  X2; retourner X’
Fin
Recherche de toutes les composantes fortement connexes
PRINCIPE :
Pour trouver toutes les composantes fortement connexes d'un graphe, il suffit de choisir au hasard un nœud et de
déterminer, grâce à l'algorithme précédent, la composante fortement connexe qui le contient. On obtient alors une
première composante fortement connexe X1. Ensuite, parmi les nœuds qui ne font pas partie de X1, on en prend un
au hasard pour déterminer la composante fortement connexe qui le contient. On obtient X2. On recommence ainsi
jusqu'à ce que tous les nœuds appartiennent à une composante fortement connexe.
ALGORITHME
Titre :
ComposantesFortementConnexes ;
Entrées :
G = (X;U) :; un graphe ;
Sortie :
C = {C1,...,Cn} : un ensemble de composantes fortement connexes ;
Variables intermédiaires : X' : un sous-ensemble de sommets ; i : un entier ; x : un nœud ;
Début
X'  X; i  1;
Tant que X' ≠  faire
choisir x dans X'; Ci  ComposanteFortementConnexe(G,x);
X'  X' - Ci; i  i + 1;
Fin tant que;
Fin
EXEMPLES
:
x0
x1
x2
x4
x3
x6
x5
- a = x2
D(a) = {x2, x4, x6, x5}
A(a) = {x2, x0, x1, x5, x3, x4, x6}
C1 = D(a)  A(a) = {x2, x4, x6, x5}
- a = x0
C2 = {x0}
- a = x1
C3 = {x1}
- a = x3
C4 = {x3}
Download