Telechargé par Armel Hyacinthe

ALGORITHME DE TEST DE GRAPHE ACYCLIQUE ET OPTIMALITÉ DES ALGORITHMES DE KRUSKAL ET DE PRIM

publicité
REPUBLIQUE DU CAMEROUN
Paix – Travail - Patrie
*****
UNIVERSITE DE YAOUNDE I
*****
FACULTE DES SCIENCES
B.P. 812 Yaoundé
Tél : 22 23 44 96
Email :
[email protected]
*****
Département d’Informatique
REPUBLIC OF CAMEROON
Peace – Work - Fatherland
*****
UNIVERSITY OF YAOUNDÉ I
*****
FACULTY OF SCIENCES
P.O.BOX. 812 Yaoundé
Tel : 22 23 44 96
Email :
[email protected]
*****
Department of Computer Sciences
Présenté par :
Noms et Prénoms
MATRICULE
BOBDA DJIMO Armel Hyacinthe
KUETCHE TAKOUNDJOU Ange Walter
NGASSAM KATE Osée
15Y515
TCHIDJO TCHIDJO Armel Steeve
15Y503
Master 1 – Informatique
Code UE : INF4017 – Complexité et algorithmes avancés
Enseignant : Dr. MELATAGIA
ANNEE ACADEMIQUE : 2019 - 2020
DEVOIRS DE INF4017
Table des matières
LISTE DES FIGURES .................................................................................. 2
INTRODUCTION ...................................................................................... 3
DEVOIR 1 : ALGORITHME DE TEST DE GRAPHE ACYCLIQUE .................... 4
I.
RAPPELS SUR LA THEORIE DES GRAPHES............................................................................ 5
1.
Définitions......................................................................................................................... 5
2.
Algorithme de parcours en profondeur .......................................................................... 5
II.
TEST DE GRAPHE ACYCLIQUE .............................................................................................. 8
1.
Algorithme ........................................................................................................................ 8
2.
Complexité ........................................................................................................................ 8
DEVOIR 2 : OPTIMALITÉ DES ALGORITHMES DE KRUSKAL ET DE PRIM ... 9
I.
RAPPELS .............................................................................................................................. 10
Rappel 1 : Arbre recouvrant .................................................................................................. 10
Rappel 2 : ARPM..................................................................................................................... 10
Rappel 3 : Algorithmes voraces - Arbre Couvrant Minimal -Kruskal ................................... 10
Rappel 4 : Algorithmes voraces - Arbre Couvrant Minimal -Prim ....................................... 10
Rappel 5 : Algorithmes voraces - Arbre Couvrant Minimal - Optimalité ............................ 10
II.
PREUVE D’OPTIMALITÉ ...................................................................................................... 11
1.
Kruskal............................................................................................................................. 11
2.
Prim ................................................................................................................................. 12
CONCLUSION ........................................................................................ 13
Bibliographie ......................................................................................... 14
MASTER 1 – INFORMATIQUE
1
DEVOIRS DE INF4017
LISTE DES FIGURES
Figure 1 - Graphe non orienté ........................................................................................................ 5
Figure 2 - Graphe orienté ................................................................................................................ 5
Figure 3 - Algorithme de parcours en profondeur itérative .......................................................... 7
Figure 4 - Algorithme de parcours en profondeur récursif ........................................................... 7
Figure 5 - Preuve de la propriété de partition ............................................................................. 11
MASTER 1 – INFORMATIQUE
2
DEVOIRS DE INF4017
INTRODUCTION
La notion de graphe est une structure combinatoire permettant de représenter de
nombreuses situations rencontrées dans les applications faisant intervenir des
mathématiques discrètes et nécessitant une solution informatique. Toutefois, les devoirs qui
nous ont été donné se focalise sur deux aspects des graphes :


D’une part, nous allons étudier des algorithmes qui permettent de savoir si un graphe
est acyclique ou pas ;
D’autre part, nous allons parcourir une preuve d’optimalité des algorithmes de Kruskal
et de Prim.
Ce rapport est présenté dans le cadre du cours de complexité et algorithmes avancés
(INF4017) et s’adresse principalement à nos camarades inscrits en master I, Informatique à
l’université de Yaoundé I.
MASTER 1 – INFORMATIQUE
3
DEVOIRS DE INF4017
DEVOIR 1 :
ALGORITHME
DE TEST DE
GRAPHE
ACYCLIQUE
MASTER 1 – INFORMATIQUE
4
DEVOIRS DE INF4017
I. RAPPELS SUR LA THEORIE DES GRAPHES
Avant de plonger directement à la solution de notre devoir, il est judicieux d’apporter
quelques rappels sur la théorie des graphes.
1. Définitions
a. Graphe
Un graphe est une collection d’éléments mis en relation entre eux. Géométriquement, on
représente ces éléments par des points (les sommets) reliés entre eux par des arcs de courbe
(les arêtes).
Tout au long de ce rapport, nous considérons un graphe G = (S, A), où S est l’ensembles de
sommets et A l’ensemble des arêtes (ou d’arcs selon le fait que le graphe soit orienté ou pas).
On note également n est le cardinal de S et m le cardinal de A.
Figure 2 - Graphe orienté
Figure 1 - Graphe non orienté
b. Graphe acyclique
Un graphe acyclique est un graphe ne contenant aucun cycle.
Il y a deux notions différentes de graphes acycliques selon qu'on considère des graphes
orientés ou non orientés.


Dans un graphe orienté acyclique on parle d’absence de circuit. Un circuit ici est un
chemin dont l'origine et l'extrémité sont identiques.
Dans un graphe non orienté acyclique la définition de cycle est respectée. Un cycle est
donc ici une chaîne dont l'extrémité initiale coïncide avec l'extrémité finale
2. Algorithme de parcours en profondeur
L'algorithme de parcours en profondeur (ou DFS, pour Depth-First Search) est un algorithme
de parcours d'arbre, et plus généralement de parcours de graphe, qui se décrit naturellement
de manière récursive mais aussi itérative. Son application la plus simple consiste à déterminer
s'il existe un chemin d'un sommet à un autre.
MASTER 1 – INFORMATIQUE
5
DEVOIRS DE INF4017
a. Principe
Cet algorithme procède par coloriage des sommets :



Initialement, tous les sommets sont coloriés en blanc (traduisant le fait qu'ils n'ont pas
encore été "découverts").
Lorsqu'un sommet est "découvert" (autrement dit, quand on arrive pour la première
fois sur ce sommet), il est colorié en gris. Le sommet reste gris tant qu'il reste des
successeurs de ce sommet qui sont blancs (autrement dit, qui n'ont pas encore été
découverts).
Un sommet est colorié en noir lorsque tous ses successeurs sont gris ou noirs
(autrement dit, lorsqu'ils ont tous été découverts).
De façon pratique, on va utiliser une liste "d'attente au coloriage en noir" dans laquelle on va
stocker tous les sommets gris : un sommet est mis dans la liste d'attente dès qu'il est colorié
en gris. Un sommet gris dans la liste d'attente peut faire rentrer dans la liste ses successeurs
qui sont encore blancs (en les coloriant en gris).
Quand tous les successeurs d'un sommet gris de la liste d'attente sont soit gris soit noirs, il est
colorié en noir et il sort de la liste d'attente.
b. Algorithme
Le parcours en profondeur est obtenu en gérant la liste d'attente au coloriage en noir comme
une pile (LIFO = Last In First Out). Autrement dit, on considère à chaque fois le dernier sommet
gris entré dans la pile, et on introduit devant lui tous ses successeurs blancs.
Structures de données utilisées :



On utilise une pile P, pour laquelle on suppose définies les opérations init_pile(P) qui
initialise la pile P à vide, empile(P; s) qui ajoute s au sommet de la pile P, est_vide(P)
qui retourne vrai si la pile P est vide et faux sinon, sommet(P) qui retourne le sommet
s au sommet de la pile P, et depile(P; s) qui enlève s du sommet de la pile P.
On utilise un tableau П qui associe à chaque sommet le sommet qui l'a fait entrer dans
la pile, et un tableau couleur qui associe à chaque sommet sa couleur (blanc, gris ou
noir).
On va en plus mémoriser pour chaque sommet si :
o dec[si] = date de découverte de si (passage en gris)
o fin[si] = date de fin de traitement de si (passage en noir) où l'unité de temps est
une itération. La date courante est mémorisée dans la variable tps.
MASTER 1 – INFORMATIQUE
6
DEVOIRS DE INF4017
Figure 3 - Algorithme de parcours en profondeur itérative
Cet algorithme peut s'écrire récursivement sans utiliser de pile explicite. Dans ce cas, les
structures de données Π, couleur, tps, dec et fin sont des variables globales et il est nécessaire
de les initialiser auparavant, à l'exception des deux dernières.
Figure 4 - Algorithme de parcours en profondeur récursif
MASTER 1 – INFORMATIQUE
7
DEVOIRS DE INF4017
II. TEST DE GRAPHE ACYCLIQUE
1. Algorithme
Il existe plusieurs façons de tester si un graphe est cyclique ou pas. Nos premières lectures
nous ont conduit à un tri topologie sur le graphe.
Le tri topologique d'un graphe orienté sans circuit G = (S ; A) consiste à ordonner linéairement
tous ses sommets de telle sorte que si l'arc (u ; v) Є A, alors u apparaisse avant v. (Si le graphe
comporte des circuits, aucun ordre linéaire n'est possible.) Le tri topologique d'un graphe peut
être vu comme un alignement de ses sommets le long d'une ligne horizontale de telle sorte
que tous les arcs du graphe soient orientés de gauche à droite. Le graphe est acyclique dans
le cas où ce tri dans le di graphe abouti. Cependant, cette méthode ne nous donne pas
d’information sur la position du cycle dans le graphe.
La seconde méthode que nous avons explorée est celle qui exploite l’algorithme de parcours
en profondeur sous sa forme récursive.
Lors du parcours en profondeur d'un graphe orienté (respectivement non orienté), si un
successeur sj du sommet "courant" si au sommet de la pile est déjà gris, cela implique qu'il
existe un chemin (respectivement une chaîne (à moins que ce ne soit son père dans
l'arborescence)) permettant d'aller de sj vers si , et donc qu'il existe un circuit (respectivement
un cycle). Ainsi, un algorithme pour détecter les circuits (respectivement les cycles) d'un
graphe peut être obtenu en rajoutant dans l'algorithme DFSrec l'instruction

si couleur[sj] = gris alors afficher("existence d'un circuit")
(respectivement

si couleur[sj] = gris et sj ≠ Π[s0] alors affcher("existence d'un cycle"))
juste à la fin de la boucle "pour tout sj Є succ(s0) faire" (après la ligne 7).
2. Complexité
La complexité de cet algorithme de test correspond à celui du parcours en profondeur :



Les lignes 1-3 de initDFSRec et 4-7 de DFSRec requièrent un temps 𝚯(𝐧).
Les lignes 6 et 7 de DFSRec permettent de faire des appels récursifs sur les sommets
uniquement blancs et cela est exécuté |Adj[sj]| (cardinal de la liste d’adjacences du
sommet sj) fois. Comme ∑|𝐀𝐝𝐣[𝒔𝒋]| = 𝚯(𝐦) on obtient un coût total de 𝚯(𝐦)
Le temps d’exécution final est donc de 𝚯(𝐧 + 𝐦)
MASTER 1 – INFORMATIQUE
8
DEVOIRS DE INF4017
DEVOIR 2 :
OPTIMALITÉ DES
ALGORITHMES DE
KRUSKAL ET DE
PRIM
MASTER 1 – INFORMATIQUE
9
DEVOIRS DE INF4017
I. RAPPELS
Tout comme le premier devoir, nous allons d’abord commencer par faire un rappel sur les
notions nécessaires pour la bonne compréhension de notre solution.
Rappel 1 : Arbre recouvrant
Soit G = (S, A) un graphe simple. On appelle arbre recouvrant de G un graphe partiel de G qui
est un arbre.
Rappel 2 : ARPM
Soit G = (S, A, W) un graphe simple pondéré. Le problème de l'arbre recouvrant de poids
minimal (ARPM) consiste à trouver un arbre recouvrant dont la somme des arêtes soit
minimale.
Rappel 3 : Algorithmes voraces - Arbre Couvrant Minimal -Kruskal
L’algorithme se résume aux étapes suivantes :




L’algorithme maintient une forêt d’arbres
Cette arête est acceptée, si elle relit deux arbres distincts, sinon elle est rejetée
(pourrait forme un cycle)
À chaque itération, on choisit l’arête de coût minimal
L’algorithme se termine lorsqu’on a un seul arbre
Rappel 4 : Algorithmes voraces - Arbre Couvrant Minimal -Prim
L’algorithme se résume aux étapes suivantes :



On choisit un sommet s aléatoirement qu’on met dans un “nuage” et on construit
l’arbre couvrant minimal en faisant grossir le “nuage” d’un sommet à la fois.
On garde en mémoire à chaque sommet v, une étiquette d(v) qui ici est égale au poids
minimal parmi les poids des arêtes reliant v à un sommet à l’intérieur du nuage.
À chaque étape :
o On ajoute au nuage le sommet u extérieur ayant la plus petite étiquette d(u)
o On met à jour les étiquettes des sommets adjacents à u
Rappel 5 : Algorithmes voraces - Arbre Couvrant Minimal - Optimalité
Propriété de partition
Considérons une partition des sommets de G en deux ensembles U et V. Soit 𝑒 une arête de
poids minimal entre U et V. Alors, il existe un arbre couvrant minimal de G contenant 𝑒
Preuve
Soit T un arbre couvrant minimal de G. Si T ne contient pas 𝑒, soit C le cycle formé par l’addition
de 𝑒 à l’arbre T et soit f, une arête entre U et V. Par la propriété de cycles, on a que
MASTER 1 – INFORMATIQUE
10
DEVOIRS DE INF4017
𝑝𝑜𝑖𝑑𝑠(𝑓) ≤ 𝑝𝑜𝑖𝑑𝑠(𝑒). Comme on avait pris 𝑒 de poids minimal, on a que
𝑝𝑜𝑖𝑑𝑠(𝑓) = 𝑝𝑜𝑖𝑑𝑠(𝑒). et alors on obtient un autre ACM en remplaçant 𝑓 par 𝑒
Figure 5 - Preuve de la propriété de partition
II. PREUVE D’OPTIMALITÉ
L’optimalité des deux algorithmes découle de la propriété de partition des ACMs.
1. Kruskal
La partition du graphe considérée est ici, étant donné une arête (u,v) de coût minimum, d’un
côté tous les sommets faisant partie de la composante connexe de u et de l’autre tous les
autres sommets.
MASTER 1 – INFORMATIQUE
11
DEVOIRS DE INF4017
Si u et v ne font pas partie de la même composante connexe, la propriété de partition
garantie que l’arête (u,v) fait partie d’un ACM
2. Prim
Ici, la partition considérée est nuage/ non nuage.
MASTER 1 – INFORMATIQUE
12
DEVOIRS DE INF4017
CONCLUSION
Les devoirs qui nous ont été soumis ont été d’une importance majeure à notre
compréhension un peu plus poussée des graphes. Il en ressort que nous pouvons utiliser deux
méthodes pour tester si un graphe est acyclique à savoir le tri topologique ou le parcours en
profondeur du graphe. Cependant, le tri topologique n’identifie pas le cycle contrairement au
parcours en profondeur qui est beaucoup plus approprié pour nous car nous avons pu évaluer
sa complexité à 𝚯(𝐧 + 𝐦). De plus, les preuves d’optimalité des algorithmes de Kruskal et de
Prim découlent de la propriété de partition des Arbres couvrant minimum.
MASTER 1 – INFORMATIQUE
13
DEVOIRS DE INF4017
Bibliographie
Pour la mise en œuvre de notre travail, les ressources suivantes ont été utilisées :
 Pour le devoir 1:
 https://perso.liris.cnrs.fr/samba-ndojh.ndiaye/fichiers/App_Graphes.pdf
 http://perso.ens-lyon.fr/eric.thierry/Graphes2009/nicolas-brunie.pdf
 Pour le devoir 2:
 https://www.iro.umontreal.ca/~hamelsyl/RevisionIntra.pdf
 https://www.pairform.fr/doc/1/32/180/web/co/Definition_5.html
MASTER 1 – INFORMATIQUE
14
Téléchargement