Pr ZEGOUR Djamel Eddine

Slides:



Advertisements
Présentations similaires
Structures de données avancées : Principales structures de données
Advertisements

Théorie des graphes.
Modélisation par le concept de graphe
Chap. 1 INTRODUCTION Beaucoup de problèmes de la vie courante, tels la gestion de réseaux de communication ou l'ordonnancement de tâches, correspondent.
Chapitre VIII. Introduction aux graphes
Heuristiques A. Introduction B. Recherche d ’une branche
Théorie des graphes Un peu de vocabulaire.
Pr ZEGOUR Djamel Eddine
IFT-2000: Structures de données Les graphes Dominic Genest, 2009.
Structures de données IFT-2000
Structures de données IFT-2000

- GRAPHES - Composantes et types
Les Graphes. Graphes Un graphe G = (V, E) consiste en un ensemble V de noeud, et un ensemble E darêtes, tels que chaque arête dans E relie une paire de.
Pour le chemin le plus court pour tous les couples
Graphes 1. Introduction 2. Définition 3. Représentation mémoire
Ceci est un graphe valué Des arcs : 1-2, 1-4, 7-10,…..
Algorithme de DIJKSTRA
CSI2510 Structures de données et algorithmes Plus court chemin
Traversées (Parcours ) de graphes
PRESENTE PAR: KASHAMA LUBEMBE Dieudonné.
L'image: Le codage des images BacPro SEN Lycée Condorcet.
VECTEURS. I Translation II Vecteurs III Somme de vecteurs IV Produit d ' un vecteur par un réel V Coordonnées d ' un vecteur.
CINI – Li115 1 Semaine 9 Algorithmes de tri ● Introduction ● Tri à bulle ● - principe ● - algorithme ● - efficacité ● Tri par sélection ● - principe, algorithme,
Exercice 1 : A Roland-Garros, un balayeur doit, lors d’une interruption de jeu, nettoyer les lignes de la moitié d’un court de tennis. Pour gagner du temps,
II Circuits dans un graphe Une chaine est une liste ordonnée de sommets où deux sommets voisins de la liste sont des sommets adjacents du graphe.
Module de gestion des tournées de livraison
Les Instructions Itératives (Les Boucles)
Construire des requêtes
5 – PARALLELISME , ORDONNANCEMENT
Algorithmique Avancée et Complexité Chap2:Complexité et Optimalité
I21 Algorithmique et programmation II
Université Abou Bakr Belkaid Faculté des Sciences Département d’informatique Algorithmique Avancée et Complexité Chap5: Les méthodes de résolution exactes.
Activités mentales rapides Bilan sur le cours
Master Réseaux et Systèmes Distribués (RSD)
Algorithmique Avancée et Complexité Chap3:Diviser pour Régner
Techniques d’Optimisation Chapitre 2: Problème de flôt
Recherche plus court Chemin par A*
DESSIN TECHNIQUE Té de dessin Collège technique Sousse Collège technique Sousse.
Plan Introduction Parcours de Graphe Optimisation et Graphes
Université Abou Bakr Belkaid Faculté des Sciences Département d’informatique Algorithmique Avancée et Complexité Chap7: Les méthodes de résolution exactes.
Exercice 6 : Les sommets de ce graphe sont des équipes, et les arêtes des matchs d’un tournoi. Combien de matchs devra disputer chaque équipe ? Combien.
Fonctions Logiques & Algèbre de BOOLE
L ES I NSTRUCTIONS I TÉRATIVES (L ES B OUCLES ) Réalisé par : OUZEGGANE Redouane Département de Technologie Faculté de Technologie – Université A.Mira,
Plan Introduction Parcours de Graphe Optimisation et Graphes
Cours N°9: Algorithmiques Les Tableaux 1
LES GRAPHES. Introduction L'introduction d'éléments de la théorie des graphes dans l'enseignement de spécialité de la classe terminale de la série ES.
1 RECURSIVITE PRESENTATION Ch. PAUL ALGORITHMIQUE Présentation de la récursivité.
Branch-and-price algorithms for the solution of the multi-trip vehicle routing problem with time windows (MTVRPTW) 1.
Type Concret – Type Abstrait
ACP Analyse en Composantes Principales
Ä A B C D E F µ Un problème de Tournée (ou du Voyageur de commerce) consiste à chercher le meilleur trajet pour visiter.
Arbres de décision.
Plan Introduction Parcours de Graphe Optimisation et Graphes
Cycle, Cocycle, Arbre et Arborescence
SYSTèMES à évènements discrets
CSI 3505 / Automne 2005: Conception et Analyse des Algorithmes I.
Information, Calcul, Communication
CSI 3505 Algorithmes Voraces
RABAH M ed Ali 2018/2019
Piles et files.
INTELLIGENCE ARTIFICIELLE
CSI 3505 / Automne 2005: Conception et Analyse des Algorithmes I.
Contenu Introduction à Python
Encadrée par: - Mr. Abdallah ALAOUI AMINI Réalisée par : -ERAOUI Oumaima -DEKKAR Amal - ES-SAHLY Samira -Houari Mohammed PROGRAMMATION MULTIOBJECTIFS.
UMLV ã Plus courts chemins Toutes paires d'états
A. Zemmari SDRP & MA Problème du rendez vous : un algorithme probabiliste et une analyse probabiliste A. Zemmari.
LES GRAPHES. Introduction L'introduction d'éléments de la théorie des graphes dans l'enseignement de spécialité de la classe terminale de la série ES.
La programmation dynamique
Transcription de la présentation:

Pr ZEGOUR Djamel Eddine Les graphes Pr ZEGOUR Djamel Eddine

Les graphes Introduction Les graphes sont des modèles pour représenter des relations entre objets(graphe orienté) B A E I G C D H F Si les relations sont symétriques, on parlera de graphe non orienté Les sommets d'un graphe peuvent par exemple représenter des objets et les arcs des relations entre objets.

Les graphes Graphes orientés Ensemble de couples (u, v), u et v appartiennent à un ensemble de sommet( ou de nœuds). u est appelé la tête et v la queue. A chaque couple(u, v) est associé un arc u-->v. Nous dirons que u est adjacent à v. Un chemin est la séquence v1, v2, ...vn de sommets tels que v1-->v2, v2-->v3, ...vn-1-->vn sont des arcs. Longueur d’un chemin : nombre d'arcs qui le composent. Un chemin simple : tous les nœuds, sauf éventuellement le premier et le dernier, sont distincts. Graphe étiqueté.

Les graphes Graphes orientés Composante fortement connexe d'un graphe est composé de l'ensemble maximal de nœuds dans lequel il existe un chemin de tout nœud de l'ensemble vers chaque autre nœud de l'ensemble. Formellement, soit G=(V, E) un graphe. On peut partitionner V en classes d'équivalence Vi : v1, v2, ...vr v equiv w <==> Il existe un chemin de v à w et un chemin de w à v. Soit Ti l'ensemble des arcs avec les têtes et les queues dans Vi. Les graphes Gi=(Vi, Ei) sont appelés les composantes fortement connexes de G. Un graphe est dit fortement connexe s'il a une seule composante fortement connexe.

Les graphes Graphes non orientés Ensemble de paires ou d'arêtes(u, v). Chaque arête (u, v) représente en fait les deux arcs u-->v et v-->u. On parlera de cycle au lieu de circuit, Chaîne au lieu de chemin. Graphe connexe, ect... Arbre : Graphe non orienté connexe sans cycle. Arbre : Graphe orienté fortement connexe et sans circuit.

Les graphes Machine abstraite CréerNoeud(G, u) Créer un nœud u du graphe G. Liberernoeud(G, u) Libérer le nœud d’adresse u du graphe G. CreerArc(u, v, info) Créer un arc de u vers v avec l’information info LibererArc(u, v) Libérer l’arc de u vers v Info(u) Info rattachée au nœud u Aff_info(u, info) Affecter la valeur info au nœud u Arc(u, v) Info rattachée à l’arc u – v Aff_arc(u, v, info) Affecter la valeur info à l’arc u - v Adjacent(u, i) Accès au I-ème nœud adjacent à u Degre(u) Nombre de nœuds adjacents à u NoeudGraphe ( G, i ) Accès au I-ème nœud du graphe G NbreGraphe ( G ) Nombre de nœuds du graphe G

Les graphes Parcours des graphes DFS : Depht First Search ( Recherche en profondeur d'abord ) C’est le parcours le plus utilisé sur les graphes C'est la généralisation du parcours Préordre sur les arbres

Les graphes DFS : principe Initialement tous les nœuds sont marqués " non visités". Choisir un nœud v de départ et le marquer " visité". Chaque nœud adjacent à v, non visité, est à son tour visité en utilisant DFS récursivement. Une fois tous les nœuds accessibles à partir de v ont été visités, la recherche de v ( DFS(v) ) est complète. Si certains nœuds du graphe restent "non visités", sélectionner un comme nouveau nœud de départ et répéter le processus jusqu'à ce que tous les nœuds soient visités.

Les graphes DFS : Algorithme Dfs(v): Mark(v) := " visité" Pour chaque nœud w adjacent à v: Si Mark(w)= " non visité" Dfs(w) Fsi Finpour

Les graphes DFS : Algorithme Initialisation : Pour v=1, n Mark(v):=" non visité " Finpour Appelant : Pour v =1, n Si Mark(v) non visité: DFS(v) Fsi Finpour L'algorithme construit une forêt (implicite) de recouvrement des recherches.

Les graphes DFS : Exemple A B D E C I 2 1 3 5 4 6 Choisir A B A E I G Choisir F H 1 Choisir H

Les graphes Parcours des graphes BFS : Breadh First Search ( Recherche en largeur) C’est le parcours le moins utilisé sur les graphes C'est la généralisation du parcours niveau par niveau défini sur les arbres

Les graphes BFS : principe Initialement tous les nœuds sont marqués " non visités". Choisir un nœud v de départ et le marquer " visité". Chaque nœud adjacent à v, non visité, est à son tour visité en utilisant BFS Une fois tous les nœuds accessibles à partir de v ont été visités, la recherche de v ( BFS(v) ) est complète Si certains nœuds du graphe restent "non visités", sélectionner un comme nouveau nœud de départ et répéter le processus jusqu'à ce que tous les nœuds soient visités.

Les graphes BFS : Algorithme BFS(v): Mark(v) := "visité" CreerFile(F) ; Enfiler(F, v) Tantque Non Filevide(F) : Défiler(F, v) Pour chaque w adjacent à v Si Mark(w)non visité Mark(w):="visité" Enfiler(F, w) [Inserer( v-->w , Arbre )] Fsi Finpour Fintantque

Les graphes BFS : Algorithme : Initialisation : Pour v=1, n Mark(v):=" non visité " Finpour Appelant : Pour v =1, n Si Mark(v) non visité: BFS(v) Fsi Finpour L'algorithme construit une forêt (implicite) de recouvrement des recherches.

Les graphes BFS : Exemple 1 Choisir A A 2 4 3 B D E B A E I G C D H F 5 6 C I F G 1 2 Choisir F H 1 Choisir H

Les graphes Graphes : Application 1  Détermination du plus court chemin ( Algorithme de Dijkstra) Soit G = (V, E) un graphe où V est l'ensemble des nœuds et E l'ensemble des arcs. Chaque arc a une valeur positive. Soit S un nœud quelconque. Le problème consiste à déterminer le coût du plus court chemin de S vers tous les autres nœuds de G ( longueur d'un chemin = somme des coûts des arcs sur ce chemin) G peut être par exemple, une carte de vols aériens, dans laquelle les nœuds représentent les villes et chaque arc u-->v représente la ligne aérienne de u vers v. La valeur de l'arc est donc le temps de vol de u vers v.

Les graphes Graphes : Application 1  Détermination du plus court chemin ( Algorithme de Dijkstra) Considérations: Soient V = { 1, 2, ..., n} et S = 1. C[1..n, 1..n] tableau de coûts tel que C[i, j] est le coût de l'arc i-->j sinon c'est l'infini. D[2:n] : distance du nœud 1 à tous les autres nœuds. Le tableau D contiendra après exécution, la plus courte distance de S vers tous les autres nœuds.

Les graphes Graphes : Application 1  Détermination du plus court chemin ( Algorithme de Dijkstra) Algorithme {initialisation des distances de S vers tous les autres nœuds } Pour i=2, n : D[i] := C[1, i] Finpour Pour i=1, n-1 . Choisir un nœud w dans V-S tel que D[w] est minimale. . Ajouter w à S . Pour chaque nœud v dans V-S D[v]=Min(D[v],D[w]+C[w,v])

Les graphes Graphes : Application 1  Détermination du plus court chemin ( Algorithme de Dijkstra) Exemple S {1} {1,2} {1,2,4} {1,2,4,3} {1,2,4,3,5} w - 2 4 3 5 D[2 ] 10 10 10 10 10 D[3] ∞ 60 50 50 50 D[4] 30 30 30 30 30 D[5] 100 100 90 60 60

Les graphes Graphes : Application 2  Problème du Voyageur du Commerce (PVC) Un cycle Hamiltolnien dans un graphe non orienté est un chemin incluant tous les nœuds du graphe. Le PVC consiste à trouver dans un graphe étiqueté non orienté un cycle Hamiltolnien de poids minimal. En d’autres termes : Étant donné n cités avec des distances entre chacune d'entre elles. Trouver un cycle Hamiltonien de poids minimal.

Les graphes Graphes : Application 2  PVC (Algorithme de Krustal) 1. trier toutes les arêtes( il existe Cn2 ) 2. Prendre les arêtes une à une dans l'ordre en considérant les deux conditions suivantes : - Aucun sommet ne doit avoir un degré supérieur à 2. - Le seul cycle formé est le cycle final, quand le nombre d'arêtes acceptées est égal au nombre de sommets du graphe.

Les graphes 6 villes. avec les coordonnées suivantes : Graphes : Application 2  PVC (Algorithme de Krustal) Exemple 6 villes. avec les coordonnées suivantes : a=(0, 0); b=(4, 3); c=(1, 7) ; d=(15, 7) e=(15, 4) f=(18, 0) Il existe 6! = 720 permutations. Par contre seulement 15 arêtes ( ab, ac, ad, ae, af, bc, be, bd, be, bf, ...).

Les graphes Graphes : Application 2  PVC (Algorithme de Krustal) Scénario Choix de l'arête (d, e) car elle a une longueur égale à 3, la plus courte. On examine ensuite les arêtes (b, c), (a, b) et (e, f) de poids 5.(ordre quelconque). Elles sont toutes les 3 acceptables conformément aux critères 1. et 2. La prochaine arête la plus petite est (a, c) de poids 7,08. Comme elle forme un cycle avec(a, b) et (c, d) elle est rejetée. L'arête (d,e) est écartée dans les mêmes conditions.

Les graphes Graphes : Application 2  PVC (Algorithme de Krustal) Scénario (suite) L'arête (b, e) est à son tour écartée car elle porte le degré de b et e à 3. Idem pour (b, d) L'arête suivante(c, d) est acceptée. On a maintenant un chemin a->b->c->d->e->f L'arête (a, f) est acceptée et ferme l'itinéraire.

Les graphes Graphes : Représentation mémoire 1. Matrice Si V = {v1, v2, ..., vn} est l'ensemble des sommets, le graphe est représenté par une matrice A[n, n] de booléens tels que A[i, j] est vrai s'il existe un arc de i vers j. Si le graphe est étiqueté, A[i, j] représentera la valeur. 2. Tableaux de listes linéaires chaînées Le graphe est représenté par un tableau Tete[1..n] où Tete[i] est un pointeur vers la liste des sommets adjacents à i. 3. Liste de listes linéaires chaînées Le graphe est représenté par une liste de nœuds. Chaque nœud pointe vers la liste des sommets qui lui sont adjacents.

Les graphes Graphes : Représentation mémoire

Les graphes Graphes : Représentation mémoire (1) B A D E C v1 v2 v3 v4 Liste de listes . A 2 B 1 C D E v1 v3 v4 v2 v5 5 Graphe

Les graphes Graphes : Représentation mémoire (2) B A D E C v1 v2 v3 v4 Liste de listes 5 Graphe A 2 B 1 C D 1 E 1 . . v2 v5 v1 v4 . . . v3 .

Les graphes Implémentation des graphes en PASCAL ( DYNAMIQUE /Liste de listes) Représentation mémoire (1) { Graphes } Typegraphe = ^Un_graphe; Un_graphe = RECORD Prem : Typeliste; Dernier : Typeliste; Nbr : INTEGER; END; Typelistearc = ^Elementlistearc; Elementlistearc = RECORD Valarc : INTEGER; { Valeur rattachée à l'arc } Noeud : Pointer; Suivant : Typelistearc END; { Listes } Typeliste = ^Elementliste; Elementliste = RECORD Element : Typenoeud; Suivant : Typeliste END; { Noeud } Typenoeud = ^Elementnoeud; Elementnoeud = RECORD Valnoeud : INTEGER; { Valeur rattachée au noeud } Degre : INTEGER; { Degré du noeud } List : Typelistearc; { Liste des noeuds adjacents contenant les valeurs des arcs } END;

Les graphes Implémentation des graphes en C (DYNAMIQUE / Listes de listes) /* Graphes */ struct Typegraphe { struct Typeliste *Prem; struct Typeliste *Dernier ; int Nbr; } Représentation mémoire (1) struct Typelistearc { int Valarc ; /* Valeur rattachée à l'arc */ struct Typenoeud *Noeud; struct Typelistearc *Suivant ; } /* Listes */ struct Typeliste { struct Typenoeud *Element; struct Typeliste *Suivant; } ; /* Noeud */ struct Typenoeud { int Valnoeud ; /* Valeur rattach‚e au noeud */ int Degre ; /* Degré du noeud */ struct Typelistearc *List; /* Liste des noeuds adjacent contenant les valeurs des arcs */ }