Académique Documents
Professionnel Documents
Culture Documents
Graphes
Graphes 395
Plan
1. Définitions
3. Parcours de graphes
5. Arbre de couverture
Graphes 396
Graphes
Graphes 397
Terminologie
Graphes 398
Terminologie
Graphe dirigé :
Une arête (v1 , v2 ) possède l’origine v1 et la destination v2 . Cette
arête est sortante pour v1 et entrante pour v2
Le degré entrant (in-degree) et le degré sortant (out-degree) d’un
nœud v sont respectivement égaux aux nombres d’arêtes entrantes
et d’arêtes sortantes de v
Un graphe est acyclique s’il n’y a aucun cycle, c’est-à-dire s’il n’est
pas possible de suivre les arêtes du graphes à partir d’un sommet x
et de revenir à ce même sommet x
Graphes 399
Type de graphes
8v 2 V : (v , v ) 2
/E
Un graphe est pondéré si les arêtes sont annotées par des poids
I Exemple : réseau entre villes avec comme poids la distance entre les
villes, réseau internet avec comme poids la bande passante entre
routeurs, etc.
Graphes 400
Représentation I : listes d’adjacences
Graphes 401
1 2 5 1
1 2 2 1 5 3 4 2
Exemple 3 2 4 3
590 Chapter 22 3 Elementary Graph
4 Algorithms
2 5 3 4
5 4 5 4 1 2 5
Graphe non dirigé 1 2 3
(a) 1 2 5 (b) 1 0 1 0
1 2 2 1 5 3 4 2 1 0 1
3 2 4 3 0 1 0
Figure322.1 Two representations of an undirected graph. (a) An undirected gra
4 2 5 3 4 0 1 1
and 7 edges. (b) An adjacency-list representation of G. (c) The adjacency-m
5 4 5 4 1 2 5 1 1 0
of G.
(a) (b) (c
Graphe dirigé 1
Figure 22.1 Two representations of1an undirected
2 graph.4(a) An undirected graph G1with0
and 7 edges. (b) An adjacency-list 2representation
5 of G. (c) The adjacency-matrix2repr0
of G.
1 2 3 3 6 5 3 0
4 2 4 0
1 2 3 4
5 4 5 0
1 2 4 1 0 1 0 1
4 5 6 2 6 5 6 2 0 0 60 00
1 2 3 3 6
(a) (b)5 3 0 0 0 0
4 2 4 0 1 0 0
5 4 5 0 0 0 1
Graphes
4 5Figure 22.2
6 6 6 6 0 graph
Two representations of a directed graph. (a) A directed 0 402
0G 0
Complexités
Graphes 403
Réprésentation II : matrice d’adjacence
Graphes 404
1 2 3 4 5
1
Exemple 2
590 5 Chapter 22 1 2 15 0 0 1
Elementary Graph0 Algorithms
1
Graph Algorithms
2 1 1 5 23 4 2 12 1 05 1 1 3 1 4
Graphe non dirigé
3 2 4 3 23 0 14 0 1 0
3
4 2 5 3 4 21
4 02 135 14 0 53 1
52 45 5 1 42 5 1 1 40 5 211 101 005 1 12 0
1 2 2 1 5 3 4
1 5 3 (a)
(b) 4 2 1 0 1(b) (c)14 1
3 2
2 4 3 3 0 1 0 1 0
4 2 5 3
2 5 3 Figure 22.1 Two representations
4 0 of1an undirected
1 0 1 graph. (a) An undirected
wo representations of an undirected graph. (a) An undirected graph G with 5 vertices 2
5 4 5 4 1
4 1 2 and 7 edges. (b) An adjacency-list
5 1 1representation
0 1 0 of G. (c) The adjacenc
b) An adjacency-list representation of G. (c) The adjacency-matrix representation
of G.
(a) (b)
(b) (c)
Graphe dirigé
1 2 of
Figure 22.1 Two representations 3 an4 undirected
5 6 graph. (a) An und
1 2 4 1
entations of an1undirected 4 (a)
2 graph.
and An undirected
7 edges. graph
1 0G with
1 0 5representation
(b) An adjacency-list vertices
1 0 0 of G. (c) The 2a
2 5
acency-list representation
2 5 of G. (c) The adjacency-matrix
of G. 2 0 0representation
0 0 1 0
1 2 3 3 6 5 3
3 6 5 3 40 0 02 0 1 1 4
4 2 4 50 1 04 0 0 0 5
5 4 4 5 6 5 0 0 0
1 62 13 46 52 61 0 0 6
4
1 62 6 4 1 6 1
0 0 00 01 00 0 0 1
(a) 2 (b) 5
Graphes 405
Complexités
Graphes 406
Représentations
Listes d’adjacence :
I Complexité en espace optimal
I Pas appropriée pour des graphes denses1 et des algorithmes qui ont
besoin d’accéder aux arêtes
I Préférable pour des graphes creux2 ou de degré faible
Matrice d’adjacence :
I Complexité en espace très mauvaise pour des graphes creux
I Appropriée pour des algorithmes qui désirent accéder aléatoirement
aux arêtes
I Préférable pour des graphes denses
1
|E | ⇡ |V |2
2
|E | ⌧ |V |2
Graphes 407
Plan
1. Définitions
3. Parcours de graphes
5. Arbre de couverture
Graphes 408
Parcours de graphes
Graphes 409
Parcours en largeur d’abord (breadth-first search)
Graphes 410
Exemple directed graph [undirected example in book] .
0 3
s 1 f
c
1
a g 2
e 2 i
3
b h
3 3
Un parcours en largeur à partir de s : s-a-c-e-g -b-h-i-f
Can show that Q consists of vertices with d valu
Pour l’implémentation :
On doitiretenir
i les
i sommets C 1 deimanière
: : : idéjài visités C 1 à:éviter
: : ideC 1
boucler infiniment
Only
On doit!retenir 1 or 2 values.
les sommets visités dont on n’a pas encore visité les
voisins
! If 2, differ by 1 and all smallest are first.
Graphes 411
Parcours en largeur d’abord : implémentation
BFS(G , s)
v .d est la distance de v à s
1 for each vertex u 2 G .V \ {s} I si un sommet v a été visité,
2 u.d = 1
v .d est fini
3 s.d = 0 I on peut remplacer d par un
4 Q =”create empty Queue”
drapeau binaire
5 Enqueue(Q, s)
6 while not Queue-Empty(Q)
7 u = Dequeue(Q) Q est une file (LIFO) qui
8 for each v 2 G .Adj[u] contient les sommets visités
9 if v .d = 1 mais dont les voisins n’ont pas
10 v .d = u.d + 1
encore été visités
11 Enqueue(Q, v )
Graphes 412
Parcours en largeur d’abord : complexité
BFS(G , s)
1 for each vertex u 2 G .V \ {s} Chaque sommet est enfilé
2 u.d = 1
au plus une fois (v .d
3 s.d = 0
4 Q=; infini ! v .d fini)
5 Enqueue(Q, s) Boucle while exécutée
6 while Q 6= ; O(|V |) fois
7 u = Dequeue(Q)
Boucle interne : O(|E |)
8 for each v 2 G .Adj[u]
9 if v .d = 1 au total
10 v .d = u.d + 1 Au total : O(|V | + |E |)
11 Enqueue(Q, v )
Graphes 413
Parcours en largeur d’abord
Correction :
I L’algorithme fait bien un parcours du graphe en largeur et v .d
contient bien la distance minimale de s à v
I Ok intuitivement mais pas évident à montrer formellement. On le fera
plus loin pour l’algorithme de Dijkstra (calcul du plus court chemin)
Applications :
I Calcul des plus courtes distances d’un sommet à tous les autres
I Recherche du plus court chemin entre deux sommets
I Calcul du diamètre d’un arbre
I Tester si un graphe est biparti
I ...
Graphes 414
DFS-V ISIT .!/
Parcours enu:color
profondeur
D BLACK d’abord
Parcourstime
du D time Cen
graphe 1 profondeur :
I On u:f time
suitDimmédiatement les arêtes//incidentes
finish u au dernier sommet visité
I Au lieu de les mettre en attente dans une file
I On revient en arrière (backtrack) quand le sommet visité n’a plus de
Example
sommets adjacents
[Go through non visités
this example, adding in the d and f values as they’re computed.
colors as they change. Don’t put in the edge types yet.]
Exemple :
d f
T C
1 A12 8 B11 13C16
T T C
B F C T
2D 7 9 E10
T
T C
3F 4 5 G6 14H15
C C
On remplace la file Q
par une pile S
L’attribut visited
DFS(G , s)
marque les sommets
1 for each vertex u 2 G .V
2 u.visited = False visités
3 S =”create empty stack”
4 Push(S, s) Chaque sommet est
5 while not Stack-empty(S) empilé au plus une fois
6 u = Pop(S)
Boucle while
7 if u.visited == False
8 u.visited = True executées O(|V |) fois
9 for each v 2 G .Adj[u] Boucle interne :
10 if v .visited == False O(|E |) au total
11 Push(S, v )
Complexité :
O(|V | + |E |)
Graphes 416
Parcours en profondeur : implémentation récursive
Graphes 417
Parcourir tous les sommets d’un graphe
Graphes 418
Parcours en profondeur de tous les sommets
DFS-all(G )
DFS-Rec(G , s)
1 for each vertex u 2 G .V
1 s.visited = True
2 u.visited = False
2 for each v 2 G .Adj[s]
3 for each vertex u 2 G .V
3 if v .visited == False
4 if u.visited == False
4 DFS-Rec(G , v )
5 DFS-Rec(G , u)
Complexité : ⇥(|V | + |E |)
I DFS-Rec est appelé sur chaque sommet une et une seule fois
⇥(|V |)
Graphes 419
v V
Tdfs (n, m) =
(n + m).
Sous-graphe de liaison
count an undirected edge as two edges, one in each direction. We then get
(v) = 2m for undirected graphs, but since 2m 2 (m), this does not really
Un parcours en profondeur de tous les sommets d’un graphe construit un
rence.
ensemble d’arbres (une forêt), appelé sous-graphe de liaison, où :
S Forestsles sommets sont les sommets du graphe,
un sommet w est le fils d’un sommet v dans la forêt si
CS2
DFS starting at some vertex Algorithms
v explores and Data
the graph Structures
by building up aNote
tree 10
that CS2Bh 31 January 20
vertices that are reachable from v and all edges that are used to reach
DFS-rec(G , w ) est appelé depuis DFS-rec(G , v )
es. We call this tree a DFS tree. A complete DFS exploring the full graph
Suppose,
y the part reachable from a given vertexfor example,
v) builds up athat we explore
collection the graph in Figure 10.3 by a DFS s
of trees,
lled a DFS forest. vertex 0 that visits the vertices in the following order: 0, 2, 1, 5, 4, 3, 6. The corre
Exemple : DFS forest is shown in Figure 10.4.
0 1 0 3
2 3 2 4 6
4 5 6 1 5
Tri topologique :
I Etant donné un graphe acyclique dirigé (DAG), trouver un ordre des
sommets tel qu’il n’y ait pas d’arête d’un nœud vers un des nœuds
qui le précède dans l’ordre
I On peut montrer que c’est possible si (et seulement si) le graphe est
acyclique
Exemples d’applications :
I Trouver un ordre pour suivre un ensemble de cours qui tienne compte
des prérequis de chaque cours
I Pour suivre SDA, il faut avoir suivi Introduction à la programmation
I Résoudre les dépendances pour l’installation de logiciels
I Trouver un ordre d’installation de manière à ce que chaque logiciel
soit installé après tous ceux dont il dépend
Graphes 421
Illustration
22.4 Topological sort
Graphe
22.4 Topological sort 613
(b) socks undershorts pants shoes watch shirt belt tie jacket
(b) socks undershorts pants shoes watch shirt belt tie
17/18 11/16 12/15 13/14 9/10 1/8 6/7 2/5 3/4
17/18 11/16 12/15 13/14 9/10 1/8 6/7 2/5
Figure 22.7 (a) Professor Bumstead topologically sorts his clothing when getting dressed. Each
directed edge
Figure means(a)
.u; !/22.7 thatProfessor
garment uBumstead
must be puttopologically
on before garment hisThe
sorts !. discovery
clothing andgetting dresse
when
Graphes 422
Marquage des sommets pour le parcours en profondeur
Graphes 423
Marquage des sommets pour le parcours en profondeur
DFS-all(G ) DFS-Rec(G , s)
1 for each vertex u 2 G .V 1 s.color = Gray
2 u.color = White 2 for each v 2 G .Adj[s]
3 for each vertex u 2 G .V 3 if s.color == White
4 if u.color == White 4 DFS-Rec(G , v )
5 DFS-Rec(G , u) 5 s.color = Black
Graphes 424
Trouver un tri topologique par DFS
Preuve :
I Soit (s, v ) 2 E . On doit montrer que s v .
I Considérons le moment où DFS-rec(G , s) est appelé :
I Si v est déjà noir, alors s v par définition de
I Si v est blanc, alors v sera noir avant s par le lemme précédent. Donc
s v
I Si v est gris, s est accessible depuis v et donc il y a un cycle (puisque
(s, v ) 2 E ). Ce qui ne peut pas arriver vu que G est un DAG
Graphes 425
Tri topologique : implémentation
Top-Sort-Rec(G , s, L)
Top-Sort(G )
1 s.color = Gray
1 for each vertex u 2 G .V
2 for each v 2 G .Adj[s]
2 u.color = White
3 if s.color == White
3 L =”create empty linked list”
4 Top-Sort-Rec(G , v , L)
4 for each vertex u 2 G .V
5 elseif s.color == Grey
5 if u.color == White
6 Error ”G has a cycle”
6 Top-Sort-Rec(G , u, L)
7 s.color = Black
7 return L
8 Insert-First(L, s)
Complexité : ⇥(|V | + |E |)
Graphes 426
Illustration
22.4 Topological sort
Graphe
22.4 Topological sort 613
(b) socks undershorts pants shoes watch shirt belt tie jacket
(b) socks undershorts pants shoes watch shirt belt tie
17/18 11/16 12/15 13/14 9/10 1/8 6/7 2/5 3/4
17/18 11/16 12/15 13/14 9/10 1/8 6/7 2/5
Figure 22.7 (a) Professor Bumstead topologically sorts his clothing when getting dressed. Each
directed edge
Figure means(a)
.u; !/22.7 thatProfessor
garment uBumstead
must be puttopologically
on before garment hisThe
sorts !. discovery
clothing andgetting dresse
when
Graphes 427
Une autre solution
Approche gloutonne :
I Rechercher un sommet qui n’a pas d’arête entrante
I C’est toujours possible dans un graphe acyclique
I Ajouter ce sommet à un tri topologique du graphe dont on a retiré ce
sommet et toutes ses arêtes
I Ce graphe reste acyclique
Complexité identique à l’approche DFS : ⇥(|E | + |V |)
Graphes 428