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 La STL du C++ Semaine 5 Département d’informatique et de génie logiciel Édition Septembre 2009.

Présentations similaires


Présentation au sujet: "Structures de données IFT-2000 Abder Alikacem La STL du C++ Semaine 5 Département d’informatique et de génie logiciel Édition Septembre 2009."— Transcription de la présentation:

1 Structures de données IFT-2000 Abder Alikacem La STL du C++ Semaine 5 Département d’informatique et de génie logiciel Édition Septembre 2009

2 STL : Standard Template Library La STL est une bibliothèque de C++ qui permet de mettre en œuvre d’autres structures de données plus complexes et de faciliter également l’écriture de programmes. En quelques sortes, cette bibliothèque propose des algorithmes clés en main pour beaucoup de problèmes de programmation.  Il s’agit d’une bibliothèque générique qui fournit des solutions pour gérer un ensemble de données en utilisant des algorithmes efficaces.  Tous les composants de STL sont des templates

3 STL : Standard Template Library  Conteneurs: En C++, une classe contenant un ensemble d’éléments d'un certain type est appelée conteneur. Ce sont donc eux qui contiendront les informations que l’on veut stocker.  Itérateurs: utilisés pour parcourir les items qui se retrouvent dans les conteneurs, ils jouent un peu le rôle de pointeurs sur des éléments d’un conteneur.  Algorithmes: utilisés pour faire des traitements sur les éléments qui se retrouvent dans les conteneurs.

4 Les conteneurs Les conteneurs sont classés suivant trois types:  Séquentiels  Adapteurs  Associatifs vector Tableau list Liste doublement chaînée slist List simplement chaînée deque Tableau avec des opération efficaces d’insertion et de suppression aux extrémités queue File- FIFO (first-in, first-out) stack Pile - LIFO (last in, first out) set Ensemble avec des éléments distincts map Table de hachage multiset Comme l’ensemble mais autorise des valeurs répétées multimap Comme la table de hachage mais autorise des clefs multiples

5 Conteneurs - Requis L’élément qui sera inclus dans un conteneur doit posséder:  constructeur de recopie  opérateur =  destructeur  un constructeur par défaut  un test d’égalité (opérateur ==)  un critère d’ordre (operateur < et autres)

6 Les itérateurs  Un itérateur peut être vu comme un pointeur sur un élément d’un conteneur.  Chaque conteneur fourni un type d’itérateur. Exemple le type list donne un itérateur de type : list :: iterator.  Tous les conteneurs définissent deux types d’itérateur  container::iterator //permet un accès en mode lecture/écriture  container::const_iterator //mode lecture seulement

7 Tous les conteneurs offrent les mêmes fonctions de base permettant aux itérateurs d’accéder aux éléments begin() Retourne un itérateur pointant au premier élément du conteneur end() Retourne un itérateur pointant après le dernier élément du conteneur Les itérateurs

8 #include using namespace std; int main( ) { list list1; for (int i = 1; i<=40; i++) list1.push_back(i+i); list :: iterator i; for (i = list1.begin( ); i!=list1.end( ); i++) cout <<*i << “ “ ; return 0 ; } Les principaux opérateurs sont * donnant accès à la valeur, ++ et -- pour incrémenter et décrémenter une valeur. - Opérateur * : Retourne l’élément de la position courante - Opérateur ++ : Fait pointer l’itérateur à l’élément suivant - Opérateur == : Indique si 2 itérateurs pointent sur le même élément - Opérateur = : Assigne un itérateur

9 #include // création d’une liste de caractères list coll; for (char c = ‘a’; c<=‘z’; c++) coll.push_back(c); // impression de la liste à l’aide d’un itérateur list ::const_iterator pos; for(pos = coll.begin(); pos != coll.end(); pos++) cout << *pos << ‘ ‘; Exemple Les itérateurs

10 Les algorithmes  La STL fournit un nombre important d’algorithmes génériques les plus utilisés, tels que les algorithmes de parcours, de recherche et de tri. Ils s’appliquent sur les conteneurs. Les algorithmes ne sont pas des fonctions membres des classes des conteneurs. Ce sont plutôt des fonctions globales qui opèrent avec des intérateurs. Pour manipuler cette bibliothèque, il suffit d‘incorporer dans l’entête #include  Description de la Standard Template Library du C++

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

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

13 Les graphes Modélisent quoi au juste ? • cartes géographiques : réseaux routiers, de téléphonie, etc. • trajets d’autobus, de trains, d’avions, de commis voyageurs • circuits électriques, réseaux électriques • Gestion d’une ville (transport, feux tricolore, voies à sens unique etc..) • Etc

14 Graphe (orienté) G = (S, A) S ensemble fini des sommets A  S x S ensemble des arcs, i.e., relation sur S Graphe non orienté G = (S, A) A ensemble des arêtes, relation symétrique S = { 1, 2, 3, 4, 5 } A = { (1, 2), (1, 3), (2, 3), (3, 2), (4, 4), (4, 5) } S = { 1, 2, 3, 4 } A = { {1, 2}, {1, 3}, {1, 4}, {2, 4} } Les graphes: définitions

15 • Graphe G  (S,A) • S = {1,2,3,4,5}, A = {1-5,2-1,2-4,4-1,4-3,5-4} • si 1-5 ≠ 5-1 alors g est orienté (digraphe) • adjacence d’un nœud W si 1 arc V-W y est relié • chemin  suite d’arcs où le dernier d’une paire est le premier de la paire suivante (chemins simples) • et = 2 chemins de 2 à 4 • ordre d’un chemin  nombre d’arcs le composant

16 Les graphes : définitions • ordre de sortie d’un nœud (arité de sortie) • ordre d’entrée d’un nœud (arité d’entrée) = degré d’un sommet • circuit  chemin où l’origine est égale au dernier nœud • ex. : • boucle  circuit d’ordre 1 • graphe acyclique  graphe ne contenant aucun circuit • puits  nœud dont l’arité de sortie est 0 • source  nœud dont l’arité d’entrée est 0 • nœud indépendant  arité d’entrée = arité de sortie =

17 Les graphes : définitions Graphe connexe : • en oubliant le sens des flèches, un graphe est connexe s’il existe un chemin entre toutes paires de nœuds • sinon : graphe à composantes connexes

18 Graphe fortement connexe :  en tenant compte du sens des flèches, un graphe est fortement connexe s’il existe un chemin entre toutes paires de nœuds  Ce graphe comporte 5 composantes fortement connexes Les graphes : définitions

19  Points d’articulation :  Cas d’un graphe non-orienté, Ce graphe est connexe, c'est-à-dire formé d'une seule composante.  Ce graphe contient quatre points d'articulation, c'est-à-dire un sommet qui, s'il est éliminé, “ casse ” le graphe en deux ou plusieurs morceaux.  Ces points d’articulation sont : A qui déconnecte B H qui déconnecte I J qui déconnecte K G qui produit 3 composantes.  Un graphe qui ne possède pas de points d’articulation est appelé bi-connexe (ou 2-connexe) Les graphes : définitions

20 à chaque arc  valeur (numérique) type-de mange sur saveur à-côté près à chaque arc  valeur (nominale) Graphe pondéré (valué) Les graphes orientés et pondérés sont appelés des réseaux

21 Les graphes : définitions • Graphe pondéré : à chaque arc  valeur (nominale) • Graphe décoré (étiqueté) : à chaque nœud  valeur lasagne chat tapis pepperoni paillasson type-de mange sur saveur à-côté près

22 Opérations importantes Connectivité • Existe-t-il un chemin entre V et W ? • Quel est le chemin le plus court entre V et W ? • avec chaque arc  valeur de 1 ? • avec un graphe pondéré ? • Est-ce qu’un graphe g’ est inclus dans un autre graphe g ? • Existe-t-il une couverture minimale pour g ?

23  Explorations  Parcours en profondeur, en largeur  Tri topologique  Composantes fortement connexes,...  Recherche de chemins  Clôture transitive (algorithme de Warshall)  Chemin de coût minimal (algorithme de Floyd, Dijkstra, Bellman-Ford) ...  Arbres recouvrants :  Algorithmes de Kruskal et Prim  Réseaux de transport  Flot maximal (algorithme de Ford-Fulkerson)  Divers  Coloration d'un graphe ... Algorithmique des graphes

24 Les ponts de Königsberg Les graphes (historique) D A B C Problème : passer par tous les ponts une fois et une seule

25 Les ponts de Königsberg Les graphes Problème : tracer les arcs de ce graphe sans lever le crayon C DA B IMPOSSIBLE ! Un graphe connexe admet une chaîne eulérienne si et seulement si tous ses sommets sont de degré pair sauf éventuellement 2. Un chemin dans un graphe est dit eulérien si et seulement si chaque arête faisant partie du chemin intervient une et une seule fois.

26 En général, il existe 2 manières pour mettre un graphe en mémoire:  Par chaînage  Listes des successeurs  Dans une matrice  Matrice de nœuds adjacents Implantation

27 S = { 1, 2, 3 } A = { (1,1), (1, 2), (1, 3), (2, 1), (3, 2)} Listes des successeurs Exemple

28 S = { 1, 2, 3 } A = { (1,1), (1, 2), (1, 3), (2, 1), (3, 2)} M = V =   2 0 M [ i, j ] = 1 ssi j adjacent à i Matrices d’adjacences Exemple

29 Opérations importantes • graphe orienté Matrice d’adjacence • graphe non orienté

30 Opérations importantes • arité de sortie Matrice d’adjacence • arité d’entrée

31 Opérations importantes • puits Matrice d’adjacence • source

32 Opérations importantes • boucle Matrice d’adjacence

33 Opérations importantes • chemins de longueur 1 = A Matrice d’adjacence

34 Opérations importantes • chemins de longueur 2 ? Matrice d’adjacence

35 Opérations importantes • chemins de longueur 2 ? Matrice d’adjacence

36 Chemins de longueur 2

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61 Chemins de longueur 2 = A 2

62 x Chemins de longueur 3

63 Chemins de longueur 3 = A 3

64 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 s’il existe un chemin entre toutes paires de nœuds

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

66 P 0 =         P 1 = P 2 = P 3 = P 4 =                             Algorithme deWarshall

67 {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é ?

68 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] } ; k c i b a kj MIN { a, b + c } C k = i j a k b c Algorithme de Floyd

69 P 0 =         P 1 = P 2 = P 3 = P 4 =                             Warshall P 0 =   1  1     1     1  1   1 1    P 1 = P 2 = P 3 = P 4 =   1  1     1    1  1   1 1  2        1                           Floyd P 1 = P 2 = P 3 = P 4 =                                               CALCULMATRICIELCALCULMATRICIEL

70 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é ?

71 C 0 = W =  0 1  8    0 4       0 2  0  C 1 =  0 1  8    0 4       0 1  0  C 2 =     0 4        C 3 =           C 4 =         Matrice des poids : W [i,j] =0 si i = j v((i,j)) si (i, j)  A  sinon Algorithme de Floyd et les distances

72 C 0 = W =  0 1  8    0 4       0 2  0  C 1 =  0 1  8    0 4       0 1  0  C 2 =     0 4        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

73 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


Télécharger ppt "Structures de données IFT-2000 Abder Alikacem La STL du C++ Semaine 5 Département d’informatique et de génie logiciel Édition Septembre 2009."

Présentations similaires


Annonces Google