PrOJET C : LAGER IG3 2009-2010

15
PROJET C : LAGER IG3 2009-2010 DREYER Quentin JAMBET Pierre NGYUEN Michael 1 24/05/2010

description

PrOJET C : LAGER IG3 2009-2010. DREYER Quentin JAMBET Pierre NGYUEN Michael. LAGER : LAGER Ain’t a Graph Explorer for Rookies. Sommaire Présentation générale Structures utilisées Algorithmes principaux Conclusion Remerciements. LAGER : LAGER Ain’t a Graph Explorer for Rookies. - PowerPoint PPT Presentation

Transcript of PrOJET C : LAGER IG3 2009-2010

Page 1: PrOJET  C : LAGER IG3 2009-2010

1

PROJET C : LAGERIG3 2009-2010

DREYER QuentinJAMBET Pierre

NGYUEN Michael24/05/2010

Page 2: PrOJET  C : LAGER IG3 2009-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

Page 3: PrOJET  C : LAGER IG3 2009-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 !

Page 4: PrOJET  C : LAGER IG3 2009-2010

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

Page 5: PrOJET  C : LAGER IG3 2009-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

Page 6: PrOJET  C : LAGER IG3 2009-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

Page 7: PrOJET  C : LAGER IG3 2009-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

Page 8: PrOJET  C : LAGER IG3 2009-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

Page 9: PrOJET  C : LAGER IG3 2009-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

Page 10: PrOJET  C : LAGER IG3 2009-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

Page 11: PrOJET  C : LAGER IG3 2009-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

Page 12: PrOJET  C : LAGER IG3 2009-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

Page 13: PrOJET  C : LAGER IG3 2009-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

Page 14: PrOJET  C : LAGER IG3 2009-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

Page 15: PrOJET  C : LAGER IG3 2009-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