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

Présentations similaires


Présentation au sujet: "Structures de données IFT-2000"— Transcription de la présentation:

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

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 Les conteneurs 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<int> donne un itérateur de type : list<int> :: 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 Les itérateurs 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

8 Les itérateurs 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 #include <list> #include <iostream> using namespace std; int main( ) { list <int> list1; for (int i = 1; i<=40; i++) list1.push_back(i+i); list <int> :: iterator i; for (i = list1.begin( ); i!=list1.end( ); i++) cout <<*i << “ “ ; return 0 ; }

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

10 Les algorithmes http://www.sgi.com/tech/stl/
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 <algorithtm> Description de la Standard Template Library du C++

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

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

13 Les graphes Modélisent quoi au juste ? 1 2 5 4 3
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 Les graphes: définitions
2 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 4 1 5 3 S = { 1, 2, 3, 4, 5 } A = { (1, 2), (1, 3), (2, 3), (3, 2), (4, 4), (4, 5) } 2 4 1 3 S = { 1, 2, 3, 4 } A = { {1, 2}, {1, 3}, {1, 4}, {2, 4} }

15 Les graphes : définitions
1 2 5 4 3 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) <2-4> et <2-1,1-5,5-4> = 2 chemins de 2 à 4 ordre d’un chemin  nombre d’arcs le composant

16 Les graphes : définitions
1 2 5 4 3 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. : <4-1,1-5,5-4> 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 = 0

17 Les graphes : définitions
1 2 5 4 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 3 1 2 5 4 3

18 Les graphes : définitions
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

19 Les graphes : définitions
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)

20 Les graphes : définitions
Graphe pondéré (valué) 1 0.8 1 2 sur 0.5 2 type-de 1 5 4 près 5 0.2 4 mange 1 0.75 à-côté saveur 3 3 à chaque arc  valeur (numérique) à chaque arc  valeur (nominale) Les graphes orientés et pondérés sont appelés des réseaux

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

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 ? 1 2 1 5 4 2 5 4 3 3 1 2 1 2 5 4 5 4 3 3

23 Algorithmique des graphes
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

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

25 Les graphes 3 5 C A D B IMPOSSIBLE ! Les ponts de Königsberg
Un graphe connexe admet une chaîne eulérienne si et seulement si tous ses sommets sont de degré pair sauf éventuellement 2. Les ponts de Königsberg 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. 3 5 C A D B IMPOSSIBLE ! Problème : tracer les arcs de ce graphe sans lever le crayon

26 Implantation 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

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

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

29 Opérations importantes
Matrice d’adjacence 1 1 2 2 5 5 4 4 3 3 graphe orienté graphe non orienté 1 2 3 4 5 1 2 3 4 5 1 1 1 1 1 1 2 1 1 2 1 1 3 3 1 4 1 1 4 1 1 1 1 5 1 5 1 1

30 Opérations importantes
1 2 Matrice d’adjacence 5 4 3 1 2 3 4 5 1 2 3 4 5 1 1 1 1 1 2 1 1 2 1 1 2 3 3 4 1 1 4 1 1 2 5 1 5 1 1 2 1 2 1 arité de sortie arité d’entrée

31 Opérations importantes
1 2 Matrice d’adjacence 5 4 3 1 2 3 4 5 1 2 3 4 5 1 1 1 1 1 2 1 1 2 2 1 1 3 3 4 1 1 2 4 1 1 5 1 1 5 1 2 1 2 1 puits source

32 Opérations importantes
Matrice d’adjacence 1 2 5 4 3 boucle 1 2 3 4 5 1 1 2 1 1 3 4 1 1 5 1

33 Opérations importantes
Matrice d’adjacence 1 2 5 4 3 chemins de longueur 1 = A 1 2 3 4 5 1 1 2 1 1 3 4 1 1 5 1

34 Opérations importantes
Matrice d’adjacence 1 2 5 4 3 chemins de longueur 2 ? 1 2 3 4 5 1 2 3 4 5 1 1 1 1 2 1 1 2 1 1 3 3 4 1 1 4 1 1 5 1 5 1

35 Opérations importantes
Matrice d’adjacence 1 2 5 4 3 chemins de longueur 2 ? 1 2 3 4 5 1 2 3 4 5 1 1 1 1 2 1 1 2 1 1 3 3 4 1 1 4 1 1 5 1 5 1

36 Chemins de longueur 2 1 2 3 4 5 1 2 3 4 5 1 1 1 1 2 1 1 2 1 1 3 3 4 1 1 4 1 1 5 1 5 1 1 2 3 4 5 1 1 2 2 5 4 3 4 3 5

37 Chemins de longueur 2 1 2 3 4 5 1 2 3 4 5 1 1 1 1 2 1 1 2 1 1 3 3 4 1 1 4 1 1 5 1 5 1 1 2 3 4 5 1 1 2 2 5 4 3 4 3 5

38 Chemins de longueur 2 1 2 3 4 5 1 2 3 4 5 1 1 1 1 2 1 1 2 1 1 3 3 4 1 1 4 1 1 5 1 5 1 1 2 3 4 5 1 1 2 2 5 4 3 4 3 5

39 Chemins de longueur 2 1 2 3 4 5 1 2 3 4 5 1 1 1 1 2 1 1 2 1 1 3 3 4 1 1 4 1 1 5 1 5 1 1 2 3 4 5 1 1 1 2 2 5 4 3 4 3 5

40 Chemins de longueur 2 1 2 3 4 5 1 2 3 4 5 1 1 1 1 2 1 1 2 1 1 3 3 4 1 1 4 1 1 5 1 5 1 1 2 3 4 5 1 1 1 2 2 5 4 3 4 3 5

41 Chemins de longueur 2 1 2 3 4 5 1 2 3 4 5 1 1 1 1 2 1 1 2 1 1 3 3 4 1 1 4 1 1 5 1 5 1 1 2 3 4 5 1 1 1 2 2 1 5 4 3 4 3 5

42 Chemins de longueur 2 1 2 3 4 5 1 2 3 4 5 1 1 1 1 2 1 1 2 1 1 3 3 4 1 1 4 1 1 5 1 5 1 1 2 3 4 5 1 1 1 2 2 1 5 4 3 4 3 5

43 Chemins de longueur 2 1 2 3 4 5 1 2 3 4 5 1 1 1 1 2 1 1 2 1 1 3 3 4 1 1 4 1 1 5 1 5 1 1 2 3 4 5 1 1 1 2 2 1 1 5 4 3 4 3 5

44 Chemins de longueur 2 1 2 3 4 5 1 2 3 4 5 1 1 1 1 2 1 1 2 1 1 3 3 4 1 1 4 1 1 5 1 5 1 1 2 3 4 5 1 1 1 2 2 1 1 5 4 3 4 3 5

45 Chemins de longueur 2 1 2 3 4 5 1 2 3 4 5 1 1 1 1 2 1 1 2 1 1 3 3 4 1 1 4 1 1 5 1 5 1 1 2 3 4 5 1 1 1 2 2 1 1 1 5 4 3 4 3 5

46 Chemins de longueur 2 1 2 3 4 5 1 2 3 4 5 1 1 1 1 2 1 1 2 1 1 3 3 4 1 1 4 1 1 5 1 5 1 1 2 3 4 5 1 1 1 2 2 1 1 1 5 4 3 4 3 5

47 Chemins de longueur 2 1 2 3 4 5 1 2 3 4 5 1 1 1 1 2 1 1 2 1 1 3 3 4 1 1 4 1 1 5 1 5 1 1 2 3 4 5 1 1 1 2 2 1 1 1 5 4 3 4 3 5

48 Chemins de longueur 2 1 2 3 4 5 1 2 3 4 5 1 1 1 1 2 1 1 2 1 1 3 3 4 1 1 4 1 1 5 1 5 1 1 2 3 4 5 1 1 1 2 2 1 1 1 5 4 3 4 3 5

49 Chemins de longueur 2 1 2 3 4 5 1 2 3 4 5 1 1 1 1 2 1 1 2 1 1 3 3 4 1 1 4 1 1 5 1 5 1 1 2 3 4 5 1 1 1 2 2 1 1 1 5 4 3 4 3 5

50 Chemins de longueur 2 1 2 3 4 5 1 2 3 4 5 1 1 1 1 2 1 1 2 1 1 3 3 4 1 1 4 1 1 5 1 5 1 1 2 3 4 5 1 1 1 2 2 1 1 1 5 4 3 4 3 5

51 Chemins de longueur 2 1 2 3 4 5 1 2 3 4 5 1 1 1 1 2 1 1 2 1 1 3 3 4 1 1 4 1 1 5 1 5 1 1 2 3 4 5 1 1 1 2 2 1 1 1 5 4 3 4 3 5

52 Chemins de longueur 2 1 2 3 4 5 1 2 3 4 5 1 1 1 1 2 1 1 2 1 1 3 3 4 1 1 4 1 1 5 1 5 1 1 2 3 4 5 1 1 1 2 2 1 1 1 5 4 3 4 3 5

53 Chemins de longueur 2 1 2 3 4 5 1 2 3 4 5 1 1 1 1 2 1 1 2 1 1 3 3 4 1 1 4 1 1 5 1 5 1 1 2 3 4 5 1 1 1 2 2 1 1 1 5 4 3 4 3 5

54 Chemins de longueur 2 1 2 3 4 5 1 2 3 4 5 1 1 1 1 2 1 1 2 1 1 3 3 4 1 1 4 1 1 5 1 5 1 1 2 3 4 5 1 1 1 2 2 1 1 1 5 4 3 4 3 5

55 Chemins de longueur 2 1 2 3 4 5 1 2 3 4 5 1 1 1 1 2 1 1 2 1 1 3 3 4 1 1 4 1 1 5 1 5 1 1 2 3 4 5 1 1 1 2 2 1 1 1 5 4 3 4 1 3 5

56 Chemins de longueur 2 1 2 3 4 5 1 2 3 4 5 1 1 1 1 2 1 1 2 1 1 3 3 4 1 1 4 1 1 5 1 5 1 1 2 3 4 5 1 1 1 2 2 1 1 1 5 4 3 4 1 3 5 1

57 Chemins de longueur 2 1 2 3 4 5 1 2 3 4 5 1 1 1 1 2 1 1 2 1 1 3 3 4 1 1 4 1 1 5 1 5 1 1 2 3 4 5 1 1 1 2 2 1 1 1 5 4 3 4 1 3 5 1

58 Chemins de longueur 2 1 2 3 4 5 1 2 3 4 5 1 1 1 1 2 1 1 2 1 1 3 3 4 1 1 4 1 1 5 1 5 1 1 2 3 4 5 1 1 1 2 2 1 1 1 5 4 3 4 1 3 5 1 1

59 Chemins de longueur 2 1 2 3 4 5 1 2 3 4 5 1 1 1 1 2 1 1 2 1 1 3 3 4 1 1 4 1 1 5 1 5 1 1 2 3 4 5 1 1 1 2 2 1 1 1 5 4 3 4 1 3 5 1 1

60 Chemins de longueur 2 1 2 3 4 5 1 2 3 4 5 1 1 1 1 2 1 1 2 1 1 3 3 4 1 1 4 1 1 5 1 5 1 1 2 3 4 5 1 1 1 2 2 1 1 1 5 4 3 4 1 3 5 1 1

61 Chemins de longueur 2 = A2 1 2 3 4 5 1 2 3 4 5 1 1 1 1 2 1 1 2 1 1 3 3 4 1 1 4 1 1 5 1 5 1 1 2 3 4 5 1 1 1 2 2 1 1 1 5 4 3 4 1 3 5 1 1

62 Chemins de longueur 3 x 1 2 3 4 5 1 2 3 4 5 1 1 1 1 2 1 1 2 1 1 3 3 4 1 1 4 1 1 5 1 5 1 1 2 3 4 5 1 1 1 2 2 1 1 1 5 4 3 4 1 3 5 1 1

63 Chemins de longueur 3 = A3 1 2 3 4 5 1 2 3 4 5 1 1 1 1 2 1 1 2 1 1 1 3 3 4 1 1 4 1 5 1 5 1 1 1 2 3 4 5 1 1 1 1 2 2 1 1 5 4 3 4 1 3 5 1

64 Fermeture transitive des graphes
Définition Soit G un graphe orienté de n noeuds. Soit A la matrice de nœuds adjacents correspondant. Complexité ? Soit Bn-1 = A + A2 + A3 … + An-1 Bn-1  P : matrice de booléens qui indique s’il existe un chemin entre toutes paires de nœuds 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).

65 H : la fermeture transitive de A.
Fermeture transitive des graphes Exemple graphe G graphe H 1 2 3 4 1 2 3 4 H : la fermeture transitive de A.

66 Algorithme deWarshall
1         2 P0 = 1 2         4 3 P1 = 1 2 4 3         P2 = 4 1 3 2       P3 = 4 1 3 2       P4 = 4 3

67 Algorithme de Warshall
{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 4. 3. [Boucle sur les sommets de départ] Pour i = 1, 2, ..., n répéter l'étape 4. 4. [Boucle sur les sommets adjacents] Pour j = 1, 2, ..., n répéter Pij  Pij ou (Pik et Pkj) 5. [Fin de l'algorithme] Stop Complexité ?

68 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] } ; k j k c MIN { a, b + c } Ck = i b a i j a k b c

69 Floyd Warshall 1 2 4 3  0 1 0 1   0 0 1 0   0 1 0 1   1 1 0 0 
          1  1     1     1  1   1 1            C A L U M T R I E P 1 = P0 = P0 =                   1  1     1    1  1  1 1  2 1 2 P1 = P1 = P 2 =               1                4 3 P2 = P2 = P 3 =                          P3 = P3 = P 4 =                             P4 = P4 = Floyd Warshall

70 Algorithme de Floyd Complexité ? 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 4. 3. [Boucle sur les sommets de départ] Pour i = 1, 2, ..., n répéter l'étape 4. 4. [Boucle sur les sommets adjacents] Pour j = 1, 2, ..., n répéter Cij  MIN (Cij , Cik + Ckj) 5. [Fin de l'algorithme] Stop Complexité ?

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

72 Algorithme de Floyd et les chemins
 0 1  8    0 4       0 2  0          C0 = W = P0 = 1 9 2 4 7 8 1 2  0 1  8    0 4       0 1  0          C1 = P1 = 4 3     0 4                C2 = P2 = Matrice des prédécesseurs Pk [i, j] = prédécesseur de j sur un plus court chemin de i à j dont les sommets intermédiaires sont tous  k                   C3 = P3 =                 C4 = P4 =

73 Algorithme de Floyd 1 2 4 3  0 1 5 8   13 0 4 13   9 7 0 9 
7 8 1 2                 C4 = P4 = 4 3 Exemple de chemin distance de 2 à 1 = C4[2,1] = 13 P4[2,1] = 4 ; P4[2,4] = 3 ; P4[2,3] = 2 ; 2 3 4 9 1


Télécharger ppt "Structures de données IFT-2000"

Présentations similaires


Annonces Google