Devoir informatique pour l’unité d’enseignement :
Traité par :
GUNES Aysel (Numéro étudiant : 10200610)
RAMOS Pierre (Numéro étudiant: 10002201)
Etudiants en Licence informatique troisième année
Professeurs d’informatique en Théorie des Graphes :
Cours magistraux : M LETOCART Lucas
Travaux dirigés : Mme TOULOUSE Sophie
(28/02/2005)
Sommaire
Introduction
I/ Présentation des algorithmes
1) Algorithme DFS
2) Algorithme de Kosaraju-Sharir
II/ Implémentation et commentaires du programme
III/ Résultats théoriques
1) Résultat théorique sur un graphe à 4 nœuds
2) Résultat théorique sur un graphe à 6 nœuds
3) Résultat théorique sur un graphe à 8 nœuds
4) Résultat théorique sur un graphe à 10 nœuds
Conclusion
Introduction
Dans le cadre de notre cursus en informatique, et plus précisément dans l’unité d’enseignement
Théorie des Graphes, nous considérons le problème de la recherche des composantes fortement connexes
d’un graphe orienté. Pour résoudre ce problème, nous allons utiliser l’algorithme de Kosaraju-Sharir vu
en cours et en travaux dirigés.
Ainsi, nous programmerons d’une part l’algorithme DFS (Deep First Search) et d’autre part,
l’algorithme de Kosaraju-Sharir. Le langage utilisé sera le langage C. Aussi, nous effectuerons une
analyse de complexité de l’implémentation faite.
Par conséquent, dans une première partie, nous présenterons les algorithmes DFS et Kosaraju-
Sharir. Dans une deuxième partie nous donnerons l’implémentation du programme. Et, dans une
dernière partie, nous donnerons les résultats théoriques obtenus sur quatre graphes différents.
I/ Présentation des algorithmes
Dans cette parie, nous présenterons les algorithmes DFS (Direct First Search) et Kosaraju-Sharir.
1) Algorithme DFS
Détermination des composantes fortement connexes.
G = (X, U)
Voici ci-dessous l’algorithme DFS (Deep First Search) tel que donné en cours.
Explication des notations :
G : le graphe
k, f : des entiers
i : le sommet traité
n(i) : le nombre de successeurs du sommet i
d(i) : le degré du sommet i
num(i) : la numérotation du sommet i
prefixe(i) : la numérotation préfixe du sommet i
explore(G, i) : appel à la procédure explore prenant en paramètre le graphe G et le
sommet i
DFS (graphe G)
k 0
f 1
Pour i = 0 à n Faire n(i) d(i)
Pour i = 0 à n Faire num(i) 0
Pour i = 0 à n Faire
Si num(i) = 0 Alors
k k +1
num(i) k
prefixe(i) k
explore(G, i)
FinSi
FinPour
FinDFS
Voici ci-dessous l’algorithme de la procéure explore tel que donné en cours.
Explication des notations :
G : le graphe
i : le sommet traité
j : représente le n(i)ème sommet successeur de i
k, f : des entiers
n(i) : le nombre de successeurs du sommet i
num(i) : la numérotation du sommet i
prefixe(i) : la numérotation préfixe du sommet i
suffixe(i) : la numérotation suffixe du sommet i
explore(G, i) : appel à la procédure explore prenant en paramètre le graphe G et le
sommet i
Procédure explore(graphe G, sommet i)
Tantque n(i) > 0 Faire
Sélectionner j le n(i)ème successeur de i
n(i) n(i) 1
Si num(i) = 0 Alors
k k + 1
num(j) k
prefixe(j) k
explore(G, j)
FinSi
FinTantque
suffixe(i) f
f f + 1
Finexplore
2) Algorithme de Kosaraju-Sharir
Détermination des composantes fortement connexes.
G = (X, U)
1) Appilication de DFS(G) en numérotant les sommets dans l’ordre suffixe
2) Construction du graphe G’ = (X, U’) obtenu en inversant le sens des arcs de G.
3) Application de DFS(G’) en démarrant par le sommet de plus grand numéro suffixe et
itération du processus à partir du sommet non marqué de plus grand numéro suffixe.
1 / 21 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !