]> AND Private Git Repository - cours-maths-dis.git/blob - graphes/GraphesOrientes.tex
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
ajout fichier pch
[cours-maths-dis.git] / graphes / GraphesOrientes.tex
1
2
3 \section{Définitions}
4
5 \subsection{Digraphe (graphe orienté), sommet, arc}
6
7 En donnant un sens aux arêtes d'un graphe, on obtient un digraphe, ou graphe orienté.
8
9
10 \begin{Rem}
11 De l'anglais directed graph.
12 \end{Rem}
13
14 \begin{Def}[Digraphe, sommets, arcs]
15 Un \emph{digraphe}\index{digraphe}\index{graphe!orienté} fini $G = (V, E)$ est défini par :
16 \begin{itemize}
17 \item l'ensemble fini $V = \{v_1, v_2, ..., v_n\}$ ($|V| = n$) dont les éléments sont appelés \emph{sommets} \index{sommets},
18 \item et par l'ensemble fini $E = \{e_1, e_2, ..., e_m\}$ ($|E| = m$) dont les éléments sont appelés \index{arcs}\emph{arcs}.
19 \end{itemize}
20 Un arc $e$ de l'ensemble $E$ est défini par une paire ordonnée de sommets. Lorsque $e = (u, v)$, on dira que l'arc $e$ va de $u$ à $v$. On dit aussi que $u$ est l'extrémité initiale et $v$ l'extrémité finale de $e$.
21 \end{Def}
22
23
24 \begin{Ex}
25 Un exemple de digraphe :\\
26 \begin{center}
27 \includegraphics[scale=0.7]{graphes/digraphe111}
28 \end{center}
29 \end{Ex}
30
31
32
33 \begin{Exo}
34 Construire un graphe orienté dont les sommets sont les entiers compris entre 1 et 12 et dont les arcs représentent la relation \og être diviseur de \fg{}.
35 \end{Exo}
36
37 \begin{Exo}
38  Quel est le nombre maximal d'arêtes dans un graphe orienté d'ordre $n$ qui ne possède pas d'arêtes parallèles ?
39 \end{Exo}
40
41
42 \begin{Ex}
43 Le graphe d'une relation binaire peut être assimilé à un graphe orienté.
44 \end{Ex}
45
46 \begin{Rem}
47 Les graphes orientés peuvent être représentés graphiquement, comme dans le cas non-orienté. On place alors des flèches au lieu de simples segments.
48 \end{Rem}
49
50 \subsection{Degré d'un sommet d'un digraphe}
51
52 Soit $v$ un sommet d'un graphe orienté.
53
54 \begin{Def}[Degré extérieur]
55 Le \emph{degré extérieur}\index{degré!extérieur} du sommet $v$ est le nombre d'arcs ayant $v$ comme extrémité initiale.
56 \end{Def}
57
58 \begin{Notation}
59 On le note $d_+(v)$.
60 \end{Notation}
61
62 \begin{Def}[Degré intérieur]
63 Le \emph{degré intérieur}\index{degré!intérieur} du sommet $v$ est le nombre d'arcs ayant $v$ comme extrémité finale.
64 \end{Def}
65
66 \begin{Notation}
67 On le note $d_-(v)$.
68 \end{Notation}
69
70
71 \begin{Th}
72 On a : $$d(v) = d_+(v) + d_-(v)$$.
73 \end{Th}
74
75 \begin{Exo}
76 Soit $G$ un graphe orienté quelconque. Démontrez que la somme des degrés entrants de tous les sommets est égal à la somme de tous les degrés sortants.
77 \end{Exo}
78
79 \noindent\textit{\underline{Réponse :}} Chaque arête compte une fois dans la somme des degrés entrants et une fois dans la somme des degrés sortants...
80
81 % \begin{Exo}
82 % Trouvez les degrés extérieurs et intérieurs de chacun des sommets du graphe ci-dessous :
83 % \begin{center}
84 % \includegraphics[scale=0.7]{digraphe1.eps}
85 % \end{center}
86 % \end{Exo}
87
88
89
90 \begin{Exo}
91 Soit X un ensemble de lapins, et G un graphe orienté ayant X pour ensemble de sommets. On dit que G est un «graphe de parenté» si les arcs de G codent la relation «être l'enfant de...». Quelles conditions doit nécessairement vérifier G pour pouvoir être un graphe de parenté? 
92 \end{Exo}
93
94 \subsection{Chemins et circuits}
95
96 \subsubsection{Chemin}
97 \begin{Def}[Chemin]
98 Un \emph{chemin}\index{chemin} conduisant du sommet $a$ au sommet $b$ est une suite de la forme ($v_0,e_1,v_1,e_2,v_2, ..., e_k,v_k$) où les $v_i$ sont des sommets ($v_0=a$ et $v_k=b$) et les $e_i$ sont des arcs tels que $e_i$ va de $v_{i-1}$ à $v_i$.
99 \end{Def}
100
101 \begin{Ex}
102 Sur le digraphe ci-dessous, on peut voir par exemple le chemin ($v_3,e_3,v_4,e_4,v_5$).
103
104 \begin{center}
105 \includegraphics[scale=0.7]{graphes/Digraphe1.eps}
106 \end{center}
107 \end{Ex}
108
109 \begin{Rem}
110 Par convention, tout chemin comporte au moins un arc.
111 \end{Rem}
112
113 \subsubsection{Distance}
114
115 \begin{Def}[Distance]
116 On appelle \emph{distance}\index{distance} entre deux sommets d'un digraphe la longueur du plus petit chemin les reliant.
117
118 S'il n'existe pas de chemin entre les sommets $x$ et $y$, on pose $d(x,y) = +\infty$.
119 \end{Def}
120
121 \begin{Ex}
122 Par exemple, sur le digraphe ci-dessus (exemple précédent), $d(v_1,v_5)=2$, $d(v_1,v_6)=1$, $d(v_6,v_1)=+\infty$.
123 \end{Ex}
124
125
126
127 \begin{Exo}
128 Donnez un algorithme permettant de calculer la distance entre deux sommets x et y d'un digraphe connexe.
129 \end{Exo}
130
131
132 \subsubsection{Circuit}
133 \begin{Def}[Circuit]
134 Un \emph{circuit}\index{circuit} est un chemin avec $u_0=u_k$.
135 \end{Def}
136
137 \begin{Ex}
138 Le digraphe ci-dessus ne contient pas de circuit.
139 \end{Ex}
140
141 \begin{Rem}
142 Les notions de longueur, de chemins et de circuits sont analogues à celles des chaînes et des cycles pour le cas non orienté.
143 \end{Rem}
144
145
146 \section{Digraphe fortement connexe}
147
148 \subsection{Définitions}
149
150 \subsubsection{Connexité forte}
151
152 \begin{Def}[Digraphe fortement connexe]
153 Un digraphe est \emph{fortement connexe}\index{digraphe!fortement connexe}, si toute paire ordonnée ($a$, $b$) de sommets distincts du graphe est reliée par au moins un chemin.
154 \end{Def}
155
156
157
158 \begin{Rem}
159 En d'autres termes, tout sommet est atteignable depuis tous les autres sommets par au moins un chemin.
160 \end{Rem}
161
162
163
164 \subsubsection{Composantes connexes}
165
166 \begin{Def}[Composante fortement connexe]
167 On appelle \emph{composante fortement connexe}\index{composante fortement connexe} tout sous-graphe induit maximal fortement connexe (maximal signifie qu'il n'y a pas de sous-graphe induit connexe plus grand contenant les sommets de la composante).
168 \end{Def}
169
170 \begin{Exo}
171 Les graphes ci-dessous sont-il fortement connexes? Si non, donnez leurs composantes fortement connexes.
172 \begin{center}
173 \includegraphics[scale=0.7]{graphes/digraphe2.eps}
174 \includegraphics[scale=0.7]{graphes/digraphe3.eps}
175 \end{center}
176 \end{Exo}
177
178
179 \begin{Exo}
180 Proposez un algorithme qui détermine si un graphe est fortement connexe ou non.
181 \end{Exo}
182 \textit{Indication :} utilisez un système de marquage des sommets.
183
184
185 \subsection{Circuits eulériens}
186
187
188 \begin{Th}
189 Dans le cas des graphes orientés, il y a équivalence entre :
190 \begin{itemize}
191  \item posséder un circuit eulérien,
192  \item être fortement connexe, tel que $d_+(s) = d_-(s)$ pour tout sommet $s$.
193 \end{itemize}
194 \end{Th}
195
196 \section{Matrice et listes d'adjacences}
197
198
199 \subsection{Matrices d'incidence}
200
201 \begin{Def}[Matrice d'incidence entrante et sortante]
202 On suppose que les arêtes et les sommets ont été numérotés.
203
204 On appelle \emph{matrice d'incidence sortante $J^+$}\index{matrice d'incidence!sortante} la matrice dont l'élément $J^+(s,\varepsilon)$ vaut
205 \begin{itemize}
206 \item 1 si le sommet $s$ est le début de l'arête ${\varepsilon}$,
207 \item 0 sinon.
208 \end{itemize}
209
210 On appelle de même \emph{matrice d'incidence entrante $J^-$}\index{matrice d'incidence!entrante} la matrice dont l'élément $(s,\varepsilon )$ vaut :
211 \begin{itemize}
212 \item 1 si le sommet $s$ est la fin de l'arête $\varepsilon$,
213 \item 0 sinon.
214 \end{itemize}
215 \end{Def}
216
217
218 \begin{Def}
219 On suppose à nouveau que les arêtes et les sommets du graphe orienté considéré ont été numérotées, et on appelle alors \emph{matrice d'incidence J} de ce graphe la matrice dont l'élément $(s,\varepsilon)$ vaut :
220  \begin{itemize}
221   \item 2 si $s$ est une extrémité de $\varepsilon$, quand $\varepsilon$ est une boucle,
222  \item 1 si $s$ est une extrémité de $\varepsilon$, quand $\varepsilon$ n'est pas une boucle,
223  \item 0 sinon.
224  \end{itemize}
225 \end{Def}
226
227 \begin{Rem}
228 $J$ est la matrice d'incidence du graphe non orienté sous-jacent, obtenu en remplaçant les arcs (flèches) par des arêtes.
229 \end{Rem}
230
231
232 \begin{Exo}
233 Reprendre les graphes orientés dessinés dans ce chapitre, et trouver à chaque fois $J^+$, $J^-$ et $J$.
234 \end{Exo}
235
236 \subsubsection{Résultats}
237
238 On peut relier $d^+(s)$ (resp. $d^-(s)$) au nombre de 1 apparaissant dans $J^+$ (resp. $J^-$), comme suit.
239
240 \begin{Th}
241 Soient $(s_1, \hdots, s_n)$ les sommets d'un graphe orienté. Alors
242 \begin{enumerate}
243  \item $\left( \begin{array}{c}
244                 d^+(s_1) \\
245                 \vdots \\
246                 d^+(s_n) \\
247                \end{array} \right) = J^+ \left( \begin{array}{c}
248                 1 \\
249                 \vdots \\
250                 1 \\
251                \end{array} \right)
252 $ et $\left( \begin{array}{c}
253                 d^-(s_1) \\
254                 \vdots \\
255                 d^-(s_n) \\
256                \end{array} \right) = J^- \left( \begin{array}{c}
257                 1 \\
258                 \vdots \\
259                 1 \\
260                \end{array} \right)
261 $
262 \item $J^{+}J^{-t} = \left( \begin{array}{ccc} d^+(s_1) & & 0 \\ & \ddots & \\ 0 & & d^+(s_n) \end{array}
263  \right)$
264 \item $J^{-}J^{+t} = \left( \begin{array}{ccc} d^-(s_1) & & 0 \\ & \ddots & \\ 0 & & d^-(s_n) \end{array}
265  \right)$
266 \end{enumerate}
267
268 \end{Th}
269
270 \begin{Exo}
271 Vérifier ces résultats avec les matrices d'incidences calculées dans l'exercice précédent.
272 \end{Exo}
273
274
275 \subsection{Matrice d'adjacence}
276
277 \subsubsection{Définition}
278 \begin{Def}[Matrice d'adjacence]
279 On peut représenter un digraphe par une \emph{matrice d'adjacence}\index{matrice!d'adjacence} :
280 \begin{itemize}
281 \item Les lignes et les colonnes représentent les sommets du graphe.
282 \item Un 1 à la position ($i$,$j$) signifie qu'un arc part de $i$ pour rejoindre $j$.
283 \end{itemize}
284 \end{Def}
285
286
287
288
289 \subsubsection{Exemple}
290
291 Voici un digraphe et sa matrice d'adjacence :
292
293 \begin{center}
294 \includegraphics[scale=0.7]{graphes/digraphe123.eps}
295 \end{center}
296
297 $$M = \left(\begin{array}{cccccc}
298 0 & 1 & 0 & 1 & 0 & 1 \\
299 0 & 0 & 0 & 1 & 1 & 0 \\
300 0 & 0 & 0 & 1 & 0 & 0 \\
301 0 & 0 & 0 & 0 & 1 & 0 \\
302 0 & 0 & 0 & 0 & 0 & 0 \\
303 0 & 1 & 0 & 0 & 0 & 0 \\
304 \end{array}\right)
305 $$
306
307
308
309 \begin{Exo}
310 Décrivez le digraphe G ci-contre par une matrice d'adjacences.
311 \begin{center}
312 \includegraphics[scale=0.7]{graphes/digraphe4.eps}
313 \end{center}
314 \end{Exo}
315
316
317 \begin{Rem}
318 Se donner un graphe orienté revient à se donner sa matrice d'adjacence.
319 \end{Rem}
320
321 \subsubsection{Propriétés}
322
323 \begin{Th}
324 La matrice d'adjacence à plusieurs caractéristiques :
325 \begin{itemize}
326 \item Elle est carrée : il y a autant de lignes que de colonnes.
327 \item Il n'y a que des zéros sur la diagonale. Un 1 sur la diagonale indiquerait une boucle.
328 \item Contrairement au cas non orienté, elle n'est pas symétrique.
329 \end{itemize}
330 \end{Th}
331
332
333
334 \begin{Th}[Nombre d'arcs de longueur k]
335 $A^k(s,t)$, élément à la position $(s,t)$ de la puissance k\textsuperscript{ième} de A, est aussi le nombre d'arcs de longueur $k$ qui mènent de $s$ à $t$.
336 \end{Th}
337
338
339 \begin{Th}
340  Soient $(s_1, \hdots, s_n)$ les sommets d'un graphe orienté. Alors
341 $$\left( \begin{array}{c} d^+(s_1)\\ \vdots \\ d^+(s_n) \end{array} \right) = A \left(\begin{array}{c}
342                 1 \\
343                 \vdots \\
344                 1 \\
345                \end{array} \right) \textrm{ et } \left( \begin{array}{c} d^-(s_1)\\ \vdots \\ d^-(s_n) \end{array} \right) = A^t \left( \begin{array}{c}
346                 1 \\
347                 \vdots \\
348                 1 \\
349                \end{array} \right) 
350 $$ 
351 \end{Th}
352
353
354
355
356
357 \begin{Exo}
358 Vérifier les propriétés ci-dessus sur la matrice d'adjacence calculée dans l'exercice précédent. On déterminera les chemins de longueur 2.
359 \end{Exo}
360
361
362
363 \begin{Th}[Lien entre les matrices d'adjacence]
364 Soit A la matrice d'adjacence d'un graphe orienté, et B la matrice d'adjacence du graphe non orienté qui lui est associé. Alors
365 $$\boxed{B = A+A^t}$$
366 \end{Th}
367
368
369 \begin{Exo}
370 Vérifier la dernière propriété sur le digraphe ci-dessous
371 \begin{center}
372 \includegraphics[scale=0.7]{graphes/digraphe4.eps}
373 \end{center}
374 \end{Exo}
375
376 \subsection{Lien entre matrices d'adjacences et d'incidences}
377
378
379 Les remarques précedentes permettent de conclure que se donner ($J^+,J^-$) ou $A$, \og c'est pareil \fg{}. Plus précisément, on a
380 $$\boxed{J^{+}J^{-t}  = A}$$
381
382
383
384 \begin{Exo}
385 On pose $$A=\left( \begin{array}{cccc} 0 & 1 & 0 & 1 \\ 1 & 0 & 1 & 0 \\ 0 & 1 & 0 & 1 \\ 1 & 0 & 1 & 0 \\ \end{array}\right)$$
386 \begin{enumerate}
387 \item Dessinez le graphe orienté ayant $A$ pour matrice d'adjacence.
388 \item Déterminez ses matrices d'incidences.
389 \item Vérifiez, sur cet exemple, les formules précédentes.
390 \end{enumerate}
391 \end{Exo}
392
393
394 \begin{Exo}
395 A partir du graphe orienté $G$, on fabrique un graphe orienté $H$ en retournant le sens de toutes les flèches.
396 \begin{enumerate}
397 \item Comment sont liées les matrices d'incidence de $G$ et de $H$ ?
398 \item Comment sont liées leurs matrices d'adjacence ?
399 \end{enumerate}
400 \end{Exo}
401
402 \noindent\textit{\underline{Réponse :}} La matrice $J^+$ de $G$ est la matrice $J^-$ de $H$, et réciproquement. Leurs matrices d'adjacence sont transposées l'une de l'autre.
403
404
405
406 \begin{Th}
407 Soient $s_1, s_2, \hdots, s_n$ les sommets d'un graphe orienté. Alors
408 $$\left( \begin{array}{c} d(s_1) \\ \vdots \\ d(s_n) \end{array} \right) = J \left( \begin{array}{c}
409                 1 \\
410                 \vdots \\
411                 1 \\
412                \end{array} \right)$$
413 \end{Th}
414
415 \begin{Th}[relation entre $J, J^+$ et $J^-$]
416 On note $J^+$ et $J^-$ les matrices d'incidences d'un graphe orienté, et J la matrice d'incidence du graphe non orienté qui lui est associé. Alors
417 $$\boxed{J = J^+ + J^-}$$
418 \end{Th}
419
420
421 \begin{Exo}
422 Vérifier ces propriété sur le digraphe ci-dessous
423 \begin{center}
424 \includegraphics[scale=0.7]{graphes/digraphe4.eps}
425 \end{center}
426 \end{Exo}
427
428
429 \subsection{Listes d'adjacence}
430
431
432 On peut encore représenter un digraphe à l'aide de listes d'adjacences : en donnant pour chacun de ses sommets la liste des sommets qu'on peut atteindre directement en suivant un arc (dans le sens de la flèche).
433
434
435 \begin{Ex}
436 Voici les listes d'adjacences du digraphe G:
437 \begin{center}
438 \includegraphics[scale=0.7]{graphes/digraphe11.eps}
439 \end{center}
440 \begin{tabular}{ccl}
441 1 & : & 2, 4, 6\\
442 2 & : & 4, 5\\
443 3 & : & 4\\
444 4 & : & 5\\
445 5 & : & -\\
446 6 & : & 2\\
447 \end{tabular}
448 \end{Ex}
449
450
451 \begin{Exo}
452 Décrivez le digraphe $G$ de l'exercice précédent par des listes d'adjacences.
453 \end{Exo}
454
455
456
457 \section{Digraphes sans circuits}
458
459 \subsection{Théorème}
460
461 \begin{Th}
462 Le digraphe $G = (V, E)$ est sans circuit si et seulement si on peut attribuer un nombre $r(v)$, appelé le \emph{rang}\index{rand!d'un sommet} de $v$, à chaque sommet $v$ de manière que pour tout arc $(u, v)$ de $G$ on ait $r(u) < r(v)$.
463 \end{Th}
464
465
466 \begin{Pre}
467 Si $G$ comporte un circuit $C$, il n'est pas possible de trouver de tels nombres $r(i)$ car, autrement, considérant $r(j) = max \{r(i) | i \in C\}$ et l'arc $(j, k) \in C$ on aurait $r(j) \leqslant r(k)$ en contradiction avec la définition de $r( )$.
468
469
470 Réciproquement, si $G$ n'a pas de circuits, il existe au moins un sommet sans prédécesseurs dans $G$ (sans cela, en remontant successivement d'un sommet à un prédécesseur, on finirait par fermer un circuit). Ainsi, on peut attribuer séquentiellement des valeurs $r( )$ aux sommets du graphe à l'aide de l'algorithme qui suit, ce qui conclura la démonstration.
471 \end{Pre}
472
473
474
475 \subsection{Algorithme de calcul du rang}
476
477 L'algorithme suivant permet de calculer $r(v)$ pour tout sommet v du digraphe. Il permet donc de savoir si un digraphe possède ou non un circuit.
478
479 Au début,
480 \begin{itemize}
481 \item r = 0, 
482 \item X est l'ensemble des sommets du digraphe.
483 \item R est l’ensemble des sommets de X sans prédécesseurs dans X.
484 \end{itemize}
485
486 Tant que X n’est pas vide, faire
487 \begin{itemize}
488 \item r(v) := r pour tout sommet v de R,
489 \item Enlever de X les sommets contenus dans R,
490 \item Recalculer R comme ci-dessus,
491 \item Incrémenter r.
492 \end{itemize}
493
494 \subsection{Exercice}
495
496 \begin{Exo}
497 Attribuez un rang aux sommets du digraphe ci-dessous en utilisant l'algorithme de calcul du rang :
498 \begin{center}
499 \includegraphics[scale=0.7]{graphes/rang.eps}
500 \end{center}
501 \end{Exo}
502
503
504
505
506
507
508 \gsaut
509 \centerline{\x{Fin du Chapitre}}