PrOJET C : LAGER IG3 2009-2010
description
Transcript of PrOJET C : LAGER IG3 2009-2010
1
PROJET C : LAGERIG3 2009-2010
DREYER QuentinJAMBET Pierre
NGYUEN Michael24/05/2010
2
LAGER : LAGER Ain’t a Graph Explorer for RookiesSommaire
1. Présentation générale2. Structures utilisées3. Algorithmes principaux4. Conclusion5. Remerciements
24/05/2010
3
LAGER : LAGER Ain’t a Graph Explorer for Rookies
24/05/2010
1. Présentation générale
- Langage : C++- Nomination : Anglais (Commentaires : Français)- Outils annexes :
- SubVersion (SVN)- Valgrind- Google Test
- Respect de la charte de programmation / normalisation ANSI
- Application semi-portable- Makefile complet- Acronyme récursif !
4
LAGER : LAGER Ain’t a Graph Explorer for Rookies2. Structures utilisées
- Utilisation de 5 classes :
- Classe maîtresse : Graph- Double représentation : Matrices d’adjacences / Liste
d’adjacence=> Comparaison Vitesse / Espace mémoire
- 1 classe par représentation : AdjMat / AdjList=> Clarté
- Classe auxiliaire : Summit- Classe de génération : Generator
24/05/2010
5
LAGER : LAGER Ain’t a Graph Explorer for Rookies3. Algorithmes principaux
- Fonctionnement de LAGER :
- Récupération de données Facebook OU
- Génération aléatoire
- Chargement du fichier- Analyse du fichier- (Optionnel) Affichage des résultats
24/05/2010
6
LAGER : LAGER Ain’t a Graph Explorer for Rookies3. Algorithmes principaux
void Graph::initGraph (string& fileNameIn)
- Ouverture du fichier (fopen)- Parsing des données (fscanf) => Personnes / Relations /
Questions- Fermeture du fichier (fclose)
24/05/2010
7
LAGER : LAGER Ain’t a Graph Explorer for Rookies3. Algorithmes principaux
vector <s_summit> AdjMat::initSCC ()
- Premier parcours en profondeur (DFS)- Tri des sommets dans l’ordre décroissant de leur temps de
fin respectifs- Deuxième parcours en profondeur du graphe dual (DFSD)- Tri des sommets dans l’ordre croissant de leur temps de
début respectifs- Renvoie du vector
24/05/2010
8
LAGER : LAGER Ain’t a Graph Explorer for Rookies3. Algorithmes principaux
void AdjMat::DFS ()
- Initialisation de la variable int temps à 0- Appel sur DFSHidden(i, temps) pour chaque sommet non
déjà parcouru
24/05/2010
9
LAGER : LAGER Ain’t a Graph Explorer for Rookies3. Algorithmes principaux
void AdjMat::DFSHidden (int i, int& t) : Algorithme récursif
- Changement du statut du sommet (Atteint)- Augmentation de 1 du temps- Enregistrement du temps de début- Appel sur DFSHidden(j, t) si j représente un successeur non
atteint- Augmentation de 1 du temps- Enregistrement du temps de fin
24/05/2010
10
LAGER : LAGER Ain’t a Graph Explorer for Rookies3. Algorithmes principaux
void Graph::searchSCC ()
- Appel a initSCC() // Remplit le tableau t des temps d et f- Initialisation : d = t[0].d, f = t[0].f;- Pour tous les sommets faire
- Si d est inférieur à t[i].d ET f est supérieur à t[i].falors 0 et i sont dans la même CFC
- Sinon d = t[i].b, f = t[i].f, on débute une nouvelle CFC
24/05/2010
11
LAGER : LAGER Ain’t a Graph Explorer for Rookies3. Algorithmes principaux
vector <s_summit> AdjMat::initDist (int x) : Algorithme de Dijkstra- Initialisation des temps d’accès à INT_MAX (Equivalent ∞)- Initialisation du tableau des parents à -1- Initialisation du temps d’accès de x à 0- Tant qu’il reste des sommets faire
- Extraire le sommet ayant le plus petit temps d’accès- Mettre à jour les temps d’accès de ses successeurs :
d(j) = min( d(j), d(i) + j.freq); // i sommet actuel, j un successeur
- Mettre à jour le tableau des parents : π(j) = i;
- Renvoie du vector24/05/2010
12
LAGER : LAGER Ain’t a Graph Explorer for Rookies3. Algorithmes principaux
void Graph::searchDistances ()
- Pour chaque point de départ distinct x faire- Appel à initDist(x) // Remplit les tableaux d et π
- Pour chaque question x -> y faire- t_min = d(y) dans le tableau de x// Affichage du chemin :- Afficher y- Tant que π(y) != -1 faire
- y = π(y)- Afficher y
24/05/2010
13
LAGER : LAGER Ain’t a Graph Explorer for Rookies3. Algorithmes principaux
bool AdjMat::isImportant (int x) : Algorithme de NGUYEN
- Traitement des cas simples : Source / Puits / Point isolé=> Non important
- Traitement des fils de x :- Si un des fils de x de la même CFC n’a pas d’autres père de la
même CFC=> X est important
- Traitement des pères de x :- Si un des pères de x de la même CFC n’a pas d’autres fils dans la
même CFC=> X est important
24/05/2010
14
LAGER : LAGER Ain’t a Graph Explorer for Rookies4. Conclusion
- Projet bénéfique - Travail en groupe- Application de notions vu en Théorie des graphes- Découverte des Unit Test, de la STL, …
- Utilisation d’une librairie externe- De nombreux problèmes rencontrés, mais surmontés !
24/05/2010
15
LAGER : LAGER Ain’t a Graph Explorer for Rookies5. Remerciements
- Nos professeurs, sans qui ce projet n’aurait pu exister- Google, pour toutes ses applications qui nous ont été
fortes utiles :(Google Search Engine, Google Code, Google Test, Google Docs, …)
- Mathieu Triay !
Merci de votre attention
24/05/2010