Académique Documents
Professionnel Documents
Culture Documents
ALGORITHMES DE CONNEXITÉS
Algorithmes de connexités ....................................................................................... 2
Introduction
Introduction ............................................................................................................. 2
Détermination des Composantes Connexes d’un Graphe ......................................... 3 La vérification de la connexité d’un graphe est un des premiers problèmes
de la théorie des graphes.
Principe................................................................................................................ 3
Exemple ............................................................................................................... 3
Par exemple, on souhaite savoir si deux points (sommets, ordinateurs) sont
Algorithme ........................................................................................................... 4
reliés entre eux sans vouloir connaître comment.
Détermination des composantes fortement connexes ............................................... 6
Rappel : Transposée (=inverse) d’un graphe ...................................................... 6 Exprimé en termes de graphes non orientés, ce problème consiste à
Principe................................................................................................................ 6 déterminer des composantes connexes : « tous les sommets d’une même
Exemple .................................................................................................................. 8
composante connexe sont mutuellement accessibles et deux sommets de
Définition : chemin Hamiltonien ...................................................................... 10 deux composantes connexes distinctes ne peuvent être joints par aucune
Remarque........................................................................................................... 10
chaîne ».
Algorithme de Détermination des Composantes Fortement Connexe............... 11
Suite de l’exemple .............................................................................................. 13
Parcours en Profondeur du Transpose de G ..................................................... 15 Dans le cas de graphes orientés, on a recours au concept de forte
Détermination des CFC par marquage ................................................................... 16 connexité.
1 2
@Brahim DERDOURI CM-Algos Connexités -GOC-L3-Info @Brahim DERDOURI CM-Algos Connexités -GOC-L3-Info
Détermination des Composantes Connexes d’un Graphe Algorithme
Principe Partant d’un sommet du graphe, on va numéroter les sommets dans l’ordre
d’une exploration en profondeur (ou en largeur), c’est à dire que l’on
En appliquant d’une manière répétitive un Parcours en Profondeur ou un
descendra d’abord dans le graphe le plus loin possible sans former de cycle
parcours en Largeur sur tous les sommets non encore visités.
puis on remontera jusqu’à la dernière bifurcation laissée de côté et ainsi de
Il est clair qu’une composante connexe est constituée du sous graphe dont suite jusqu’au retour au sommet de départ.
les sommets sont visités par un seul appel à Parcours en Profondeur ou
L’ensemble des sommets ainsi rencontrés forme la première composante
Parcours en Largeur.
connexe.
Autrement dit,
Si tous les sommets du graphe ont été rencontrés, le graphe est connexe.
Si l’ensemble des sommets du graphe sont explorés, alors le graphe est
Sinon, on recommence l’exploration précédente à partir d’un sommet non
connexe.
encore rencontré, d’où une seconde composante connexe, etc.
Si non, on recommence l’exploration à partir d’un sommet non encore visité,
d’où une seconde composante connexe, etc…
Exemple
2 4 5
1
7
3
6
Ce graphe est constitué de deux composantes connexes.
3 4
@Brahim DERDOURI CM-Algos Connexités -GOC-L3-Info @Brahim DERDOURI CM-Algos Connexités -GOC-L3-Info
// Composantes connexes Détermination des composantes fortement connexes
Début
Deux sommets distincts appartiennent à la même composante fortement
//Initialisation
connexe si et seulement s’ils appartiennent à un même circuit.
n nbSom(g)
Méthode1 : Basée sur le transposé du graphe
pour chaque sommet s variant de 1 à n faire
visite[s] faux Rappel : Transposée (=inverse) d’un graphe
finPour
Soit G=(S, A) un graphe orienté.
s 1
nbSomVisite 0 Le transposé de G est obtenu en inversant le sens d’orientation des arcs.
//Traitement t
G=G-1=(S, tA) où tA={(s, t) / (t, s) ∈ A}
parcoursLargeur((s, visite, g, nbSomVisite, …..) //A modifier On effectue un Parcours en profondeur sur G, en construisant une liste L
des sommets en ordre suffixe (traitement des enfants avant le père).
Restituer le sous graphe visité par un Parcours Profondeur
ou un Parcours Largeur ( une composante connexe) On effectue ensuite un parcours en profondeur sur tG à partir du dernier
sommet de la liste L (c’est à dire le sommet ayant la numérotation la plus
fsi
élevé dans L).
s somSuivant(s, n, Visite)
Après le parcours en profondeur sur tG deux cas peuvent se présenter :
finTq
♦ Tous les sommets du graphe ont été atteints : dans ce cas, le graphe G est
Fin fortement connexe (on obtient une seule composante fortement connexe)
5 6
@Brahim DERDOURI CM-Algos Connexités -GOC-L3-Info @Brahim DERDOURI CM-Algos Connexités -GOC-L3-Info
♦ Certains sommets n’ont pas été visités. On recommence l’exécution des Exemple
parcours en profondeur de tG à partir du dernier sommet non marqué de
Le graphe G :
la liste L et ainsi de suite.
Les sous graphes de G engendrés par les sommets des arborescences ainsi 1 2 3
8
obtenue lors du parcours en profondeur du tG, constituent les
composantes fortement connexes de G.
7 6 5 4
Le transposé de G est :
1 2 3
8
7 6 5 4
2 1
4 6 8
3 5 7
L=[ 5 7 6 8 1 3 4 2]
7 8
@Brahim DERDOURI CM-Algos Connexités -GOC-L3-Info @Brahim DERDOURI CM-Algos Connexités -GOC-L3-Info
On effectue un parcours en profondeur de tG en commençant par le Le graphe réduit est donc :
sommet 2 car c’est le sommet de numéro suffixe le plus élevé dans la liste
L. 8
1 2 3
2 3 4
CFC1 = { 2, 3, 4} 7 6 5 4
CFC2 = { 1, 5, 6, 8} Un chemin hamiltonien « CH » est un chemin qui passe par tous les
sommets du graphe une seule fois.
Remarque : tous les sommets de la liste L ne sont pas marqués.
CH(G) = CH( CFC1 ) + CH( CFC2 ) + CH( CFC2 )
Donc on re-parcours en profondeur le tG à partir du dernier sommet non
marqués dans L (c’est à dire le sommet 7) Remarque
PP(tG ) à partir du sommet 7 : Le graphe n’étant pas fortement connexe. Donc il n’admet pas de circuit
hamiltonien.
CFC3 = { 7 }
9 10
@Brahim DERDOURI CM-Algos Connexités -GOC-L3-Info @Brahim DERDOURI CM-Algos Connexités -GOC-L3-Info
Algorithme de Détermination des Composantes Fortement Connexe /* Parcours en profondeur de tG */
On suppose que les sommets du graphe sont numérotés de 1 à n. pour s variant de 1 à n faire
L’algorithme qui suit, associe à chaque sommet du graphe le numéro de la visite[s] faux
C.F.C à laquelle il appartient.
fpour
CFC = est un tableau indicé par le numéro de sommets de G
CFC[i] = numéro de la CFC du sommet i nbCFC 0
nbCFC = nombre de CFC de G
procédure ComposanteFortementConnexe(G, CFC, nbCFC) nbSomVisite 0
Début sn
/* initialisation */ tantque (nbsomVisite <= n) faire
n nbSom(g) si non visite[L[s]] alors
Pour s variant de 1 à n faire
nbCFC nbCFC + 1
Visite[s] faux
Fpour ParcoursProfondeurTransposeG(L[s], visite, G, CFC, nbCFC,
NbSomVisite 0 nbSomVisite)
/*Construction de la liste L des sommets en
ordre suffixe de G*/ finsi
11 12
@Brahim DERDOURI CM-Algos Connexités -GOC-L3-Info @Brahim DERDOURI CM-Algos Connexités -GOC-L3-Info
Suite de l’exemple Parcours en Profondeur en ordre Suffixe
Finsi
CFC1 = {2, 3, 4} CFC2 = { 1, 5, 6, 8} CFC3 = { 7 }
Finpour
L[nbSomVisite] s
Fin
13 14
@Brahim DERDOURI CM-Algos Connexités -GOC-L3-Info @Brahim DERDOURI CM-Algos Connexités -GOC-L3-Info
Parcours en Profondeur du Transpose de G Détermination des CFC par marquage
Le parcours en profondeur de tG s’effectue à l’aide des prédécesseurs Marquage + = ensemble des sommets accessibles depuis s (s inclus)
des sommets de G Marquage - = ensemble des sommets depuis lesquels s est accessible (s
NumCFC, nbSomVisite)
Début 7 6 5 4
Visite[s] vrai +- +- +- -
CFC[s] NumCFC
CFC1={1, 5, 6, 8}
nbSomVisite nbSomVisite + 1
Pour chaque t prédécesseur de s dans G faire
+- +-
Si non visite[t] alors 3
2
parcoursProfondeurTransposeG (t, visite, G, CFC,
4
NumCFC, nbSomVisite) +- CFC2={2, 3, 4}
FinSi
Finpour
+-
FIN 7
CFC3={7}
15 16
@Brahim DERDOURI CM-Algos Connexités -GOC-L3-Info @Brahim DERDOURI CM-Algos Connexités -GOC-L3-Info
Algorithme de Composante Fortement connexe par Marquage /*Calcul de CFC */
Si non vide(D) et non vide (A) alors
La composante fortement connexe associé à un sommet s peut être
CFC[s] A ∩ D
déterminée par le calcul de l’intersection de D(s) et A(s) Sinon
/* Calcul de D */
D {s} ∪ Γ(s) /* Γ(s) = Ens des successeurs directs */
Ns D \ {s} /* Ens des nouveaux sommets atteints */
Tantque Non vide(Ns) et D≠S(G) faire
T ← ∪ Γ(t )
t ∈ Ns
Ns T \ ( T ∩ D )
D D ∪ Ns
Fintantque
/* Calcul de A */
A {s} ∪ Γ-1(s) /* Γ-1(s) = Ens des Prédécesseurs directs */
Ns A \ {s} /* Ens des nouveaux sommets atteints */
Tantque Non vide(Ns) et A≠S(G) faire
Γ
−1
T← ∪ (t )
t ∈ Ns
Ns T \ ( T ∩ A )
A A ∪ Ns
Fintantque
17 18
@Brahim DERDOURI CM-Algos Connexités -GOC-L3-Info @Brahim DERDOURI CM-Algos Connexités -GOC-L3-Info
Exemple Exemple 2
+- +- - -
8 1 2 3
1
2 3
7 6 5 4
5 4 +- +- +- -
D {1] U Succ(1)={1, 6, 7, 8}
8 Ns {6, 7, 8}
7
Iter1
6
T succ(6)Usucc(7)Usucc(8)
Sommet s 1 2 3 4 5 6 7 8 T {5, 7, 6}
Γ(s) {2, 3} {2, 3, 4} {2, 4} {3, 6, 8} {7} {} {4, 5, 6} {} Ns {5}
D(2)={2, 3, 4, 6, 8}
Γ -1(3)={1, 2, 4}
19 20
@Brahim DERDOURI CM-Algos Connexités -GOC-L3-Info
+- +- - -
8 1 2 3
7 6 5 4
+- +- +- -
A {1} U pred(1)={1, 2, 5}
Ns {2, 5}
Iter1
T pred(2) U pred(5)
T {3} U {4, 6} ={3, 4, 6}
Ns {3, 4, 6}
A {1, 2, 3, 4, 5, 6}
Iter2
T pred(3) U pred(4) U pred(6)
T {4}U{2}U{1, 8}={1, 2, 4, 8}
Ns {8}
A {1, 2, 3, 4, 5, 6, 8}
Iter 3
T pred(8)={1}
Ns {}
A {1, 2, 3, 4, 5, 6, 8}
Fin d’itérations
CFC D Inter A
CFC {1, 5, 6, 8}
21