Académique Documents
Professionnel Documents
Culture Documents
1
1. Introduction
Dans ce chapitre nous introduisons un concept, celui de graphe. Un graphe (graph) est un objet
mathématique simple et puissant qui permet de modéliser et de résoudre de nombreux
problèmes. L'utilisation des graphes est courante en tant qu'outil de représentation
particulièrement en informatique : par exemple, le plan schématisé de rues, un arbre
généalogique, la représentation d'un réseau informatique sont des exemples de graphes.
La théorie des graphes est un domaine mathématique qui ouvre un grand champ de
modélisation conduisant à des solutions efficaces pour de nombreux problèmes dans un grand
nombre de domaines allant de la science fondamentale aux applications technologiques
concrètes. Elle nous offre des outils mathématiques et des algorithmes pour la modélisation et
l’étude des situations particulières dont l’objectif est de résoudre des problèmes.
Intuitivement, Un graphe est un ensemble de points, dont certaines paires sont directement
reliées par un ou plusieurs liens (relation binaire). Ces points sont nommés nœuds ou sommets.
Ces liens sont nommés arêtes ou arcs. Un graphe peut être donc orienté ou non selon que la
relation binaire sous-jacente est orientée ou pas.
En effet, un graphe sert avant tout à manipuler des concepts, et à établir un lien
entre ces concepts. N’importe quel problème comportant des objets avec des relations entre
ces objets peut être modélisé par un graphe.
Exemple1.1
• Quand on est sur la page D, on peut seulement aller sur la page C et de la page E, on ne peut
aller que sur la page A.
On peut modéliser cette situation avec un graphe, tel que les nouds (sommets) sont les pages
du site internet et les liens (arcs) sont le passage en un clic d’une page à une autre.
2
3. Vocabulaire et notations
Un graphe (non orienté) G est défini par deux ensembles finis : un ensemble V, non vide,
d'éléments appelés sommets, un ensemble E (qui peut être vide) d'éléments appelés arêtes
avec associés à chaque arête e deux sommets x et y, distincts ou non, appelés les extrémités de
e.
Plus formellement, un graph noté G= (V, E) est définit par deux ensembles disjoints. Un
ensemble V = {v1, v2, · · · , vn} de sommets (vertex), et un ensemble d’arêtes (edge) E={e1, e2, ·
· · , em} , Une arête ei est une paire (non ordonnée) des éléments de V, elle relie deux sommets
entre eux.
Les graphes tirent leur nom du fait qu’on peut les représenter graphiquement par des dessins.
Il est plus pratique de dessiner les graphes sur un plan de la façon suivante : les sommets sont
représentés par des points, les arêtes par des lignes simples qui relient les points extrémités
correspondant aux sommets concernés. Néanmoins, il ne faut pas confondre un graphe et son dessin
: un même graphe peut être dessiné de plusieurs façons. La lisibilité de la visualisation
est une question importante. Il existe donc une infinité de représentations d’un graphe.
Exemple 1.2
Par commodité, on notera bc au lieu de {b, c}. On a donc bc = cb. Il est donc possible de réécrire
le graphe G de la façon suivante:
G = (V, E). tel que V = {a, b, c, d, e}, E = {bc, cd, de, ec}).
3
On peut représenter un tel graphe par le schéma suivant :
G
Figure 1.1 : représentation graphique du graphe G
Le nombre n de sommets s'appelle l'ordre du graphe G. On le note parfois |G| (qui est donc égal
au cardinal de l'ensemble V, noté |V|).
Le nombre m d'arêtes s'appelle la taille du graphe G. On le note parfois ||G|| (qui est donc égal
à |E|).
Si x et y sont deux extrémités d’une arête ei (ei = xy est une arête de G), on dit que x et y sont
des sommets voisins ou adjacents et ei est une arête incidente aux sommets x et y.
On dit que deux arêtes sont adjacentes s’il existe un sommet commun à ces deux arêtes.
Dans le graphe G de l'exemple 1.2, les sommets b et c sont voisins (adjacents) tandis que b et d
ne le sont pas. Le sommet a n'a aucun voisin. L’arête bc et adjacente à l’arête cd. L’arête ed et
incidente aux sommets e et d .
Une boucle est une arête reliant un sommet à lui-même. Si l’arête ei =xy avec x=y alors ei est
une boucle.
Deux arêtes ei et ej ou plus sont dites parallèles ou multiples (double, triple, etc., suivant le
nombre d'arêtes) lorsqu’elles ont les mêmes extrémités x et y.
4
3.6. Graphe simple et multigraphe
Un graphe G 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 (ne contient pas d’arête multiples). Un graphe non orienté
qui n’est pas simple est un multigraphe.
Le graphe G de la figure 1.2 est un graphe simple, alors que le graphe H est un multigraphe.
G H
Une façon simple de décrire un graphe, mais qui sert également dans l’application d’algorithme
sur les graphes, est de donner sa matrice d’adjacence ou sa matrice d’incidence.
Soit G= (V, E) un graphe avec un ensemble de sommets V et un ensemble d’arêtes E, tel que
|V|=n (ordre de G) et |E|=m (Taille de G).
4.1.1. Matrice d’adjacence : est une matrice de dimension n×n. Elle indique le nombre d’arêtes
entre deux sommets. Dans une matrice d’adjacences A, les lignes et les colonnes représentent
les sommets du graphe. L’élément aij de la matrice A désigne l’intersection de la ligne i et de la
colonne j. Si aij>0 cela signifie que le sommet i est adjacent au sommet j.
Pour les graphes de la Figure 1.2, nous avons les matrices d’adjacence correspondante
suivantes :
1 2 3 4 5
1 0 0 1 1 1 1 2 3 4
2 0 0 1 0 0 1 1 0 1 1
3 1 1 0 1 1 2 0 0 2 0
4 1 0 1 0 1 3 1 2 0 1
5 1 0 1 1 0 4 1 0 1 0
4.1.2. Matrice d’incidence : est une matrice de dimension n×m . Elle indique l’incidence entre
un sommet et une arête. Dans une matrice d’incidence M, bij est le nombre
de fois (0, 1, ou 2) où le sommet i et l’arête j sont incidents. Une boucle a une double incidence
sur un sommet, indiqué par 2 dans la matrice.
Exemple 1.3
e1 e2 e3 e4 e5 e6 e7
1 1 1 0 1 0 0 0
2 0 0 0 0 0 0 1
3 0 0 0 1 1 1 1
4 0 1 1 0 1 0 0
5 1 0 1 0 0 1 0
La question de la représentation en machine d'un graphe n'a pas de réponse unique. D'une part
en effet on peut imaginer bien des façons de faire a priori, et d'autre part la représentation d'un
graphe a de l'importance vis- à-vis du traitement qu'on veut effectuer. Le mode de
représentation choisi peut avoir en effet une incidence directe sur l'efficacité de l'algorithme en
termes de complexité.
6
4.2.1. Matrice d'adjacence : La façon la plus naturelle de représenter un graphe G non orienté en
machine est la matrice d'adjacence, c'est la matrice carrée de dimension nn avec n l’ordre du
graphe G. elle représenter sous forme de table de dimension nn.
4.2.3. Listes d’adjacence : Un deuxième principe de représentation d'un graphe est de donner
pour chaque sommet son « voisinage », c'est-à-dire ses sommets voisins. L'implémentation de
cette représentation peut être envisagée de différentes façons, la plus classique, du point de vue
programmation, étant de donner par exemple les voisins sous forme de listes, appelées listes
d’adjacence ou listes de voisins. Si on veut pouvoir modifier le graphe en cours de traitement, il
est indiqué d'implémenter ces listes sous forme de classiques listes chaînées.
Le graphe G de l’exemple 1.3 peut etre représenter en machine par la liste d’adjacence suivante :
1 5 4 3 /
2 3 /
3 3 / 4 5 /
4 3 1 5 /
5 / 1 4 3 /
Le degré d'un sommet x noté dG(x) est égal au nombre d'arêtes de G incidentes à ce sommet,
chaque boucle est comptée comme deux arêtes.
On désigne par δ(G) et ∆(G) respectivement, les degrés minimum et maximum des sommets de
G.
Remarque 1.1
Dans le graphe G de l'exemple 1.3, on a : dG (5) = 3 car N(5) = {1, 3, 4}, le sommet 2 est un
sommet pendant. Dans ce graphe on a aussi δ(G) = 1 et ∆(G) = 3.
7
Le théorème suivant établit une relation fondamentale entre les degrés des sommets
d’un graphe et son nombre d’arêtes.
Dans un graphe G quelconque, on a la somme des degrés des sommets est égale à deux fois le
nombre d’arêtes.
Plus formellement, Soit G = (V, E) un graphe, avec un ordre n et une taille m (|V|=n , |E|=m).
On a :
Preuve : En faisant la somme des degrés de G, on compte deux fois chaque arête, une fois par
extrémité (c'est en particulier vrai pour les boucles puisque chacune compte deux fois dans le
degré). On trouve donc bien au total deux fois le nombre d'arêtes du graphe.
Corollaire 1.1
Preuve : La somme des degrés étant paire, puisqu'égale à deux fois le nombre d'arêtes, il ne peut
y avoir dans celle-ci qu'un nombre pair de termes impairs. Il y a donc un nombre pair de degrés
impairs dans le graphe.
6. Graphes particuliers
Un graphe simple (sans boucles) est complet si chaque sommet du graphe est relié directement
à tous les autres sommets. Un graphe complet d’ordre n est noté Kn. La Figure 1.5 montre les
graphes complets d’ordre 1 à 4.
K1 K2 K3 K4
𝒏(𝒏 𝟏)
Le nombre d'arêtes m de Kn est égal a : m =
𝟐
D'une façon plus générale, on a pour un graphe simple quel- conque ayant n sommets et
𝒏(𝒏 𝟏)
m arêtes on a : m
𝟐
Un graphe biparti complet est un graphe biparti dans lequel il existe une arête entre chaque
couple de sommets (x, y) avec x ∈ V1 et y ∈ V2. La Figure 1.5 montre un graphe biparti G et un
graphe biparti complet K3,4. La notation pour un graphe biparti complet est K avec deux indices,
le premier est le cardinal de l’ensemble V1, le deuxième est le cardinal de l’ensemble V2.
Le graphe de la figure 1.6 est un graphe 4-régulier alors que le graphe G de la figure 1.7 est un
graphe cubique.
9
Figure 1.6 : graphe 4-régulier
Un graphe planaire est un graphe qui peut être représenté dans un plan, sans qu’il y ait d’arêtes
qui s’intersectent (aucune arête ne coupe une autre). Montrer qu’un graphe est planaire est
assez simple. Il suffit de le dessiner. La personne peut alors facilement vérifier qu’il n’y a pas
d’arêtes qui se coupent. En revanche, prouvez qu’un graphe n’est pas planaire est souvent plus
difficile. La figure 1.7 présente un graphe G avec sa représentation planaire, donc on peut dire
que le graphe G est un graphe planaire. Alors que, la figure 1.8 illustre un graphe qui n’est pas
planaire.
10
6.5. Graphe complémentaire d’un graphe
Comme nous l’avons vu plus haut, un graphe sert souvent à représenter des objets (des
sommets) qui sont en relation (des arêtes). Si maintenant, nous voulons représenter ces mêmes
objets mais pour indiquer ceux qui ne sont pas en relation, nous obtenons un autre graphe. Ces
graphes sont dit complémentaires. La Figure 1.9 montre un graphe G = (V, E) et son graphe
complémentaire noté G =(V, E).
(a) G (b) G
On a souvent besoin d’isoler une partie d’un graphe ce qui conduit à introduire la notion de
sous-graphe avec quelques définitions.
11
Deux types de sous-graphes sont très souvent utilisés. Il s’agit des graphes partiels et des sous-
graphes induits.
Un sous-graphe induit G’=(V’, E’) de G=(V, E) est un graphe tel que V’ ⊆ V et E’ est l’ensemble
des arêtes de E incidentes à deux sommets de V’. On notera ce sous-graphe G[V’].
12
6.7. Quelques sous-graphes souvent utiles
Quelques sous-graphes, graphes partiels et sous-graphes induits sont souvent recherchés dans
un graphe pour trouver une solution à un problème.
Clique : Une clique d’un graphe G = (V, E) est un sous-graphe induit complet. Elle est
définie par : dans un graphe G non orienté, un sous-ensemble de sommets C ⊆ V tel que
toute paire de sommets x, y ∈ C (x ≠ y) est reliée par une arête (arêtes deux a deux
adjacentes) est appelé une clique. Un sommet isolé constitue à lui seul une clique. Une
clique d’ordre n est noté Cn. Si la clique cherché dans le graphe G a une cardinalité
maximum donc on parle de clique maximum.
(a) Graphe G (b) une clique dans G (c) une clique maximum dans G
13
Un couplage d’un graphe G=(V, E) est un sous-graphe composé d’arêtes
deux à deux non adjacentes. il est possible de chercher dans un graphe le couplage
maximum, c’est à dire celui contenant le plus grand nombre d’arêtes bien sur deux à
deux non adjacentes.
Remarques 1.3
Un graphe peut posséder plusieurs couplages maximums.
Si le sous-graphe obtenu est un graphe partiel (couvrant tous les sommets du graphe)
le couplage est dit couplage parfait.
7. Graphe orienté
Pour représenter certaines situations, un graphe non orienté n’est plus suffisant, Il est parfois
nécessaire de différencier une arête allant de x vers y d’une arête allant de y vers x. on a donc
besoin d’un graphe dans lequel chaque lien possède une orientation, autrement dit d’un graphe
orienté. Il existe de nombreux domaines où les graphes sont orientés. Par exemple : plan de
ville, avec les sens interdits, parcours en montagne, où il est utile d’indiquer le sens de
montée…etc.
On appelle graphe orienté ou digraphe (directed graph) un graphe où chaque arête est orientée,
chaque arête orientée possède un début et une fin, c’est-à-dire qu’elle va de l’une des ses
extrémités, appelée origine ou extrémité initiale à l’autre, appelée extrémité terminale.
14
7.1. Définitions et notations
Plus formellement, Un graphe G = (V, A) est dit graphe orienté si chaque arête est une paire
de sommets (ordonnée), a ∈ A, a = (x, y). Avec V= {v1, v2, v3,…, vn} est l’ensemble des
sommets et A={a1, a2 ,a3 ,…, am} est l’ensemble des arcs du graphe G.
Un arc ai de l’ensemble des arcs A est défini par une paire ordonnée de sommets. Lorsque
ai=(x,y), on dit que l’arc ai va de x à y. On dit aussi que x est l’extrémité initiale et y l’extrémité
finale de ai.
prédécesseur/successeur : pour un arc xy A, x est le prédécesseur de y, et y est le successeur
de x. Avec x et y deux sommets de V.
l’ensemble de voisin : pour un sommet x V, l’ensemble de voisins de x noté N(x) est défini
par : N(x)=N-(x)N+(x). Tel que N-(x) est l’ensemble de prédécesseurs (voisins entrants) de
x et N+(x) est l’ensemble de successeurs (voisins sortants) de x.
boucle, arc multiple et arcs opposés : comme en non orienté, si xy est un arc d’un graphe, si x
= y alors on a une boucle et on parle d’arc multiple dans le cas d'arcs ayant un même couple
(x, y) associé. On peut préciser, suivant le nombre d'arcs concernés: arc double, triple, etc.
Deux arcs ayant pour couples associés respectivement (x, y) et (y, x) sont dits opposés.
Remarques 1.4
La notion d’ordre et de taille dans un graphe orienté est la même définie pour les
graphes non orientés.
La relation d’incidence et d’adjacence dans un graphe orienté sont définies de la
même manière dont elles sont définies pour les graphes non orientés.
Si x appartient à N(y), on dit que x et y sont des sommets voisins ou adjacents.
Un graphe orienté est simple (ou strict) si il est sans boucles (l’arc et il a au plus
une arête entre deux sommets.
Un graphe orienté simple est dit complet si toute paire de sommet est relié par un
seul arc.
Comme indiqué dans la figure 1.16, les graphes orientés se représentent sur le plan comme les
graphes non orientés avec simplement en plus sur chaque ligne arc une flèche qui indique son
orientation, flèche allant de l’extrémité initiale x vers l’extrémité finale y de l’arc (x, y).
15
Exemple 1.4
V = {a, b, c, d, e }
A = {(a, b), (a, c), (c, d), (d, a), (d, e), (e, e)}, on a :
N-(a)= {d}
N+(x)= {b, c}
N(x)= {d, b, c}
L’arc (e, e) représente une boucle pour le sommet e. On peut donc remarquer que G n’est pas
un graphe simple.
16
Remarques 1.5
Dans le graphe G de l’exemple 1.4 les degrés de ses sommets est déterminé comme suit :
Cette formule prend les boucles en compte, sachant que chaque boucle dans un graphe orienté
est comptée pour une unité de degré extérieur et une unité de degré intérieur au sommet
concerné.
On retrouve la formule sur la somme des degrés donnée au théorème 1.1, en observant que
pour tout sommet x on a 𝐝 (𝐱) = 𝐝 (𝐱)+ 𝐝 (𝐱), d'où:
On peut représenter un graphe orienté par une matrice d’adjacences A, c’est une matrice carrée
de dimension (n×n). Dans une matrice d’adjacences A, les lignes et les colonnes représentent
les sommets du graphe. L’élément aij de la matrice A désigne l’intersection de la ligne i et de la
colonne j et indique le nombre d’arcs ayant le sommet i comme extrémité initiale et le sommet
j comme extrémité terminale.
17
Cette matrice a plusieurs caractéristiques :
On peut représenter un graphe orienté sans boucles par une matrice d’incidence M, c’est une
matrice de dimension n×m. Elle indique l’incidence entre un sommet et un arc. Dans une
matrice d’incidence M, un élément bij est défini comme suit :
V={1, 2, 3, 4, 5, 6}
1 2 3 4 5 6
1 0 1 0 1 0 1
2 0 0 0 1 1 0
3 0 0 0 1 0 0
4 0 0 0 0 1 0
5 0 0 0 0 0 0
6 0 1 0 0 0 0
Matrice d’adjacence A de G
On retrouve dans les graphes orientés les mêmes principes de représentations en machine que
celle dans les non orienté, avec quelques précisions supplémentaires dues à l'orientation.
7.5. 1. Par La matrice d'adjacence /d’incidence : un graphe orienté G= (V, A), avec V ={v1,v2, .
. . , vn } et A={a1, a2 ,a3 ,…, am}, peut être représenter en machine par sa matrice d’adjacence
(d’incidence) sous forme de table d’adjacence (d’incidence). Cette représentation est statique.
7.5. 2. Table des successeurs : une autre représentation statique d’un graphe orienté peut être
donnée sous forme de tableau tel que : dans un tableau d’ordre n noté PS dont l’indice i indique
le sommet vi et la case PS[i] contient un indice vers le premier successeur ranger dans un autre
tableau LS de dimension m qui contient les listes des successeurs des sommets qui sont rangées
les unes après les autres, dans l’ordre naturel des sommets qui lui sont associés. L’absence de
successeurs est codée par 0 dans le tableau PS.
7.5. 3. Listes de successeurs : On peut utiliser le voisinage de chaque sommet pour définir des
listes de successeurs, chaque liste associée à un sommet donne les successeurs de ce sommet.
Classiquement, on peut implémenter ces listes comme listes chaînées. Concrètement, on a un
tableau T de dimension n. Chaque élément T[i] contient un pointeur d'accès à la liste de
successeurs du sommet vi. Cette représentation est dynamique.
Exemple 1.6
Si on veut représenter le graphe G de la figure 1.17 en machine on peut définir les listes
correspondantes comme suit :
1 2 3 4 5 6 7 8
2 4 6 4 5 4 5 2 LS
19
Par sa liste des successeurs :
1 2 4 6 /
2 4 5 /
3 4 /
4 5 /
5 /
6 2 /
20