La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Structures de données IFT-2000 Abder Alikacem Les graphes (1) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009.

Présentations similaires


Présentation au sujet: "Structures de données IFT-2000 Abder Alikacem Les graphes (1) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009."— Transcription de la présentation:

1 Structures de données IFT-2000 Abder Alikacem Les graphes (1) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

2 Plan Introduction Nomenclature des graphes Matrice de connectivité Clôture transitive: algorithme de Warshall Plus court chemin: algorithme de Floyd

3 Fermeture transitive des graphes Définition Soit G un graphe orienté de n noeuds. Soit A la matrice de nœuds adjacents correspondant. Soit B n-1 = A + A 2 + A 3 … + A n-1 la matrice P est appelée fermeture ou clôture transitive du graphe G (dans notre cas, on a une clôture par produits de matrices). Complexité ? B n-1 P : matrice de booléens qui indique sil existe un chemin entre toutes paires de nœuds

4 Exemple graphe Ggraphe H Fermeture transitive des graphes H : la fermeture transitive de A.

5 P 0 = P1 =P1 = P2 =P2 = P3 =P3 = P4 =P4 = Algorithme deWarshall

6 {Soit A, un graphe orienté} 1. [Initialisation] P A 2. [Boucle sur tous les sommets intermédiaires] Pour k = 1, 2,..., n répéter jusqu'à l'étape [Boucle sur les sommets de départ] Pour i = 1, 2,..., n répéter l'étape [Boucle sur les sommets adjacents] Pour j = 1, 2,..., n répéter P ij P ij ou (P ik et P kj ) 5. [Fin de l'algorithme] Stop Algorithme de Warshall Complexité ?

7 P 0 = P1 =P1 = P 2 = P3 =P3 = P4 =P4 = Algorithme de Floyd pour k = 1 à n faire pour i = 1 à n faire pour j = 1 à n faire C [i, j] MIN { C [i, j], C [i, k] + C [k, j] } ;

8 Algorithme de Floyd {Soit A, un graphe orienté.} 1. [Initialisation] C A 2. [Boucle sur les sommets intermédiaires] Pour k = 1, 2,..., n répéter jusqu'à l'étape [Boucle sur les sommets de départ] Pour i = 1, 2,..., n répéter l'étape [Boucle sur les sommets adjacents] Pour j = 1, 2,..., n répéter C ij MIN (C ij, C ik + C kj ) 5. [Fin de l'algorithme] Stop Algorithme de Floyd Complexité ?

9 C 0 = W = C1 =C1 = C2 =C2 = C3 =C3 = C4 =C4 = Matrice des poids : W [i,j] =0 si i = j v((i,j)) si (i, j) A sinon Algorithme de Floyd et les distances

10 C 0 = W = C 1 = C 2 = C 3 = C 4 = P 1 = P 2 = P 3 = P 4 = P 0 = Matrice des prédécesseurs P k [i, j] = prédécesseur de j sur un plus court chemin de i à j dont les sommets intermédiaires sont tous k Algorithme de Floyd et les chemins

11 C 4 = P 4 = Exemple de chemin distance de 2 à 1 = C 4 [2,1] = 13 P 4 [2,1] = 4 ;P 4 [2,4] = 3 ;P 4 [2,3] = 2 ; Algorithme de Floyd

12 Structures de données IFT-2000 Abder Alikacem Les graphes (2) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009

13 Plan Parcours dun graphe par contagion (ou largeur) Parcours dun graphe par sondage (ou profondeur) Description dun graphe en terme de type abstrait Implantation

14 Défilement dun graphe opération importante visite dun graphe problème : éviter les circuits !!! solution : marquer les nœuds (Petit-Poucet) x x x

15 Marquer les nœuds (Petit-Poucet) De nombreux algorithmes relatifs aux graphes nécessitent une procédure qui permet l'examen systématique des noeuds et des arêtes (arcs) d'un graphe G donné. La procédure consiste à classer les sommets en 3 catégories: La catégorie A des sommets déjà visités. La catégorie B des sommets adjacents à ceux de la catégorie A mais pas encore visités (sommets qui peuvent être atteints). La catégorie C des sommets invisibles qui n'ont pas encore été rencontrés du tout (qui ne peuvent pas être atteints depuis un sommet déjà visité).

16 Les différentes variantes de parcours dépendront de la manière dont on fait passer les sommets de la catégorie C à la catégorie B et de la B dans la A. On construit l'état initial en plaçant le sommet de départ dans la catégorie B et tous les autres dans la catégorie C. On répète alors : faire passer un sommet x de la catégorie B à la catégorie A; mettre dans la catégorie B tous les sommets de catégorie C adjacents à x. Marquer les nœuds (Petit-Poucet) Il existe deux manières standard d'exécuter ces opérations: Parcours par contagion ou par largeur Breadth-First Search ou BFS Parcours par sondage ou en profondeur(Depth-First Search ou DFS)

17 Au cours de l'exécution de nos algorithmes, chaque noeud N de G sera dans l'un des trois états suivants : STATUS = 1 :(Prêt)État initial du noeud N STATUS = 2 :(Attente)Le noeud N est soit empilé, soit dans la file d'attente, en attente d'être traité. STATUS = 3 :(Traité)Le noeud N a été traité. Marquer les nœuds (Petit-Poucet) Noter quau lieu de marquer les nœuds par 1, 2 ou 3, peut simplement le faire en utilisant un booléen: vrai : le nœud est soit traité soit en attente dêtre traité (status =1 ou 2) Faux: le nœud na pas été parcouru (status = 1)

18 Exemple Défilement dun graphe

19 Spécifications de linterface du type Graphe Description en termes de types abstraits 1.ajouter un sommet à un graphe 2.ajouter un arc/arête à un graphe 3.ôter un sommet du graphe et tous les arcs/arêtes associés 4.ôter un arc/arête 5.permettre l'accès à un sommet nommé (désigné) 6.indiquer si un sommet n'a pas de voisins 7.parcourir les voisins d'un sommet (parcours) 8.voir si un chemin existe entre 2 sommets 9.trouver le chemin le plus court (# arêtes/arcs, distance) 10.trouver tous les chemins entre 2 sommets Etc..

20 Implantation Il existe deux principales méthodes de modélisation des graphes en tant que type abstrait: les matrices et les listes dites de connectivité ou d'adjacence. Le choix entre elles se fera en fonction de la densité du graphe. Par densité, on entend la proportion d'arcs effectifs par rapport au nombre maximum d'arcs ou darêtes possibles: NbArcs / NbSommets 2 dans le cas de graphe orienté. NbAretes / (NbSommets(NbSommets-1)/2) dans le cas dun graphe non orienté

21 Interface template class Graphe { public: /** Constructeur (graphe vide)*/ Graphe(); /** Constructeur à partir des sommets et arcs/arêtes*/ Graphe(vector sommets, vector aretes); Graphe (const Graphe&); Graphe(const Graphe&g,vector sommets); ~Graphe (); Graphe& operator = (const Graphe&); void ajouterSommet(T s); void ajouterArc (T s1, T S2); void enleverArc (T s1, T s2); void enleverSommet ( T s); bool sommetExiste(T s) const; int nbSommets() const; // etc... private: //… class Arete { public: int u; int v; Arete(int u, int v) {this->u = u; this->v = v; } class Sommet { public: …getData(); void setData(..); //etc.. private: … data; int no; int tag; bool pres; }

22 Classe Graphe template class Graphe { public: //.. private: int nbSommets; T* sommets; int **mat;//implémentation dans une matrice }// de sommets adjacents Cas dun graphe orienté Implantation dans une matrice dadjacence

23 Classe Graphe template class Graphe { public: //.. private: int nbSommets; T* sommets; int **mat; // trop de perte mémoire!! } Cas dun graphe non orienté Implantation dans une matrice dadjacence Linéariser la matrice

24 Classe Graphe template class Graphe { public: //.. private: int nbSommets; T* sommets; int *mat; // tableau à une dimension } Cas dun graphe non orienté Implantation dans une matrice dadjacence ( i + 1 ) * i / 2 + j

25 Classe Graphe template class Graphe { public: //.. private: vector sommets; // Les sommets vector > voisins; // Les sommets adjacents } Implantation dans une matrice dadjacence Utilisation de vector de la STL

26 Classe Graphe template class Graphe { public: //.. private: class Noeud { public: T data; /* au lieu de T data, on peut avoir T* ou int*/ Noeud * suivant; /* chaînage des sommets adjacents */ }; /* le noeud typique du graphe */ int nbSommet; /* nombre de sommets dans le graphe */ int nbSommetMax;/* nombre total possible de sommets */ T * sommet; /* tableau représentant les sommets*/ Noeud** listeSommet; /* les listes de sommets adjacents*/ } Implantation dans une liste de sommets adjacents

27 Classe Graphe template class Graphe { public: //.. private: class Noeud { public: T data; //données // dans un sommet list voisins; }; vector listeSommets; } Implantation dans une liste de sommets adjacents Utilisation de vector et list de la STL

28 Classe Graphe Implantation dans une liste de sommets adjacents Cas dun graphe non orienté La liste des sommets adjacents soufre de la même redondance que nous avons rencontrer avec les matrices de sommets adjacents. Une solution plus efficace utilisation de listes darêtes Elle consiste à lier les arêtes un lien pour chaque arête vers les 2 sommets délimitant larête.

29 Classe Graphe template class Graphe { public: //.. private: class AreteNode { public: int sommet[3]; AreteNode * lien[3]; }; typedef AreteNode * AretePtr; class Noeud { public: T data; AretePtr first; }; vector listeSommets; } Cas dun graphe non orienté Liste des arêtes


Télécharger ppt "Structures de données IFT-2000 Abder Alikacem Les graphes (1) Semaine 6 Département dinformatique et de génie logiciel Édition Septembre 2009."

Présentations similaires


Annonces Google