Structures de données IFT-2000

Slides:



Advertisements
Présentations similaires
Erratum C Surcharge For(int x=0; … 2.
Advertisements

Cours n° 7 Standard Template Library II.
Cours n° 6 Standard Template Library I.
Structures de données et complexité
Structures de données et complexité LIFO – FILO – FIFO – etc…
Au programme du jour …. Un peu plus de structures de données
Cours n° 9 Conception et Programmation à Objets
Cours n° 8 Conception et Programmation à Objets
La programmation générique avec la STL EIUMLV - Informatique et Réseaux 99 Benoît ROMAND.
Approfondissement du langage
JAV - TD 6 Structures de données JAVA
Structures collectives en Java
Structures de données linéaires
IPA – Catherine Faron Zucke et Anne Marie Deryr. suite ordonnée d'éléments de taille variable ArrayList liste; liste = new ArrayList (); Ne peuvent contenir.
II. Chaînage, SDD séquentielles
Leçon 6 : Structures de données dynamiques IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier.
Bibliothèque standard du C++
Methode de Tri efficace
Les Classes les structures en C (struct) regroupent des variables : structuration de l'analyse mais problèmes de cohérence problèmes de sécurité d'accès.
Standard Template Library (STL)
Structures de données IFT-2000
Traiter des Données avec la STL
Structures de données IFT Abder Alikacem La classe vector Édition Septembre 2009 Département dinformatique et de génie logiciel.
Structures de données IFT-2000
Structures de données IFT Abder Alikacem La classe string Département dinformatique et de génie logiciel Édition Septembre 2009 Département dinformatique.
Structures de données IFT Abder Alikacem Espace de nommage Département d’informatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT-2000
Structures de données IFT-2000 Abder Alikacem Espace de nommage Département dinformatique et de génie logiciel Édition Septembre 2009 Département dinformatique.
Structures de données IFT-2000
Structures de données IFT-2000
Structures de données IFT-2000 Abder Alikacem La librairie STL du C++ Département dinformatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT-2000
Structures de données IFT-2000
Structures de données IFT-2000
Structures de données IFT-2000
Structures de données IFT-2000 Abder Alikacem Standard Template library Édition Septembre 2009 Département dinformatique et de génie logiciel.
Structures de données IFT Abder Alikacem Gestion des exceptions Département dinformatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT-10541
Structures de données IFT-2000
Structures de données IFT-2000 Abder Alikacem Sous-séquence de somme maximale (Algo#4). Algorithme retour arrière. Département dinformatique et de génie.
Programme de baccalauréat en informatique Programmation Orientée Objets IFT Thierry EUDE Module 7 : Classes et fonctions paramétrables Département.
Conteneurs STL.
Rappels Java.
Standard Template Library
Leçon 1 : notion dobjet IUP Génie Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
Structures de données IFT-2000
Structures de données IFT-10541
Structures de données IFT Abder Alikacem Linéarisation des matrices Département dinformatique et de génie logiciel Édition septembre 2009.
Structures de données IFT-2000 Abder Alikacem Semaine 12 (2 ième partie) Les B-arbres Département d’informatique et de génie logiciel Édition septembre.
Structures de données IFT-2000 Abder Alikacem L’héritage en C++ Département d’informatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT Abder Alikacem Semaine 10 Les arbres SPLAY Département dinformatique et de génie logiciel Édition septembre
Structures de données IFT-2000
Structures de données IFT-2000 Abder Alikacem Retour sur les listes ordonnées Département dinformatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT-10541
Structures de données IFT-10541
Structures de données IFT-2000
Les fichiers texte en C++
Structures de données IFT Abder Alikacem Semaine 2 Tests sur les pointeurs Département d’informatique et de génie logiciel Édition Janvier 2009.
Les structures de données séquentielles contiguës
Ch. PAUL - Piles et Files à l'aide de listes chainées
Templates, Containers et STL Structures de données de base tableau, liste chaînée file, pile, arbres, hashtable collection, ensemble 2 caractéristiques.
ETNA – 1ème année Guillaume Belmas –
Cours LCS N°4 Présenté par Mr: LALLALI
Templates & STL Ou comment ne pas réinventer la roue à chaque fois.
Structures de données IFT-2000
Structures de données IFT-2000 Abder Alikacem La STL du C++. La récursivité Semaine 9 Département d’informatique et de génie logiciel Édition Septembre.
1 Listes des méthodes de la classe string, et exemples.
Structures de données IFT-2000 Abder Alikacem Laboratoire #1 Département d’informatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT-2000 Abder Alikacem Standard Template library Semaine 5 Édition Septembre 2009 Département d’informatique et de génie logiciel.
Chapitre 21 Collections partie III Set Une collection qui contient des éléments uniques. Deux implémentation :  HashSet : stock les éléments.
Transcription de la présentation:

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

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

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.

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

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)

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

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

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 ; }

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 << ‘ ‘;

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++ http://www.sgi.com/tech/stl/

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

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

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..

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} }

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

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

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

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

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)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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).

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.

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

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

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

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

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

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

Algorithme de Floyd et les chemins  0 1  8    0 4     7 0 9   0 2  0   - 1 - 1   - - 2 -   - 3 - 3   4 4 - -  C0 = W = P0 = 1 9 2 4 7 8 1 2  0 1  8    0 4     7 0 9   0 1  0   - 1 - 1   - - 2 -   - 3 - 3   4 1 - -  C1 = P1 = 4 3  0 1 5 8    0 4     7 0 9   0 1 5 0   - 1 2 1   - - 2 -   - 3 - 3   4 1 2 -  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  0 1 5 8    0 4 13    7 0 9   0 1 5 0   - 1 2 1   - - 2 3   - 3 - 3   4 1 2 -  C3 = P3 =  0 1 5 8   13 0 4 13   9 7 0 9   0 1 5 0   - 1 2 1   4 - 2 3   4 3 - 3   4 1 2 -  C4 = P4 =

Algorithme de Floyd 1 2 4 3  0 1 5 8   13 0 4 13   9 7 0 9  7 8 1 2  0 1 5 8   13 0 4 13   9 7 0 9   0 1 5 0   - 1 2 1   4 - 2 3   4 3 - 3   0 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